MyBatis-Plus详解(环境搭建、关联操作)

MyBatis-Plus详解(环境搭建、关联操作)

环境搭建

添加依赖

pom.xml 文件中添加 MyBatis-Plus 的依赖。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.2.0</version>
</dependency>

配置文件

application.yml 文件中添加 MyBatis-Plus 的配置。

mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  typeAliasesPackage: com.example.entity

代码生成器

MyBatis-Plus 提供了一个自动生成代码的工具。在使用前,需要在 pom.xml 文件中添加代码生成器的依赖。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.2.0</version>
    <scope>test</scope>
</dependency>

application.yml 文件中,添加代码生成器的相关配置。

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root

mp-generator:
  datasource:
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
    driverName: com.mysql.jdbc.Driver
    username: root
    password: root
  package:
    parent: com.example
  strategy:
    naming: underline_to_camel
    table_prefix: sys_
    field_prefix: sys_

运行 MybatisPlusGeneratorApplication 类,即可自动生成代码。

关联操作

MyBatis-Plus 支持 SQL 关联操作,本文以一对多、多对多关联为例。

一对多关联

实体类定义:

@Data
public class User {
    private Long id;
    private String name;
    private String address;
    // 一对多关联
    @TableField(exist = false)
    private List<Order> orderList;
}

@Data
public class Order {
    private Long id;
    private Long userId;
    private BigDecimal price;
    private Integer status;
}

Mapper 文件:

<!-- 获取用户及其订单信息 -->
<select id="getUserWithOrders" resultMap="userResultMap">
    SELECT
        user.id, user.name, user.address,
        order.id AS order_id, order.user_id AS order_user_id, order.price, order.status
    FROM
        sys_user user
    LEFT JOIN sys_order order ON user.id = order.user_id
    <where>
        <if test="id != null">
            AND user.id = #{id}
        </if>
    </where>
    <!-- 根据用户id进行分组 -->
    <groupBy property="id"></groupBy>
</select>

<resultMap id="userResultMap" type="com.example.entity.User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="address" column="address"/>
    <!-- 一对多关系 -->
    <collection property="orderList" column="order_id" ofType="com.example.entity.Order">
        <id property="id" column="order_id"/>
        <result property="userId" column="order_user_id"/>
        <result property="price" column="price"/>
        <result property="status" column="status"/>
    </collection>
</resultMap>

调用关联查询:

User user = userMapper.getUserWithOrders(1L);

多对多关联

实体类定义:

@Data
public class User {
    private Long id;
    private String name;
    private String address;
    // 多对多关联
    @TableField(exist = false)
    private List<Role> roleList;
}

@Data
public class Role {
    private Long id;
    private String roleName;
}

@Data
public class UserRole {
    private Long id;
    private Long userId;
    private Long roleId;
}

Mapper 文件:

<!-- 获取用户及其角色信息 -->
<select id="getUserWithRoles" resultMap="userResultMap">
    SELECT
        user.id, user.name, user.address,
        role.id AS role_id, role.role_name
    FROM
        sys_user user
    LEFT JOIN sys_user_role user_role ON user.id = user_role.user_id
    LEFT JOIN sys_role role ON user_role.role_id = role.id
    <where>
        <if test="id != null">
            AND user.id = #{id}
        </if>
    </where>
    <!-- 根据用户id进行分组 -->
    <groupBy property="id"></groupBy>
</select>

<resultMap id="userResultMap" type="com.example.entity.User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="address" column="address"/>
    <!-- 多对多关系 -->
    <collection property="roleList" ofType="com.example.entity.Role">
        <id property="id" column="role_id"/>
        <result property="roleName" column="role_name"/>
    </collection>
</resultMap>

调用关联查询:

User user = userMapper.getUserWithRoles(1L);

