Mybatis针对数据库主键自增
- 概要
mybatis针对不同的数据库表主键自增有不同的设置,下面主要以MySQL、pg、Oracle数据库为例讲述。数据库中主键的生成无非就两种,一种是 int 类型的自增,一种是 varchar 类型的非自增(例如:UUID)。
在 Mybatis 中,提供了 selectKey 来帮我们获取新增的主键,同时通过 selectKey 可以很容易的实现自增还是非自增规则的需求。下面是常用的方式:
- selectKey介绍
属性 | 描述 |
---|---|
keyProperty | selectKey 语句结果应该被设置的目标属性(也就是自增的主键字段,比如id)。 |
resultType | 结果的类型,比如java.lang.Integer,java.lang.String等。MyBatis 允许任何简单类型用作主键的类型,包括字符串。 |
order | 可以设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。 |
statementType | MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 语句的映射类型,分别代表 PreparedStatement 和 CallableStatement 类型。 |
- MySQL
MySQL针对主键是Int、BIGINT类型。
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
select LAST_INSERT_ID()
</selectKey>
MySQL主键是varchar类型
<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.string">
select uuid()
</selectKey>
第二种方法:
可以在后端根据主键的长度设置主键再写入(推荐)
UUID.randomUUID().toString();------64位字符串主键
UUID.randomUUID().toString().replace("-","");-----32位字符串主键
- Oracle
主键为字符串类型建议使用UUID后端生成主键,同MySQL的后端字符串生成相同,这里就不做介绍。
主键为int自增长类型:
<selectKey keyProperty="id" resultType="java.lang.Integer" order="BEFORE">
select 表对应的序列名称.NEXTVAL from dual
</selectKey>
- pg
<selectKey keyProperty="id" resultType="int" order="BEFORE" databaseId="pg">
select nextval('序列表名')
</selectKey>
版权声明:
作者:Gomo
链接:https://www.develophm.com/index.php/mybatis%e9%92%88%e5%af%b9%e6%95%b0%e6%8d%ae%e5%ba%93%e4%b8%bb%e9%94%ae%e8%87%aa%e5%a2%9e/115/
来源:开发之家
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
共有 0 条评论