java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot Mybatis-Plus关联查询

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

作者:晴栀_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标签: 一对一关系映射描述。

 <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标签: 一对多关系映射描述。

    <!--
        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关联查询的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文