MyBatis常用注解介绍

1.MyBatis常用注解

分类注解位置对应的XML标签作用
SQL语句映射@select方法<select>标记查询语句
@Insert
@Update
@Delete
<insert>
<update>
<delete>
增删改
结果集映射@Results方法<resultMap>结果映射的列表,可指定多个@Result注解
@Result resultType属性 指定查询结果集的映射关系
@ResultType <resultMap> 用于指定查询结果集的类型
@ResultMap <resultMap> 标记结果集映射规则
常用@SelectKey方法插入后,获取到自增 id 的值
@Options指定插入语句的选项,映射语句的属性
@Param参数指定方法参数名称
关系映射@One方法<association>指定一对一关联关系
@Many<collection>指定一对多关联关系
动态SQL @InsertProvider
@UpdateProvider
@DeleteProvider
@SelectProvider
方法 <insert>
<update>
<delete>
<select>
指定动态生成SQL语句的提供者
缓存@CacheNamespace<cache>开启二级缓存

2.注解使用方法

首先介绍一下Mybatis注解的使用方法:

  1. 在全局配置文件里的配置映射
<!--SqlMapConfig.xml-->
<mappers>
    <mapper class="com.by.mapper.UserMapper"/>
</mappers>
  1. 在mapper接口的方法的上面添加注解
//UserMapper
@Select("select * from user where uid = #{uid}")
public User findUserById(int uid);
  1. 创建会话调用此方法。
public static void main(String[] args){
	//1.Resources:加载配置文件
	String resource = "SqlMapConfig.xml";
	inputStream = Resources.getResourceAsStream(resource);
	
	//2.SqlSessionFactoryBuilder:构建SqlSessionFactory工厂
	//3.sqlSessionFactory:创建SqlSession对象
	SqlSessionFactory sqlSessionFactory =
	        new SqlSessionFactoryBuilder().build(inputStream);
	//4.SqlSession:创建代理对象
	sqlSession = sqlSessionFactory.openSession();
	UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
	
	//执行方法
	User user = userMapper.findUserById(1);
	System.out.println(user);
}

3.SQL语句映射

@Select

  • 作用:标记查询语句。

@Select用于标记查询语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Select注解时,需要在注解中指定SQL语句。

  • 示例:
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(@Param("id") Long id);

@Insert

  • 作用:标记插入语句。

@Insert用于标记插入语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Insert注解时,需要在注解中指定SQL语句。

  • 示例:
@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
int addUser(User user);

@SelectKey

  • 作用:插入后,获取到自增 id 的值

  • 示例:

@Insert("insert into user(id,name) values(#{id},#{name})")
@SelectKey(statement = "select last_insert_id()", keyProperty = "id", keyColumn = "id", resultType = int,before = false)
public int insert(User user);

//@SelectKey 各个属性含义如下。
//statement:表示要运行的 SQL 语句;
//keyProperty:可选项,表示将查询结果赋值给代码中的哪个对象;
//keyColumn:可选项,表示将查询结果赋值给数据表中的哪一列;
//resultType:指定 SQL 语句的返回值;
//before:默认值为 true,在执行插入语句之前,执行 selectlast_insert_id()。
//		  值为 flase,则在执行插入语句之后,执行 select last_insert_id()。

@Update

  • 作用:标记更新语句。

@Update用于标记更新语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Update注解时,需要在注解中指定SQL语句。

  • 示例:
@Update("UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}")
int updateUser(User user);

@Delete

  • 作用:标记删除语句。

@Delete用于标记删除语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Delete注解时,需要在注解中指定SQL语句。

  • 示例:
@Delete("DELETE FROM users WHERE id = #{id}")
int deleteUserById(@Param("id") Long id);

@Param

  • 作用:用于指定方法参数名称。

@Param用于为SQL语句中的参数指定参数名称。该注解可以用于接口方法或XML文件中,通常与@Select、@Insert、@Update、@Delete等注解一起使用。使用@Param注解时,需要指定参数名称。

  • 示例:
@Select("SELECT * FROM users WHERE name = #{name} AND age = #{age}")
List<User> getUsersByNameAndAge(@Param("name") String name, @Param("age") Integer age);

@Options

  • 作用:用于指定插入语句的选项。

@Options用于指定一些可选的配置项。该注解可以用于接口方法或XML文件中,通常与@Insert、@Update、@Delete等注解一起使用。使用@Options注解时,可以指定一些可选的配置项。

  • 示例:
@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insertUser(User user);

4.结果集映射

@ResultType

  • 作用:用于指定查询结果集的类型。

@ResultType用于指定查询结果的类型。该注解可以用于接口方法或XML文件中,通常与@Select、@Insert、@Update、@Delete等注解一起使用。使用@ResultType注解时,需要指定查询结果的类型。

  • 示例:
@Select("SELECT name, age FROM users WHERE id = #{id}")
@ResultType(User.class)
User getUserById(Long id);

@Results

  • 作用:用于指定多个@Result注解。

@Results用于标记结果集映射,该注解可以用于接口方法或XML文件中,通常与@Select注解一起使用。使用@Results注解时,需要指定映射规则。

  • 示例:
@Select("SELECT * FROM users WHERE id = #{id}")
@Results(id = "userResultMap", value = {
    @Result(property = "id", column = "id"),
    @Result(property = "name", column = "name"),
    @Result(property = "age", column = "age")
})
User getUserById(@Param("id") Long id);

