Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!,Spring Boot入门系列(六)Spring Boot如何使用Mybatis XML 配置版【附详细步骤】

之前讲了Springboot整合Mybatis,先容了若何自动天生pojo实体类、mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功效。mybatis 插件自动天生的mapper 实现了大部分基本、通用的方式,如:insert、update、delete、select 等也许20个左右方式,都是对照基础的增删改查,这些通用Mapper提供的方式基本都能知足种种单表操作需求。然则,在现实事情中通用Mapper并不能知足所有的事情,或是某个营业需要手写 sql 语句、或是多表关联时,该怎么办呢? 这就需要分外的一些自界说的mapper 实现一些特定的功效。下面就来先容自界说mapper 的实现。

Spring Boot入门系列文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html

 

一、快速实现

首先需要建立一个项目并整合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<SysUser> queryUserSimplyInfoById(String userId);
}

SysUserMapperCustom 是一个接口,这里只界说了一个方式:queryUserSimplyInfoById 。

 

2、建立mapper 设置文件

建立完mapper类之后,需要建立SysuserMapperCustom 类对应的xml 设置文件:SysuserMapperCustom.xml 。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<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 
@Autowired
private SysUserMapperCustom userMapperCustom;


// 2. 实现接口方式,挪用
@Override
public SysUser queryUserByIdCustom(String userId) {
    List<SysUser> userList = userMapperCustom.queryUserSimplyInfoById(userId);

    if (userList != null && !userList.isEmpty()) {
        return (SysUser)userList.get(0);
    }

    return null;
}

 

二、测试

首先在原先的MybatisController 建立一个测试方式。

@RequestMapping("/queryUserByIdCustom")
public JSONResult queryUserByIdCustom(String userId) {
    return JSONResult.ok(userService.queryUserByIdCustom(userId));
}

 

启动项目,并在浏览器中输入地址:http://localhost:8080/mybatis/queryUserByIdCustom?userId=200425AYXA733M5P

Linux下Jmeter+nmon+nmon analyser实现性能监控及结果分析

 Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!,Spring Boot入门系列(六)Spring Boot如何使用Mybatis XML 配置版【附详细步骤】

三、多表关联查询

上面讲的是,建立一个自界说的mapper,实现自界说的查询。多表的关联查询跟这个类似。

1、自界说mapper类 SysUserMapperCustom 类中,增添一个新的方式

public interface SysUserMapperCustom {
    List<SysUser> queryUserSimplyInfoById(String userId);
    List<SysUser> 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" />
        <!--封装映射company表数据,user表与company表1对1关系,设置1对1的映射
            association:用于设置1对1的映射
                        属性property:company工具在user工具中的属性名
                        属性javaType:company属性的java工具 类型
                        属性column:user表中的外键引用company表
        -->
        <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>
        <!--设置1对多关系映射
            property:在user内里的List<Account>的属性名
            ofType:当前account表的java类型
            column:外键
        -->
    </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<Account>的属性名

      ofType:当前account表的java类型

     column:外键

以上就是在自界说的mapper 中实现多表关联查询的方式,这里就不写测试代码了,人人仔细去测试实验。

 

最后

以上,就把Spring Boot 中mybatis 若何通过自界说mapper 实现多表关联查询先容完了,实现起来对照简单。上面的例子对照简单,没有做多表关联,人人自己写的时刻,可以试试庞大的多表关联。

这个系列课程的完整源码,也会提供给人人。人人关注我的微信民众号(架构师精进),回复:springboot源码。获取这个系列课程的完整源码。

 

原创文章,作者:28x29新闻网,如若转载,请注明出处:https://www.28x29.com/archives/19652.html