Mybatis框架学习(十一)注解开发

mybatis 的常用注解说明

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

使用 Mybatis 注解实现基本 CRUD

  • 注解开发就是不用配置文件,直接通过在接口中方法上用注解,可以直接使用方法
  • 需要在SqlMapConifg.xml中加上一下配置
<!-- 配置 dao 接口的位置,它有两种方式
第一种:使用 mapper 标签配置 class 属性
第二种:使用 package 标签,直接指定 dao 接口所在的包
-->
<package name="com.lwb.dao"/>
  1. 查询
	@Select("select * from user")
	@Results(id="userMap",
		value= {
			@Result(id=true,column="id",property="userId"),
			@Result(column="username",property="userName"),
			@Result(column="sex",property="userSex"),
			@Result(column="address",property="userAddress"),
			@Result(column="birthday",property="userBirthday")
		})
List<User> findAll();
  1. 修改
@Update("update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id =#{id} ")
int updateUser(User user);
  1. 保存
@Insert("insert into user(username,sex,birthday,address)values(#{username},#{sex},#{birthday},#{address}
)")
@SelectKey(keyColumn="id",keyProperty="id",resultType=Integer.class,before = false, statement = { "select last_insert_id()" })
int saveUser(User user);
  1. 删除
@Delete("delete from user where id = #{uid} ")
int deleteUser(Integer userId);
  1. 根据一个ID查询
@Select("select * from user where id = #{uid} ")
@ResultMap("userMap")
User findById(Integer userId);

使用注解实现复杂关系映射开发

  1. 复杂注解的介绍:
    • @Results 注解:代替的是标签<resultMap>
      • 该注解中可以使用单个@Result 注解,也可以使用@Result 集合
        • @Results({@Result(),@Result()})
        • @Results(@Result())
    • @Resutl 注解:代替了 <id> 标签和<result> 标签
      • @Result 中 属性介绍:
        • id 是否是主键字段
        • column 数据库的列名
        • property 需要装配的属性名
        • one 需要使用的@One 注解:(@Result(one=@One)()))
        • many 需要使用的@Many 注解:(@Result(many=@many)()))
    • @One 注解(一对一):代替了<assocation> 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。
      • @One 注解属性介绍:
        • select 指定用的 来多表查询的 sqlmapper
        • fetchType 会覆盖全局的配置参数 lazyLoadingEnabled。。
        • 使用格式:
          • @Result(column=" “,property=”",one=@One(select=""))
    • @Many 注解(多对一):代替了<Collection> 标签, 是是多表查询的关键,在注解中用来指定子查询返回对象集合。
      • 注意:聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,属性的 javaType(一般为 ArrayList)但是注解中可以不定义;
      • 使用格式:@Result(property="",column="",many=@Many(select=""))
  2. 一对一查询
@Select("select * from account")
@Results(id="accountMap",
	value= {
	@Result(id=true,column="id",property="id"),
	@Result(column="uid",property="uid"),
	@Result(column="money",property="money"),
	@Result(column="uid",
	property="user",
	one=@One(select="com.itheima.dao.IUserDao.findById",
	fetchType=FetchType.LAZY)
	)
	})
List<Account> findAll();
  1. 一对多查询
@Select("select * from user")
@Results(id="userMap",
	value= {
	@Result(id=true,column="id",property="userId"),
	@Result(column="username",property="userName"),
	@Result(column="sex",property="userSex"),
	@Result(column="address",property="userAddress"),
	@Result(column="birthday",property="userBirthday"),
	@Result(column="id",property="accounts",
	many=@Many(
		select="com.itheima.dao.IAccountDao.findByUid",
		fetchType=FetchType.LAZY
		)
	)
})
List<User> findAll();

mybatis 基于注解的二级缓存

  1. 在 在 SqlMapConfig 中开启二级缓存支持
<!-- 配置二级缓存 -->
<settings>
<!-- 开启二级缓存的支持 -->
<setting name="cacheEnabled" value="true"/>
</settings>
  1. 在持久层接口中使用注解配置二级缓存
@CacheNamespace(blocking=true)//mybatis 基于注解方式实现配置二级缓存
public interface IUserDao {}

猜你喜欢

转载自blog.csdn.net/qq_41816516/article/details/106747654