做相册的网站 网易学校网站建设客户需求调查问卷
🍃作者简介:准大三本科网络工程专业在读,持续学习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查询的数据库的表单,如下:

🍁行文至此,烦请给个三连支持一下。
🍁您的三连支持,是我创作的最大动力
