mybatis-plus框架,是很多后端开发工程师的首选,今天这边小记一个经验问题。
因为业务需要哈,需要一段比较复杂的sql语句,但是大致实现的逻辑就是insert into table1 select col1,col2 from table2这样。
因为语法比较复杂,没办法直接使用java代码来拼凑,就把sql语句直接写到了mapper.xml里头。一切都觉得那么完美。
但是运行起来,也不报错,或者报错内容如下:
nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: java.lang.NullPointerException\r\n### The error may exist in file [G:\\githup\\littleRui\\trunk\\source\\cloud-service\\target\\classes\\com\\ruijie\\biz\\mapper\\xml\\TempChannelRacePointMapper.xml]
### The error may involve com.ruijie.biz.mapper.TempChannelRacePointMapper.generateRunningData
### The error occurred while executing an update
### Cause: java.lang.NullPointerException
空指针,怪事,直接把sql丢到mysql的控制台运行,运行正常。数据也进去了。但是通过xml配置sql来运行就是报错。
后面发现,原来呀:批量插入的情况下,mybatis不允许用insert标签来包含sql,只能用select标签。
错误的写法:
<insert id="test">
insert into table1 select col1 ,col2 from table2
</insert>
正确写法:
<select id="test">
insert into table1 select col1 ,col2 from table2
</select >
参考文章: