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日

相关文章

  • Tomcat配置https并访问http自动跳转至https

    下面是Tomcat配置https并访问http自动跳转至https的完整攻略,过程中包含两条示例说明。 准备工作 在进行Tomcat配置https之前,需要先准备以下工作: 申请SSL证书。可以通过CA机构购买或者免费的Let’s Encrypt证书。这里以Let’s Encrypt为例进行说明。 安装Java JDK,并配置环境变量。 安装Tomcat。这…

    Java 2023年6月15日
    00
  • Java中System.currentTimeMillis()计算方式与时间单位转换讲解

    下面是Java中System.currentTimeMillis()计算方式与时间单位转换讲解的完整攻略。 1. System.currentTimeMillis()计算方式 在Java中,我们可以通过System.currentTimeMillis()方法获取当前的毫秒数,这个毫秒数表示从1970年1月1日00:00:00 GMT起到现在的时间间隔。 这个…

    Java 2023年5月20日
    00
  • Java中IO流文件读取、写入和复制的实例

    下面是Java中IO流文件读取、写入和复制的实例的完整攻略。 IO流简介 在Java中,输入输出都是通过流(Stream)来实现的,也就是将数据源或者目的地以流的形式组织起来,以字节为基础的流就是字节流,以字符为基础的流就是字符流。在Java中,IO流分为四个抽象类:InputStream、OutputStream、Reader和Writer。 文件读取 J…

    Java 2023年5月20日
    00
  • WIN2003上Apache2+IIS6+Tomcat5之多站点完美配置篇

    接下来我将为你详细讲解“WIN2003上Apache2+IIS6+Tomcat5之多站点完美配置篇”的完整攻略。 什么是Apache,IIS以及Tomcat Apache Apache是一款常用的Web服务器软件,支持多种操作系统和编程语言。它是自由软件,采用了Apache许可证,因此可以免费使用、复制、修改和分发。Apache的优点是简单易用、配置灵活、性…

    Java 2023年5月19日
    00
  • springmvc集成shiro登录失败处理操作

    要将SpringMVC和Shiro集成起来,需要进行以下步骤: 1. 导入相关依赖 在项目的pom.xml文件中,需要添加spring-boot-starter-web、shiro-spring、shiro-core和thymeleaf等相关依赖。具体依赖版本可以自行选择,这里我给出一个示例: <dependencies> <depende…

    Java 2023年6月15日
    00
  • 解决mybatis-plus自动配置的mapper.xml与java接口映射问题

    针对“解决mybatis-plus自动配置的mapper.xml与java接口映射问题”,我给出以下完整攻略,主要分为两个部分: 1. 配置XML文件路径 mybatis-plus默认情况下会在classpath:/mapper/下寻找对应的mapper.xml文件,因此需要确保xml文件路径正确。 可以使用如下方式在application.yml或appl…

    Java 2023年5月20日
    00
  • SpringMVC使用RESTful接口案例

    下面是关于“SpringMVC使用RESTful接口案例”的完整攻略,包含两个示例说明。 SpringMVC使用RESTful接口案例 RESTful接口是一种基于HTTP协议的API设计风格,它使用HTTP方法(GET、POST、PUT、DELETE等)来实现对资源的操作。本文将介绍如何在SpringMVC中使用RESTful接口,并提供两个示例说明。 步…

    Java 2023年5月17日
    00
  • Java 数据库连接池详解及简单实例

    Java 数据库连接池详解及简单实例 数据库连接池是一种管理数据库连接的技术,它使用一组数据库连接来避免在每个请求中重复创建和释放数据库连接的开销。本文将详细介绍Java中如何使用数据库连接池技术。 什么是数据库连接池 数据库连接池是一种可以在应用程序启动时创建并保持在内存中的一组预配置的数据库连接。当应用程序需要连接到数据库时,它可以从连接池中获取一个空闲…

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