Mybatis注解


背景

之前在学习的时候一直偏重于在映射文件中编写大量的sql,但是对于模块需要的sql语句比较简短,使用注解似乎效率似乎更高,还不需要创建对应的映射文件。所以在本文中,我重点学习低中等级的知识,对于高级部分只是简单了解。对于简单的可以使用基于注解的方式,稍微复杂的就选择映射方式。

以上是本人的个人观点,知识无穷尽,但人的精力是有限的。

由于已经具备了一些基础,所以下面的注解都是以例子的形式出现。

mybatis使用注解和使用映射文件的区别

基于xml的方式

必须有个一个XxxMapper.xml与之对应,方法名对应xml中的id,方法入参和方法出参都必须对应起来,很容易出问题。我们在开发的时候有的是可以使用代码生成器生成,但是有的是必须自己手写,有的公司也是要求必须手写,所以这里需要注意。

基于注解的方式

不需要XxxMapper.xml文件,只需要在对应XxxMapper.java中的方法上加上注解就搞定了,但是这里是有坑的。毕竟把sql放到了我们的Java代码里了。

注意: 对于同一个java方法,映射和注解只能选其一,如果都选,则报错。

mybatis常用注解

注解 说明
@Insert 实现新增
@Delete 实现删除
@Update 实现更新
@Select 实现查询
@Result 实现结果集封装
@ResultMap 实现引用@Results 定义的封装
@Results 实现结果集封装
@One 实现一对一结果集封装
@Many 实现一对多结果集封装
@SelectProvider 实现动态 SQL 映射
@CacheNamespace 实现注解二级缓存的使用

mybatis的所有注解

简单注解使用

@Insert

插入sql,和 xml insert sql语法完全一致

 @Insert("insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday})")
 void saveUser(User user);

@Delete

@Delete("delete from user where id=#{id}")
void deleteUser(Integer userId);

@Update

@Update("update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address} where id=#{id}")
void updateUser(User user);

@Select

@Select("select * from user where id=#{id}")
User findById(Integer userId);

@Select("select * from user where username like '%${value}%'")  //字符串拼接
List findByName(String username);

@Options

该注解一般用在两种场景:

  • 设置缓存时间
  • 为对象生成自增的主键值
@Insert("insert into user(id,name) values(#{id},#{name})")
@Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id") 
public int insert(User user);

@SelectKey

@SelectKey为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。

其两大作用:

  • 生成主键
  • 获取刚刚插入数据的主键
@Insert("insert into user(id,name) values(#{id},#{name})")
@Options(useGeneratedKeys = true, keyColumn = "id", keyProperty = "id")
@SelectKey(statement = "select last_insert_id()" ,keyProperty = "id",keyColumn = "id",resultType = int.class,before = false) 
public int insert(User user);

/*
before属性,默认是true,在执行插入语句之前,执行select last_insert_id()。如果设置为flase,则在插入这个语句之后,执行select last_insert_id()
*/

参考文档

如果想知道结果集相关的注解使用,可以去看看下面的文章,里面都有讲到。

Mybatis注解开发(超详细)_牛哄哄的柯南的博客-CSDN博客_mybatis注解开发

Mybatis常用的11中注解—Mybatis中文网