正常情况下mybatis 使用last_insert_id()就可以了,但为了防止同时插入多条产生的不正确的情况,还是用独立的sequence表好全局用一个还能隐藏,不会被人猜到。注意:字段一定要用无符号的:bigint,以免溢出。mysql 数据大小 int 4294967295 ,bigint 18446744073709551615附配置文件:<table tableName="%"> <!--只生成model文件,如果mapper做过修改了就这样生成--> <!--<property name="modelOnly" value="true"/>--> <!--todo 这样的写法有问题的。因为last_insert_id()返加第一条插入的数据的id,如果一次插入多条数据,返回的id就是错的了。--> <!--所以,最好独立建一个sequence来处理,如下 参考:https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id mysql> CREATE TABLE sequence (id INT NOT NULL); mysql> INSERT INTO sequence VALUES (0); mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1); mysql> SELECT LAST_INSERT_ID(); 表建好后不能直接用,要先建一个function,再用 select seq() 来替代 select LAST_INSERT_ID()就行了。 下面是建function步骤: 第一步drop DROP FUNCTION IF EXISTS seq 第二步:定义 delimiter $$ CREATE FUNCTION seq() RETURNS INT BEGIN DECLARE RETID int; UPDATE sequence SET id=LAST_INSERT_ID(id+1); SELECT LAST_INSERT_ID() INTO RETID ; RETURN RETID; END$$ 第三步:提交定义 delimiter ; 第五步:调用 select seq() --> <!--insert语句如果要返回自动生成的key值,一般会在insert里加入useGeneratedKeys属性,如下配置可以实现.用对象的getId()来获得数据--> <generatedKey column="id" sqlStatement="SELECT seq()" identity="true" type="post"/> <!--<generatedKey column="id" sqlStatement="SELECT LAST_INSERT_ID()" />--> </table>参考:http://blog.haohtml.com/archives/15222
mybatis generator配置独立sequence
最新推荐文章于 2022-05-31 17:22:02 发布
本文介绍了一种在MyBatis中使用独立sequence表来确保主键唯一性的方法,并详细解释了如何创建及调用自定义函数seq()来获取正确的自增ID,避免了在多条记录同时插入时可能出现的问题。
9145

被折叠的 条评论
为什么被折叠?



