Mybatis11_注解开发

本文详细介绍了Mybatis的注解开发,包括@Insert、@Update、@Delete、@Select等常见注解的使用,以及如何通过@Results和@Result进行结果集封装。此外,还讲解了一对一和一对多的映射配置@One和@Many,并探讨了动态SQL语句的@SelectProvider和二级缓存的@CacheNamespace配置。
摘要由CSDN通过智能技术生成

Mybatis的注解开发

(1)注解使用说明:

​	这几年来注解开发越来越流行,Mybatis 也可以使用注解开发方式,
    这样我们就可以减少编写 Mapper 映射文件了。

​(注解进行开发,就是进行代替映射的xml文件,不写xml文件也可以进行使用Mybatis)
常见的注解:
	@Insert:实现新增
	@Update:实现更新
    @Delete:实现删除
    @Select:实现查询
    @Result:实现结果集封装
    @Results:可以与@Result 一起使用,封装多个结果集
    @ResultMap:实现引用@Results 定义的封装
    @One:实现一对一结果集封装
    @Many:实现一对多结果集封装
    @SelectProvider: 实现动态 SQL 映射
    @CacheNamespace:实现注解二级缓存的使用
注意的问题:
​ (1) 当在项目中配置了映射文件(在与接口在同样的目录结构下),在主配置文件中说明使用注释开发:会报错 ,虽然没有使用那个映射文件,但是还是在mybatis中进行加载

​		解决方法: 删除该映射文件或者不把映射文件放到与接口相同的目录结构下

​(2)在写注解的时候,没有说明要封装的数据类型,和传入的形参,Mybatis怎么知道的????

​        mybatis在解析的时候,找到接口,在找到对应的方法,通过反射得到上面的注解信息,
     还有的得到方法的返回类型和形参类型

(2)使用注解进行CRUD操作:

​@Insert:实现新增

@Delete:实现删除

@Select:实现查询

@Update:实现更新

在使用注解的时候,要传入一个值value,@Select(value="相应的sql语句"),
其实value关键字写不写都可以,直接@Select("相应的sql语句")

(3)解决实体类和数据库的映射关系

@Results:
​可以与@Result 一起使用,封装多个结果集,代替的是标签<resultMap>,
该注解中可以使用单个@Result 注解,也可以使用@Result 集合

​属性:

​	  id属性定义一个唯一标准,方便后面的@Results的复用
        怎么复用: 
        		直接让value属性等于该id  value={“MapId”}  ,数组中只有一个元素直接写id就好

​	  value属性:是一个数组,每一个数组的值为@Result

使用格式:

​	 @Results({@Result(),@Result()})或  @Results(@Result())
@Result:
实现结果集封装,数据库中的什么数据对应实体类中的什么数据,
写好里面的column属性和property属性,和id属性(写一个就好),
代替了 <id> 标签和<result> 标签

​属性:

​		id属性:是否是主键字段(默认为false)

​		column属性: 数据库表对应的列名

​		property属性:实体类相对应的属性,或者为 需要装配的属性名
  @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()
     
      
   @Select("select * from user")
   //@Results(valude="userMap")
   //或者
   @Results("userMap")
   User findById(int UserId)

(4)一对多的配置

​(在mybatis的多对一,就是一对一)怎么实现多对一????     
								主要就是进行对映射关系的配置

​ 实现类里面有一个属性为User实体类对象,该如何进行配置???
@One 注解(一对一)
@One 代替了<assocation> 标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。

​属性:
​			select 指定用的 来多表查询的 sqlmapper

​			fetchType 会覆盖全局的配置参数 lazyLoadingEnabled。

​使用格式:

​							@Result(column=" ",property="",one=@One(select=""))
	//封装的Account实体类中中有一个User实体类对象
	@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();

(5)一对多的配置

@Many 注解(多对一)
​@Many 代替了<Collection> 标签, 是多表查询的关键,在注解中用来指定子查询返回对象集合。

​属性:

​		select属性:代表将要执行的 方法的全限定方法名

​		etchType属性:代表加载方式,加载的时机,一般如果要延迟加载都设置为 LAZY 的值				

​注意:

​		聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,
			属性的 javaType (一般为 ArrayList)但是注解中可以不定义;
​使用格式:

​		@Result(property="",column="",many=@Many(select=""))
	//封装的User实体类中有一个List<Account>集合对象
	@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();

(6)动态SQL语句的配置

  @SelectProvider: 实现动态 SQL 映射

(7)注解配置缓存

一级缓存不需要配置他自己就已经有了,怎么通过注解实现二级缓存的配置??
@CacheNamespace:
​实现注解二级缓存的使用(不需要向xml文件一样,配置当前文件和方法可以使用二级缓存)

属性:
​		blocking属性: 是否开启二级缓存

在主配置文件中配置Mybatis支持二级缓存:

<!-- 配置二级缓存 -->
<settings>
    <!-- 开启二级缓存的支持 -->
    <setting name="cacheEnabled" value="true"/>
</settings>

方法上支持二级缓存:

//mybatis 基于注解方式实现配置二级缓存
@CacheNamespace(blocking=true)
public interface IUserDao {}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小镇男孩~~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值