以上是 MyBatis-Plus 的详细讲解,希望对你有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis-Plus详解(环境搭建、关联操作) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Jsp生成页面验证码的方法[附代码]

    让我来详细讲解一下“Jsp生成页面验证码的方法[附代码]”。 1. 简介 验证码(Captcha)是一种常见的图形验证码,用于防止恶意攻击和自动化机器人下载。在 JSP 网站设计的过程中,JavaWeb 的技术基本上都使用了验证码,验证方式很多,确保了 JSP 网站的安全性和性能。 2. 生成验证码示例 下面是一个简单的 JSP 页面,展示了如何使用 Jav…

    Java 2023年6月15日
    00
  • Java 实战项目锤炼之网上图书馆管理系统的实现流程

    Java 实战项目锤炼之网上图书馆管理系统的实现流程 本文将详细讲解如何实现一个网上图书馆管理系统,包括前端页面设计、后端接口实现等方面的内容。 前端页面设计 1. 首页 首页应该包含以下内容: 搜索框:用户可以在搜索框中输入书名、作者、ISBN等信息,以便找到他们想要借阅的书籍。 推荐书单:系统会根据用户的阅读历史等信息,为用户推荐一些可能感兴趣的书籍。 …

    Java 2023年5月24日
    00
  • 6种Java创建对象的方式总结

    下面我来详细讲解“6种Java创建对象的方式总结”的攻略。 一、使用 new 关键字创建对象 new 关键字是最常用的创建对象的方式,用来实例化一个类,创建一个对象。具体用法如下: ClassA classA = new ClassA(); 其中 ClassA 是被创建的类名,classA 是创建的对象名。 二、使用反射创建对象 反射是 Java 中非常强大…

    Java 2023年5月26日
    00
  • 在JSP页面内编写java代码方法总结

    在JSP页面内编写Java代码是Web开发中非常常见的一个操作,在这里我会为大家总结一下在JSP页面中编写Java代码的方法与步骤。 步骤一:编写JSP页面 首先,我们需要编写一个JSP页面来对外展示我们所编写的Java代码。在JSP页面中,我们使用<% %>标签来插入Java代码。在<% %>中插入的Java代码会被解析器当作脚本来…

    Java 2023年5月23日
    00
  • Java如何搭建一个个人网盘

    搭建个人网盘是一项不错的技术挑战,如果你有一定的Java编程经验,那么就可以利用Java来完成个人网盘的搭建。以下是一个简单的Java搭建个人网盘的攻略: 开发环境准备 首先,你需要一个完整的Java开发环境。安装JDK并配置相应的环境变量,建议使用JDK 8或以上版本。其次,你需要一个开发工具,例如Eclipse或IntelliJ IDEA等IDE。当然,…

    Java 2023年5月26日
    00
  • 详解Java中的延时队列 DelayQueue

    详解Java中的延时队列 DelayQueue 概述 DelayQueue是Java中的一个实现了Delayed的队列,它按照剩余时间从少到多的顺序对元素进行排序,每个元素都有一个过期时间,只有过期的元素才能被取出。 延时队列的实现 延时队列的实现需要实现Delayed接口,并重写getDelay()方法和compareTo()方法。 public inte…

    Java 2023年5月26日
    00
  • Java中super关键字介绍以及super()的使用

    当子类需要引用父类的构造方法、成员变量或成员方法时,需要使用Java中的super关键字。super也可以理解为是当前对象的父类对象。 super的使用有以下几种形式: 使用super引用父类的成员变量和成员方法 在子类中可以使用super关键字来引用父类的成员变量和成员方法。例如: public class Parent { private int age…

    Java 2023年5月26日
    00
  • Java多态的全面系统解析

    Java多态的全面系统解析 什么是多态 多态(Polymorphism)是面向对象编程中一个非常重要的概念,指的是同类对象的不同表现形式。具体而言,多态是指在运行时根据实际类型来确定对象的实际行为。 Java中的多态可以分为两种:编译时多态和运行时多态。 编译时多态,也称为静态多态,是指在编译时就能确定具体的方法调用。这种多态是通过Java的方法重载实现的。…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部