前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mybatis generator配置独立sequence

mybatis generator配置独立sequence

作者头像
全栈程序员站长
发布2021-05-19 15:46:11
6280
发布2021-05-19 15:46:11
举报
文章被收录于专栏:全栈程序员必看

正常情况下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 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100428.html原文链接:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档