MyBatis教程大全


 MyBatis SQL 映射

     MyBatis select 标签

     MyBatis 多数据库支持

     MyBatis selectKey 标签作用

     MyBatis @SelectKey注解用法介绍

     MyBatis @SelectKey注解用法详细介绍

     MyBatis keyProperty 属性介绍

     MyBatis insert、update 和 delete 元素

     MyBatis sql 元素

 MyBatis SQL 参数映射

     MyBatis SQL 参数映射

 MyBatis 动态SQL

     MyBatis 动态SQL与数据准备

     MyBatis if 标签

     MyBatis if else 用法

     MyBatis choose、when、otherwise 标签

     MyBatis where 标签

     MyBatis set 标签

     MyBatis foreach 标签

     MyBatis bind 标签

     MyBatis trim 标签

 MyBatis SQL 结果映射

 MyBatis SQL 结果之关系映射

 MyBatis 使用介绍

     MyBatis typeAliases 类型别名

     MyBatis typeHandlers 类型处理器

     MyBatis Transaction 事务接口

     MyBatis transactionManager 事务管理

     SqlSessionFactory 介绍

     MyBatis 核心对象 SqlSession

     MyBatis 初始化 创建 Session 实例

     MyBatis ObjectFactory 对象工厂

     MyBatis缓存机制:一级缓存和二级缓存

     MyBatis 常用注解

 MyBatis 配置文件

     MyBatis 配置文件

 MyBatis 映射

     MyBatis 映射简介

     MyBatis ResultMap 映射

     MyBatis 自动映射

     MyBatis 高级映射

     MyBatis 集合映射

     MyBatis 关联映射

     MyBatis 一对一关联映射

     MyBatis 一对多关联映射

     MyBatis 多对多关联映射

     MyBatis 一对一(注解形式)

     MyBatis 一对多(注解形式)

     MyBatis 多对多(注解形式)

     MyBatis resultMap 元素

 MyBatis 面试题库

     #{}和${}的区别是什么?

     数据库链接中断如何处理?

     数据库插入重复如何处理?

     事务执行过程中宕机的应对处理方式

     Java客户端中的一个Connection问题

MyBatis selectKey 标签作用

有时候新增一条数据不仅仅要知道是否插入成功,因为后面的逻辑可能还需要这条新增数据的主键,这时候可以使用selectKey 标签获取自增主键,从而避免再次查询数据库。另外,有些业务需要自定义数据表的主键,这个时候也可以使用selectKey 标签来实现,它可以随意的设置生成主键的方式。

1、selectKey 标签作用1:获取自增主键

通常情况下,新增一条数据信息,其主键ID是数据库自动生成的,一般采用自增的形式。selectKey 标签可以获取这个生成的主键。如下所示:

<insert id="addUser" parameterType="cn.mybatis.entity.User">
<selectKey resultType="java.lang.Integer" order="AFTER" keyProperty="id">
    select LAST_INSERT_ID()
</selectKey>
    insert into t_user(name,sex,phone) values (#{name},#{sex},#{phone})
</insert>
UserDao.add(user);
Integer userId = user.getId();
System.out.println("新增用户的id为:" + userId);

selectKey 标签的作用:首先在数据库插入user对象,然后执行 select LAST_INSERT_ID()获取数据库里自动生成的主键,最后赋值给user对象的id属性。

2、selectKey 标签作用2:自定义主键的生成方式

除了自动生成主键以外,有些业务需要自定义数据表的主键,这个时候也可以使用selectKey 标签来实现,如下所示:

<insert id="addUser" parameterType="cn.mybatis.entity.User">
    <selectKey resultType="string" order="BEFORE" keyProperty="id">
        select uuid()  
    </selectKey>
    insert into t_user(id,name,sex,phone) values (#{id},#{name},#{sex},#{phone})
</insert>

3、selectKey 标签属性介绍

  • keyProperty:对应Java实体类中充当主键的属性名,跟数据库的主键对应;
  • order:取值 AFTER 或者 BEFORE。如上例子所述,AFTER 表示在insert执行之后执行 SELECT LAST_INSERT_ID() ,多用获取自增主键;BEFORE 表示在insert执行之前执行select uuid(),适合那种主键不是自增的情况,实现自定义主键。
  • resultType:主键类型

4、selectKey 标签与 useGeneratedKeys、keyProperty 属性

其实,获取自增主键的方式除了使用selectKey 标签以外,还可以使用useGeneratedKeys、keyProperty 属性,可以参考:MyBatis keyProperty 属性介绍,相对来说,后者更简洁。