SpringBoot整合Mybatis-Plus实现关联查询

 更新时间:2024年08月08日 08:42:48   作者:晴栀_mm  
Mybatis-Plus(简称MP)是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性,本文给大家介绍了SpringBoot整合Mybatis-Plus实现关联查询,需要的朋友可以参考下

一、搭建环境

1.创建Maven普通项目

2.添加依赖坐标

<parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.2.2.RELEASE</version>
</parent>
 
<dependencies>
    <!--单元测试-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
 
    <!-- 数据库驱动 -->
    <!--mysql驱动-->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
   <!-- <version>8.0.19</version>-->
    </dependency>
 
    <!-- lombok 简化set get toString -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
 
    <!-- mybatis-plus -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.4.3.1</version>
    </dependency>
  </dependencies>

3.导入SpringBoot的相关插件

<plugin>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
 

4.创建mapper包、pojo包和启动类Starter

mapper包: 

 在该包下定接口继承BaseMapper接口

pojo包:

在该包下定义实体类:客户类、商品类、订单类和订单详情类

Starter类:

用于SpringBoot项目启动运行

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//扫描mapper接口所在的包
@MapperScan("com.hs.mapper")
public class Starter {
    public static void main(String[] args) {
        SpringApplication.run(Starter.class);
    }
}

5.在resources文件下配置yml文件(数据库配置和日志配置)

#数据库配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/ssm2?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8
    username: root
    password: 123456
 
#添加日志配置项
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

6.在resources文件下创建mapper文件夹,在mapper下创建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" >

二、实现订单表和用户表关联查询(一对一)

需求:关联查询其相关用户信息

订单表->用户表:一个订单只由一个用户创建,一对一关系

做法:1.在Orders类中加入Users属性,Users属性用于存储关联查询的用户信息。

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Orders {
    private Integer id;
    private String orderNumber;
    private Double totalPrice;
    private String status;
    private Integer userId;
    /*
    *多表查询:一对一关系
    * 订单表关联查询用户表
    * */
    private Users users;
}

2.在OrderMapper接口中,自定义功能实现

@Mapper
public interface OrderMapper extends BaseMapper<Orders> {
    public List<Orders> selectUserResultMap();
}

3.在resources文件下mapper文件夹里,书写映射下XML文件UserMapper

resultMap:需要单独定义resultMap,使用 resultMap可以完成将关联查询映射到实体类的属性中。

association标签: 一对一关系映射描述。

  • property: 关系属性名称。
  • javaType: 关系属性类型。
 <resultMap id="selectUserResultMap" type="com.hs.pojo.Orders">
        <id column="id" property="id"/>
        <id column="order_number" property="orderNumber"/>
        <id column="total_price" property="totalPrice"/>
        <id column="status" property="status"/>
        <association property="users" javaType="com.hs.pojo.Users">
            <id column="user_id" property="id"/>
            <id column="username" property="username"/>
            <id column="password" property="password"/>
            <id column="realname" property="realname"/>
        </association>
    </resultMap>
    <select id="selectUserResultMap" resultType="com.hs.pojo.Orders">
        select o.*,u.username,u.password,u.realname from orders o,users u where o.user_id=u.id
    </select>

4.在测试类中进行测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes=Starter.class)
public class Test1 {
    @Resource
    private OrderMapper orderMapper;
    //多表查询:一对一关系
    //订单表关联查询用户表
    @Test
    public void selectOneByOne(){
        List<Orders> orders = orderMapper.selectUserResultMap();
        orders.forEach(System.out::println);
    }
}

三、实现订单表和订单详情表关联查询(一对多)

需求:

  • 关联查询其相关用户信息。
  • 关联查询其相关订单详情信息。

订单表->订单详情表:一对多 

具体做法同上。

1.在Orders类中加入属性ordersDetailList

 /*
     * 一对多关系属性:一个订单包含多个订单详情
     * */
    private List<OrderDetails> ordersDetailList;

2.在OrderMapper接口中,自定义功能实现

    /*
    * 一对多:查询订单信息,
    * 一个订单对应多条详情信息,则是一对多
    * */
 
    public List<Orders> selectOrdersAndDetail();

3.在resources文件下mapper文件夹里,书写映射下XML文件UserMapper 

在Order类中加入ordersDetailList属性,details属性用于存储关联查询的订单详情。

