问题
使用maven自动生成的mapper文件,发现查询可以,但是insert时报错
org.apache.ibatis.executor.ExecutorException: Error selecting key or setting result to parameter object. Cause: java.lang.IllegalStateException: Cannot determine target DataSource for lookup key [null]
原因
跟踪源码发现在自动生成的mapper.xml的insert方法中存在
<selectKey keyProperty="taskId" order="AFTER" resultType="java.lang.Long">
SELECT LAST_INSERT_ID()
</selectKey>
而datasource是通过在mapper.java文件上通过注解的方法注入的
@Mapper
@SelectDataSource("ds2")
在执行该方法时,找不到对应的datasource
解决方案
方案一
去掉mapper.xml中的selectkey
或者调整为
<insert id="insert" keyColumn="id" keyProperty="id" useGeneratedKeys="true"
方案二
调整@SelectDataSource("ds2")为以下方式
@MapperScan(basePackages = {"com.didichuxing.dd596.driver.mall.dal.mapper.apply",
"com.didichuxing.dd596.driver.mall.dal.mapper.stock",
"com.didichuxing.dd596.driver.mall.dal.mapper.task" ,
"com.didichuxing.dd596.driver.mall.dal.mapper.qrcode",
"com.didichuxing.dd596.driver.mall.dal.mapper.record",
"com.didichuxing.dd596.driver.mall.dal.mapper.redeem",
"com.didichuxing.dd596.driver.mall.dal.mapper.withhold"
},
sqlSessionFactoryRef = "driverMallSqlSessionFactory")