@Result

  • 作用:用于指定查询结果集的映射关系。

@Result用于标记单个属性与结果集中的列之间的映射关系。该注解可以用于接口方法或XML文件中,通常与@Results注解一起使用。使用@Result注解时,需要指定映射规则。

  • 示例:
@Select("SELECT * FROM users WHERE id = #{id}")
@Results(id = "userResultMap", value = {
    @Result(property = "id", column = "id"),
    @Result(property = "name", column = "name"),
    @Result(property = "age", column = "age")
})
User getUserById(@Param("id") Long id);

@ResultMap

  • 作用:用于指定查询结果集的映射关系。

@ResultMap用于标记结果集映射规则。该注解可以用于接口方法或XML文件中,通常与@Select注解一起使用。使用@ResultMap注解时,需要指定映射规则。

  • 示例:
@Select("SELECT * FROM users WHERE id = #{id}")
@ResultMap("userResultMap")
User getUserById(@Param("id") Long id);

5.关系映射

@One

  • 作用:用于在一对一关联查询中指定查询结果的映射方式。
@Results({
  @Result(id = true, column = "id", property = "id"),
  @Result(column = "username", property = "username"),
  @Result(property = "role", one = @One(resultMap = "userResultMap"))
})
public List<User> findAll();

@Many

作用:用于在一对多关联查询中指定查询结果的映射方式。

示例:

@Mapper
public interface UserDao {
    @Results(id = "userResultMap", value = {
            @Result(property = "userId", column = "user_id", id = true),
            @Result(property = "userName", column = "user_name"),
            @Result(property = "accounts", column = "user_id", javaType = List.class,
                    many = @Many(select = "com.sugarian.dao.AccountDao.findAccountByUserId"))
    })
    @Select(value = "SELECT * FROM users WHERE user_id=#{id}")
    public User findUserById(@Param("id") Integer id);
}

6.动态SQL

@SelectProvider

  • 作用:用于指定动态生成SQL语句的提供者。

@SelectProvider是用于在Mapper接口中动态生成查询SQL语句。该注解可以用于Mapper接口方法上,用于指定一个提供SQL语句的Provider类。使用@SelectProvider注解时,需要指定Provider类和Provider方法。

  • 示例:
@SelectProvider(type = UserSqlProvider.class, method = "getUserByIdSql")
User getUserById(Long id);

@InsertProvider

  • 作用:用于指定动态生成SQL语句的提供者。

@InsertProvider用于在Mapper接口中动态生成插入SQL语句。该注解可以用于Mapper接口方法上,用于指定一个提供SQL语句的Provider类。使用@InsertProvider注解时,需要指定Provider类和Provider方法。

  • 示例:
@InsertProvider(type = UserSqlProvider.class, method = "insertUserSql")
int insertUser(User user);

@UpdateProvider

  • 作用:用于指定动态生成SQL语句的提供者。

@UpdateProvider用于在Mapper接口中动态生成更新SQL语句。该注解可以用于Mapper接口方法上,用于指定一个提供SQL语句的Provider类。使用@UpdateProvider注解时,需要指定Provider类和Provider方法。

  • 示例:
@UpdateProvider(type = UserSqlProvider.class, method = "updateUserSql")
int updateUser(User user);

@DeleteProvider

  • 作用:用于指定动态生成SQL语句的提供者。

@DeleteProvider用于在Mapper接口中动态生成删除SQL语句。该注解可以用于Mapper接口方法上,用于指定一个提供SQL语句的Provider类。使用@DeleteProvider注解时,需要指定Provider类和Provider方法。

  • 示例:
@DeleteProvider(type = UserSqlProvider.class, method = "deleteUserSql")
int deleteUser(Long id);

7. 缓存

@CacheNamespace

  • 作用:主要用于mybatis二级缓存,等同于属性。默认情况下,MyBatis 3 没有开启二级缓存,要开启二级缓存,注解只能写在类前,其中的属性都有自己的默认值。
  • 示例:
@CacheNamespace()
public interface StudentMapper(
    @Select("select * from student where studentNo = #{studentNo}")
    @Options(useCache = true)
    List<Student> findById(int studentNo);
}

这样就用注解开启了二级缓存,记得不要忘记在全局配置文件中也要配置一下。

<setting name="cacheEnabled" value="true"/>
属性描述
eviction缓存回收策略,有这几种回收策略:
  LRU - 最近最少回收,移除最长时间不被使用的对象
  FIFO - 先进先出,按照缓存进入的顺序来移除它们
  SOFT - 软引用,移除基于垃圾回收器状态和软引用规则的对象
  WEAK - 弱引用,更积极的移除基于垃圾收集器和弱引用规则的对象
flushinterval 缓存刷新间隔,缓存多长时间刷新一次,默认不清空,设置一个毫秒值
readOnly 是否只读;true 只读,MyBatis 认为所有从缓存中获取数据的操作都是只读操作,不会修改数据
size 指定缓存可存放多少个元素

以上就是MyBatis的相关注解及使用示例了,实际开发中不一定每个都能用到,但是可以收藏起来,有备无患嘛!

总的来说,MyBatis的注解是一个非常强大的工具,它可以帮助你减少XML配置的工作量,让你的代码更加简洁、易读。但是,它也有一定的学习成本,你需要花一些时间去理解和掌握它。希望这篇文章能帮助你更好地理解和使用MyBatis的注解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这河里吗l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值