Mybatis 插入时获取主键的方式

x33g5p2x  于2021-11-22 转载在 其他  
字(1.5k)|赞(0)|评价(0)|浏览(177)
mybatis 作为一个主流的 ORM 框架,深受广大开发者的喜爱。有人的地方就有江湖,有代码的地方自然有坑,下面来说说获取 mybatis 的插入后返回的主键。
我们可以想一下自动增长的主键特性,在数据库里面肯定有某个地方管理 ID 的自增长,那个机制每次都会记录最近一次新增的主键,或者是取最大值,然后在下一次进行递增处理,因此我们有获取插入的主键要么在新增之前,要么在新增之后,按照习惯我们一般喜欢在新增之后获取主键,下面来说说获取主键的方式。

继承 Mapper, MySqlMapper

这种方式比较简单,直接在实体类主键加上注解 @Id 和 **@GeneratedValue(strategy = GenerationType.IDENTITY) **即可,但是在项目中不建议继承这两个类,不过话说回来,在微服务中,单标操作,使用这个 api 比较快捷,实体配置如下

@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

使用 xml

这种方式一般有两种:

  • 直接在标签属性上添加 useGeneratedKeys(是否是自增长,必须设置 true) 和 keyProperty(实体类主键属性名称) 、keyColumn(数据库主键字段名称)
<insert id="insertOne" parameterType="com.dao.model.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
    
        INSERT INTO user(name,age) VALUES(#{name},#{age})
    
    </insert>
  • 通过查询返回主键,其中 resultType 是主键返回类型,keyProperty 是实体类主键属性,order 是获取主键方式,AFTER 指插入之后执行,下面 sql 就是查询最后一个主键。
<insert id="insertOne" parameterType="com.dao.model.User" >
    
        <selectKey resultType="java.lang.Long" keyProperty="id" order="AFTER" >
            SELECT LAST_INSERT_ID()
        </selectKey>
        
        INSERT INTO user(name,age) VALUES(#{name},#{age})
    
    </insert>

注解方式

useGeneratedKeys(是否是自增长,必须设置 true) 和 keyProperty(实体类主键属性名称) 、keyColumn(数据库主键字段名称)

@Insert("INSERT INTO user(name,age) VALUES(#{user.name},#{user.age})")
    @Options(useGeneratedKeys=true, keyProperty="user.id",keyColumn="id"  )
    public int insertOne(@Param("user")User user);

注意

提醒小伙伴们,若在映射的 mapper 里面参数取了别名,所有的实体类的属性都要加上别名.属性名,比如注解方式的案例。

相关文章