注解开发
1|0注解的开发方式
使用package指定UserMapper接口所在的包
1|1@Select查询
根据用户id查询用户
- 增加通过id查询用户的方法
- 方法上使用注解@Select("SQL语句")
- 在SQL语句使用#{id}占位符
效果
1|2@Results @Result和 @ResultMap
1|3小结
注解 | 属性 | 说明 |
---|---|---|
@Select | value:查询的SQL语句 | 执行查询的操作 |
@Results | value:@Result类型的数组 | 创建一个映射关系 |
id: 给这个映射定义一个名字 | ||
@Result | column:列名字 | 每个指定一列的映射关系 |
property:实体类的属性名 | ||
id:是否是主键列 | true 是主键 | |
@ResultMap | value:指定上面的@Results的id | 引用@Results定义的映射 |
@CacheNamespace | 开启二级缓存 |
1|4修改用户(@Update)
- 写修改方法
- 在方法上使用注解@Update("SQL语句")
- 占位符使用#
1|5删除用户(@Delete)
- 编写删除方法
- 使用注解@Delete("SQL")
- 使用#{id},删除指定的用户
@Delete和@Update和@Insert三个注解可以通用,但不建议
1|6新增用户(@Insert)
- 在UserMapper接口中,增加新增用户方法
- 使用注解@Insert("SQL语句")
1|7获取新增主键值@SelectKey
接口代码
测试
1|8注解小结
在注解方式实现基本CRUD操作中,使用的注解有:
注解 | 描述 |
---|---|
@Select | 用于查询 |
@Results | 创建表的列与实体类的属性映射 |
@Result | 每个定义一列和一个属性的对应的关系 |
@ResultMap | 引用上面@Results定义的映射关系 |
@Update | 更新 |
@Delete | 删除 |
@Insert | 添加 |
@SelectKey | 获取最新添加的主键 |
1|9一对一
注解 | 描述 | 对应xml配置标签 |
---|---|---|
@One | 配置一对一的关联查询 | association |
@Many | 配置一对多的关联查询 | collection |
准备项目
操作步骤
-
复制项目为
-
修改mybatis-config.xml
- 保持延迟加载的配置
- 修改mapper为class属性
mybatis-config.xml
UserMapper接口
步骤
需求
查询1个用户数据,并且采用延迟加载关联查询出用户扩展数据
在UserMapper接口中增加查询方法
-
编写方法:通过id查询用户扩展信息
- 方法名:findUserInfoById,用做后面方法引用的id
- 使用@Select注解编写SQL语句
-
编写方法:通过id查询1个用户
- @Select编写查询
- @Results配置1对1关联映射
- @Results内部使用@Result
- column属性:user主表中主键id
- property属性:对应的用户扩展信息属性userInfo
- one属性指定为@One注解
- select属性:为对应的方法名 findUserInfoById
- fetchType属性:延迟加载类型 FetchType.LAZY
代码
测试
- 只查询用户名和性别
- 同时查询用户扩展信息
小结
注解 | 作用 |
---|---|
@Select | 查询操作 |
@Results | 指定映射,必须要指定主键的映射,不然主键没有值 |
@Result | column:指定主表的主键,下一个要执行的方法的参数值 property:实体类中另一方的属性名 one:@One 指定一对一的关联映射 |
@One | select:下一个要查询的方法名 fetchType:抓取类型,是否使用延迟加载 1. FetchType.LAZY 延迟加载(懒加载) 2. FetchType.EAGER 及时加载 |
1|10一对多
目标
- 查询1号用户数据
- 关联查询出1号用户全部订单数据
- 采用延迟加载方式实现
UserMapper接口
-
通过user_id查询当前用户订单的方法
- 使用@Select注解
-
修改findUserById()方法,增加1对多延迟加载配置
-
在findUserById()方法修改注解
-
在@Results注解中添加@Result注解
- column: 为user表中的主键id
- property:对应用户表中的订单集合属性orders
- many为 @Many注解
- select:为上面的查询方法名
- fetchType:为延迟加载
-
代码
测试
- 只查用户信息
- 查询订单信息
查询结果
小结
@Result注解属性 | 说明 |
---|---|
column | 主表的主键,下一个查询方法的参数值 |
property | 在实体类中另一方的属性名 |
many | 指定一对多的关联关系 |
@Many注解属性 | 说明 |
---|---|
select | 下一个查询的方法名字 |
fetchType | 抓取类型: 1. FetchType.LAZY 懒加载 2. FetchType.EAGER 及时加载 |
1|11连接查询
目标
一对多的表连接查询,自动封装关联对象
需求
- 查询所有的订单信息和下订单的用户名
- 使用注解的方式表连接查询所有订单列和用户表的姓名列
步骤
- 订单对象中包含了用户对象,多对一的关系
- 使用@select注解编写表连接的查询语句
- 使用@Results和@Result定义将username这一列映射成user.username,指定为对象名.属性名
- 在控制台上输出所有的订单对象和订单中的用户对象
代码
将OrderForm中添加User对象的属性
接口
测试类
结果
小结
如果在注解中使用表连接查询也可以在自动在一个实体类中封装另一个实体类的属性
写法:property="对象名.属性名"
1|12学习总结
- 掌握MyBatis多表关联查询
association标签的属性 | 说明 (1对1) |
---|---|
property | 指定另一方的属性名 |
resultMap | 指定另一方的映射 |
collection的属性 | 说明(1对多) |
---|---|
property | 指定另一方的属性名 |
resultMap | 指定另一方的映射 |
- MyBatis的延迟加载
association标签的属性 | 说明(1对1) |
---|---|
property | 指定另一方的属性名 |
column | 要查询的下一个方法的参数值,通常使用主表的主键 |
select | 指定下一个查询方法的id(名字) |
collection标签的属性 | 说明(1对多) |
---|---|
property | 指定另一方的属性名 |
column | 要查询的下一个方法的参数值,通常使用主表的主键 |
select | 指定下一个查询方法的id(名字) |
- 掌握mybatis注解开发
注解 | 描述 |
---|---|
@Select | 查询 |
@Results | 映射表中列与实体类属性的名字之间的关系 |
@Result | 每个注解映射一列和一个属性名 |
@Update | 更新 |
@Delete | 删除 |
@Insert | 添加 |
@SelectKey | 获取最后插入的主键 |
- 注解实现多表关联查询
注解 | 作用 |
---|---|
@Select | 查询 |
@Results | 映射表中列与实体类属性的名字之间的关系 |
@Result | column 属性:要查询的下一个方法的参数值,通常使用主表的主键 property 属性:指定另一方的属性名 one 属性:指定一对一的关联 many属性:指定一对多的关联 |
@One | select 属性:指定下一个查询方法的id(名字) fetchType属性:延迟加载,及时加载 |
@Many | select 属性:指定下一个查询方法的id(名字) fetchType属性:延迟加载,及时加载 |
-
掌握二级缓存的开启配置
- 在核心配置文件中开启:cacheEnabled=true
- 实体类要序列化
- 在XML配置文件中使用<cache>或接口添加注解@CacheNamespace
__EOF__
作 者:YXH
出 处:https://www.cnblogs.com/YxinHaaa/p/17431868.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了