Spring Boot入门系列(十七)Mybatis创建自定义mapper 实现多表关联查询!
共 3422字,需浏览 7分钟
·
2020-08-15 11:25
之前讲了Springboot整合Mybatis,介绍了如何自动生成pojo实体类、mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能。mybatis 插件自动生成的mapper 实现了大部分基本、通用的方法,如:insert、update、delete、select 等大概20个左右方法,都是比较基础的增删改查,这些通用Mapper提供的方法基本都能满足各种单表操作需求。
但是,在实际工作中通用Mapper并不能满足所有的工作,或是某个业务需要手写 sql 语句、或是多表关联时,该怎么办呢?这就需要额外的一些自定义的mapper 实现一些特定的功能。下面就来介绍自定义mapper 的实现。
一、如何实现
首先需要创建一个项目并整合mybatis等相关框架,这个之前介绍过这里不再细说。直接在原来的基础上实现。《Spring Boot入门系列(六)Spring Boot如何使用Mybatis XML 配置版【附详细步骤】》
1、创建自定义 mapper
在com.weiz.mapper 包中,创建 SysUserMapperCustom 接口
package com.weiz.mapper;
import com.weiz.pojo.SysUser;
import java.util.List;
public interface SysUserMapperCustom {
List
queryUserSimplyInfoById(String userId) ;}
说明:
SysUserMapperCustom 是一个接口,这里只定义了一个方法:queryUserSimplyInfoById 。
2、创建mapper 配置文件
创建完mapper类之后,需要创建SysuserMapperCustom 类对应的xml 配置文件:SysuserMapperCustom.xml 。
<mapper namespace="com.weiz.mapper.SysUserMapperCustom" >
<select id="queryUserSimplyInfoById" resultType="com.weiz.pojo.SysUser"
parameterType="java.lang.String" >
select
*
from
sys_user
where
id = #{id,jdbcType=VARCHAR}
select>
mapper>
说明:
id:对应的就是 接口名,
resultType:返回的是结果类型,
parameterType:参数的类型,
3、Service调用
首先在UserService接口中增加queryUserByIdCustom方法,然后在对应的 UserServiceImpl 实现类中,注入SysUserMapperCustom 。最后实现queryUserByIdCustom 方法,在方法中调用前面自定义的mapper 类中方法即可。具体代码如下:
// 1. 在UserServiceImpl 中注入SysUserMapperCustom
private SysUserMapperCustom userMapperCustom;
// 2. 实现接口方法,调用
public SysUser queryUserByIdCustom(String userId) {
List
userList = userMapperCustom.queryUserSimplyInfoById(userId);
if (userList != null && !userList.isEmpty()) {
return (SysUser)userList.get(0);
}
return null;
}
二、如何调用
添加了自定义的mapper和对应的方法之后,怎么调用这些mapper 呢?其实和之前的调用方式是一样的。
首先在原先的MybatisController 创建一个测试方法。
public JSONResult queryUserByIdCustom(String userId) {
return JSONResult.ok(userService.queryUserByIdCustom(userId));
}
启动项目,并在浏览器中输入地址:http://localhost:8080/mybatis/queryUserByIdCustom?userId=200425AYXA733M5P
查看是否返回人员数据
通过上面的例子,我们实现了自定义的mapper,并根据特殊的要求返回相关的数据信息。
三、多表关联查询
上面讲的是,创建一个自定义的mapper,实现自定义的查询。那么mybatis多表关联查询操作怎么实现呢? 其实,多表的关联查询跟这个类似。
1、自定义mapper类 SysUserMapperCustom 类中,增加一个新的方法
public interface SysUserMapperCustom {
List
queryUserSimplyInfoById(String userId) ;List
queryAllUserListCustom() ;}
说明:
queryAllUserListCustom() 方法为新加的关联查询的方法。
2、在之前的SysuserMapperCustom配置文件:SysuserMapperCustom.xml 增加新方法对应的配置。
<resultMap id="UserMap" type="com.weiz.pojo.SysUser">
<id column="id" jdbcType="VARCHAR" property="id" />
<result property="username" column="username" jdbcType="VARCHAR" />
<association property="company" javaType="com.weiz.pojo.SysCompany" column="company_id">
<id property="id" jdbcType="VARCHAR" column="companyid">id>
<result property="name" jdbcType="VARCHAR" column="companyname">result>
association>
resultMap>
<select id="queryAllUserListCustom" resultMap="UserMap" >
SELECT
u.id,u.username,c.id companyid, c.name companyname
FROM sys_user u
LEFT JOIN sys_company c on u.company_id=c.id
select>
上面配置的sql ,可以看到用户表sys_user 关联 sys_company 表,查询完整的人员公司信息。
说明:
1、association:用于配置1对1的映射
属性property:company对象在user对象中的属性名
属性javaType:company属性的java对象 类型
属性column:user表中的外键引用company表。
2、collection:用于配置1对多关系映射
property:在user里面的List
ofType:当前account表的java类型
column:外键
以上就是在自定义的mapper 中实现多表关联查询的方法,这里就不写测试代码了,大家仔细去测试实验。
最后
以上,就把Spring Boot 中mybatis 如何通过自定义mapper 实现多表关联查询介绍完了,实现起来比较简单。上面的例子比较简单,没有做多表关联,大家自己写的时候,可以试试复杂的多表关联。
这个系列课程的完整源码,也会提供给大家。大家关注我的微信公众号(架构师精进),回复:springboot源码。获取这个系列课程的完整源码。
推荐阅读:
Spring Boot入门系列(十六)整合pagehelper,一秒实现分页功能!
Spring Boot入门系列(十五) SpringBoot开发环境热部署的配置
Spring Boot入门系列(十三)统一日志处理!
Spring Boot入门系列(十一)如何整合Mybatis,实现增删改查【XML 配置版】
Spring Boot入门系列(十)如何使用拦截器,一学就会!
Spring Boot入门系列(八)整合定时任务Task,一秒搞定定时任务
SpringBoot入门系列(二)Controller介绍及如何返回json数
SpringBoot入门系列(一)如何快速创建SpringBoot项