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