🍃作者简介:准大三本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐MyBatis系列①:增删改查
⭐MyBatis系列②:两种Dao开发方式
⭐MyBatis系列③:动态SQL
⭐MyBatis系列④:核心配置文件详解
⭐MyBatis系列⑤:多表查询
1、基本步骤
步骤如下:
①编写接口,在接口方法上面使用对应的注解,配置相应的SQL语句
②编写测试方法
③在mybatis核心配置文件中修改映射信息。
2、常用注解
首先是基本的CRUD来学习,后面再介绍复杂映射多表操作。
注解 | 说明 |
@Insert | 实现新增 |
@Update | 实现更新 |
@Delete | 实现删除 |
@Select | 实现查询 |
@Result | 实现结果集封装 |
@Results | 可以与@Result 一起使用,封装多个结果集 |
@One | 实现一对一结果集封装 |
@Many | 实现一对多结果集封装 |
代码如下:
①接口及其接口方法:
②测试方法:
③核心配置文件加载映射:
3、复杂映射
实现复杂关系映射之前可以在映射文件中通过配置<resultMap>来实现,使用注解开发后,可以使用@Results注解 ,@Result注解,@One注解,@Many注解组合完成复杂关系的配置。
注解 | 说明 | ||
@Results | 代替的是标签该注解中可以使用单个@Result注解,也可以使用@Result集合。 使用格式: @Results( {@Result (),@Result () } ) 或 @Results( @Result () ) | ||
@Result | 代替了<id>标签和<result>标签 @Result 中属性介绍 : - column:数据库的列名 | ||
@One (一对一) | 代替了<assocation>标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。 @One 注解属性介绍 : - select: 指定用来多表查询的 sqlmapper 使用格式:@Result(column="",property="",one=@One(select="")) | ||
@Many (多对一) | 代替了<collection>标签, 是多表查询的关键,在注解中用来指定子查询返回对象集合。 使用格式:@Result(property="",column="",many=@Many(select="")) | ||
3.1、一对一
用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户。
一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户
3.1.1、xml回顾
在使用xml配置的时候,对应的sql语句为:
select ordersquery.*, userquery.username,userquery.`password`,userquery.birthday from ordersquery, userquery where ordersquery.userID = userquery.id;
3.1.2、注解
使用注解配置的时候,需要把之前的SQL语句一分为二:
3.2、一对多
用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户
一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单
3.2.1、xml回顾
在使用xml配置的时候,对应的sql语句为:
select userquery.*,ordersquery.id as orderID,ordersquery.ordertime,ordersquery.total from userquery left join ordersquery on userquery.id = ordersquery.userID;
3.2.2、注解
使用注解配置的时候,需要把之前的SQL语句一分为二:
3.3、多对多
用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用
多对多查询的需求:查询用户同时查询出该用户的所有角色
3.3.1、xml回顾
在使用xml配置的时候,对应的sql语句为:
select userquery.id,userquery.username,userquery.`password`,userquery.birthday,rolequery.id AS roleID,rolequery.rolename from userquery LEFT JOIN user_role ON userquery.id = user_role.user_id INNER JOIN rolequery ON user_role.role_id = rolequery.id;
3.3.2、注解
使用注解配置的时候,需要把之前的SQL语句一分为二:
4、⭐注意事项
在使用注解的时候,不管是“一对一”、“一对多”还是“多对多”,都涉及到一个“对独立的@Result封装”的过程,其中有一个参数为column,这个传的是数据库类型,但是传的是来源于第一条SQL查询的数据库的表单,如下:
🍁行文至此,烦请给个三连支持一下。
🍁您的三连支持,是我创作的最大动力