collection标签: 一对多关系映射描述。

  • property: 关系属性名称。
  • ofType: 关系属性是一个List集合,集合中存放的元素类型。
    <!--
        collection:一对多
        property:订单实体类中的属性
        ofType:集合里面存储的类型
        -->
 
        <collection property="orderDetailList" ofType="com.hs.pojo.OrderDetails">
            <id column="detail_id" property="id"/>
            <id column="amount" property="amount"/>
            <id column="orders_id" property="ordersId"/>
            <id column="goods_id" property="goodsId"/>
        </collection>
    </resultMap>
 
    <select id="selectOrdersAndDetail" resultMap="detailResultMap">
        select
            o.*,u.username,u.password,u.realname,d.id detail_id,d.amount,d.orders_id,d.goods_id
        from orders o,users u,orders_detail d
        where o.user_id=u.id and o.id=d.orders_id
    </select>

四、实现订单表和商品表关联查询(多对多)

中间表:订单详情表

需求:

  • 关联查询其相关用户信息。
  • 关联查询其相关订单详情信息。
  • 关联查询订单详情中的商品信息。

订单表->订单详情表:一对多     订单详情表->订单表:一对一

订单详情表->商品表:一对一      商品表->订单详情表:一对多

订单表->商品表:一对多                 商品表->订单表:多对一

做法:

1.在OrderDetails类中加入属性goods

2.在OrderMapper接口中,自定义功能实现

3.在resources文件下mapper文件夹里,书写映射下XML文件UserMappe

 <resultMap id="goodsResultMap" type="com.hs.pojo.Orders">
        <id column="id" property="id"/>
        <id column="order_number" property="orderNumber"/>
        <id column="total_price" property="totalPrice"/>
        <id column="status" property="status"/>
        <!--
        collection:一对多映射
        property:订单实体类中的属性
        ofType:集合里面存储的类型
        -->
        <collection property="orderDetailList" ofType="com.hs.pojo.OrderDetails">
            <id column="detail_id" property="id"/>
            <id column="amount" property="amount"/>
            <id column="orders_id" property="ordersId"/>
            <id column="goods_id" property="goodsId"/>
            <association property="goods" javaType="com.hs.pojo.Goods">
                <id column="goods_id" property="id"/>
                <id column="goods_name" property="goodsName"/>
                <id column="description" property="description"/>
                <id column="price" property="price"/>
            </association>
        </collection>
    </resultMap>
    <select id="selectOrdersAndGoods" resultMap="goodsResultMap">
        select
            o.*,d.goods_id,g.goods_name,g.description,g.price
        from orders o,orders_detail d,goods g
        where o.id = d.orders_id and d.goods_id = g.id
    </select>

以上就是SpringBoot整合Mybatis-Plus实现关联查询的详细内容,更多关于SpringBoot Mybatis-Plus关联查询的资料请关注脚本之家其它相关文章!

相关文章

  • MyBatis Plus插件机制与执行流程原理分析详解

    MyBatis Plus插件机制与执行流程原理分析详解

    这篇文章主要介绍了MyBatis Plus插件机制与执行流程原理分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 聊聊Mybatis反射之ObjectWrapper的使用

    聊聊Mybatis反射之ObjectWrapper的使用

    本文主要介绍了Mybatis反射之ObjectWrapper的使用,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • SpringBoot环境属性占位符解析和类型转换方式

    SpringBoot环境属性占位符解析和类型转换方式

    这篇文章主要介绍了SpringBoot环境属性占位符解析和类型转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • struts2获取服务器临时目录的方法

    struts2获取服务器临时目录的方法

    这篇文章主要为大家详细介绍了struts2获取服务器临时目录的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • java中的基础运算符

    java中的基础运算符

    这篇文章主要介绍了Java基本数据类型和运算符,结合实例形式详细分析了java基本数据类型、数据类型转换、算术运算符、逻辑运算符等相关原理与操作技巧,需要的朋友可以参考下
    2021-08-08
  • mybatis关于Criteria使用的小坑

    mybatis关于Criteria使用的小坑

    这篇文章主要介绍了mybatis关于Criteria使用的小坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • java中文传值乱码问题的解决方法

    java中文传值乱码问题的解决方法

    这篇文章主要为大家详细介绍了java中文传值乱码问题的解决方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • J2EE中的struts2表单细节处理

    J2EE中的struts2表单细节处理

    这篇文章主要介绍了J2EE中的struts2表单细节处理的相关资料,需要的朋友可以参考下
    2017-06-06
  • springboot自动装配TypeNotPresentExceptionProxy异常排查解决

    springboot自动装配TypeNotPresentExceptionProxy异常排查解决

    这篇文章主要为大家介绍了springboot自动装配TypeNotPresentExceptionProxy异常排查解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • 关于SpringBoot禁止循环依赖解说

    关于SpringBoot禁止循环依赖解说

    这篇文章主要介绍了关于SpringBoot禁止循环依赖解说,Spring的Bean管理,文章围绕主题展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05

最新评论