正常情况下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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100428.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...
mybatis generator配置独立sequence
mybatis generator配置独立sequence
赞 (0)