Mybatis注解开发
Mybatis注解开发
SerMsmybatis 的常用注解
注解 | 说明 |
---|---|
@Insert | 实现新增 |
@Delete | 实现删除 |
@Update | 实现更新 |
@Select | 实现查询 |
@Result | 实现结果集封装 |
@Results | 可以与@Result 一起使用,封装多个结果集 |
@ResultMap | 实现引用@Results 定义的封装 |
@One | 实现一对一结果集封装 |
@Many | 实现一对多结果集封装 |
@SelectProvider | 实现动态 SQL 映射 |
@CacheNamespace | 实现注解二级缓存的使用 |
使用 Mybatis 注解实现基本 CRUD
项目目录结构
编写实体类
User:
1 | package com.keafmd.domain; |
使用注解方式开发持久层接口
IUserDao:
1 | package com.keafmd.dao; |
通过注解方式,就不需要再去编写 UserDao.xml 映射文件了。
编写 SqlMapConfig.xml 配置文件
SqlMapConfig.xml:
1 |
|
编写测试代码
AnnotationCRUDTest:
1 | package com.keafmd.test; |
使用注解实现复杂关系映射开发
实现复杂关系映射之前我们可以在映射文件中通过配置<resultMap>
来实现,在使用注解开发时我们需要借助@Results 注解,@Result 注解,@One 注解,@Many 注解。
复杂关系映射的注解说明
@Results 注解
代替的是标签<resultMap>
该注解中可以使用单个@Result 注解,也可以使用@Result 集合
@Results({@Result(),@Result()})或@Results(@Result())@Resutl 注解
代替了<id>
标签和<result>
标签
@Result 中的属性介绍:
@Result 中的属性 | 介绍 |
---|---|
id | 是否是主键字段 |
column | 数据库的列名 |
property | 需要装配的属性名 |
one | 需要使用的@One 注解(@Result(one=@One)())) |
many | 需要使用的@Many 注解(@Result(many=@many)())) |
@One 注解(一对一)
代替了标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。
@One 注解属性介绍:
select 指定用来多表查询的 sqlmapper
fetchType 会覆盖全局的配置参数 lazyLoadingEnabled。
使用格式:@Result(column=” “,property=””,one=@One(select=””))@Many 注解(多对一)
代替了标签,是是多表查询的关键,在注解中用来指定子查询返回对象集合。
注意:聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,属性的 javaType(一般为 ArrayList)但是注解中可以不定义。
使用格式:@Result(property=””,column=””,many=@Many(select=””))
项目目录
使用注解实现一对一复杂关系映射及立即加载
需求:加载账户信息时并且加载该账户的用户信息,根据情况可实现立即加载。(注解方式实现)
添加 User 实体类及 Account 实体类
User:
1 | package com.keafmd.domain; |
Account:
1 | package com.keafmd.domain; |
添加账户的持久层接口并使用注解配置
IAccountDao:
1 | package com.keafmd.dao; |
添加用户的持久层接口并使用注解配置
1 | package com.keafmd.dao; |
测试一对一关联及立即加载
1 | package com.keafmd.test; |
运行结果:
1 | 2021-02-17 03:04:39,939 163 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection |
使用注解实现一对多复杂关系映射及延迟加载
需求:查询用户信息时,也要查询他的账户列表。使用注解方式实现。
分析:一个用户具有多个账户信息,所以形成了用户(User)与账户(Account)之间的一对多关系。
User 实体类加入 List<Account>
User:
1 | package com.keafmd.domain; |
编写用户的持久层接口并使用注解配置
1 | package com.keafmd.dao; |
编写账户的持久层接口并使用注解配置
1 | package com.keafmd.dao; |
编写测试代码
1 | package com.keafmd.test; |
运行 testFindAll()的结果:
1 | 2021-02-17 03:14:19,655 378 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection |
可以看出来延迟加载,在每次加载每个用户时都会查询一次。
修改测试代码:
1 |
|
运行结果:
1 | 2021-02-17 03:17:26,203 166 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection |
这样通过对比就可以很明显的看出来延迟加载的效果。
回顾下一级缓存
运行代码:
1 |
|
运行结果:
1 | 2021-02-17 03:26:22,736 164 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection |
mybatis 基于注解的二级缓存
在 SqlMapConfig.xml 中开启二级缓存支持
1 | <!--配置开启二级缓存--> |
在持久层接口中使用注解配置二级缓存
1 | package com.keafmd.dao; |
编写测试二级缓存的测试类
1 | package com.keafmd.test; |
不开启二级缓存配置的运行结果:
1 | 2021-02-17 03:31:32,119 320 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection |
开启二级缓存配置的运行结果:
1 | 2021-02-17 03:29:23,197 373 [ main] DEBUG ansaction.jdbc.JdbcTransaction - Opening JDBC Connection |
效果很明显,开启使用二级缓存时第二次并没有发起查询,证明使用的就是二级缓存。
以上就是 Mybatis 注解开发(超详细)的全部内容。
看完如果对你有帮助,感谢赞助支持!