Mybatis针对数据库主键自增

  • 概要

mybatis针对不同的数据库表主键自增有不同的设置,下面主要以MySQLpgOracle数据库为例讲述。数据库中主键的生成无非就两种,一种是 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
分享
二维码
< <上一篇
下一篇>>