问题

使用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")

D-Chat_20250627103605

在执行该方法时,找不到对应的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")