mybatis generator配置独立sequence

正常情况下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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值