问题
数据库为mysql;
mapper.xml文件为mybatis-generator自动生成的;
连接池使用DruidDataSource;
最终生成的insertSelective如下:
出现问题:
-
主键冲突:[WMyBatisTraceInterceptor:54][com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry ‘8963’ for key ‘PRIMARY’
-
产生了为0的主键
解决
mapper中的order=“BEFORE”,对oracle等是适用的,但对mysql等自增id的,应使用order="AFTER"准确。
SELECT LAST_INSERT_ID();是基于connect的,用BEFORE的情况是,该连接优先生成id,然后insert;用AFTER是在插入后获取到自增后的id。
怎样生成order="AFTER"的mapper.xml,为什么自动生成的是BEFORE呢?
要在generator-config.xml里配置:identity=“true” 默认是false
区别是:
-
BEFORE 变为 AFTER
-
id列在insert语句中删除了