Mybatis Plus 逆向工程介绍

下面是完整攻略,首先我们来讲解一下Mybatis Plus 逆向工程的概念:

什么是Mybatis Plus逆向工程

Mybatis Plus是一个优秀的Mybatis增强工具,Mybatis Plus逆向工程是一种通过数据库表反向生成对应的Mybatis Plus实体、mapper、mapper.xml等代码文件的技术,可以在一定程度上减少程序员的手动开发工作量,在开发大型系统和繁琐重复的CRUD操作时非常实用。

Mybatis Plus逆向工程的使用

使用Mybatis Plus进行逆向工程的步骤分为以下几个:

添加依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.0</version>
</dependency>

配置数据源

在application.yml中添加数据源的配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis_plus_demo?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

配置代码生成器

在代码中配置Mybatis Plus逆向工程代码生成器:

/**
 * 代码生成器
 */
public class CodeGenerator {

    public static void main(String[] args) {
        // 1. 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("wangshengwei");
        gc.setOpen(false);

        // 2. 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus_demo?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");

        // 3. 包名策略配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(null);
        pc.setParent("com.example.demo");

        // 4. 配置生成模板
        TemplateConfig tc = new TemplateConfig();
        tc.setXml(null);

        // 5. 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel); // 表名生成策略
        strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 字段名生成策略
        strategy.setEntityLombokModel(true); // 是否启用lombok模式
        strategy.setRestControllerStyle(true); // 是否生成RestController
        strategy.setControllerMappingHyphenStyle(true); // 是否启用mapping映射风格

        // 6. 代码生成器配置
        AutoGenerator mpg = new AutoGenerator();
        mpg.setGlobalConfig(gc);
        mpg.setDataSource(dsc);
        mpg.setPackageInfo(pc);
        mpg.setTemplate(tc);
        mpg.setStrategy(strategy);
        mpg.execute();
    }
}

运行代码

运行代码后即可自动生成对应的实体、mapper、mapper.xml等文件,生成的路径为代码所在路径和包名之和,例如示例中PackageName为"com.example.demo",则生成的代码目录为"/src/main/java/com/example/demo"。

示例1

假如我们有一张user表,表结构如下:

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我们可以使用上述步骤生成该表所对应的实体、mapper、mapper.xml等文件,在controller中进行CRUD操作。

示例2

假如我们有一张order表和一张order_detail表,表结构分别如下:

CREATE TABLE `order` (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `order_no` varchar(50) NOT NULL COMMENT '订单号',
  `user_id` bigint(20) NOT NULL COMMENT '用户id',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `order_detail` (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `order_id` bigint(20) NOT NULL COMMENT '订单id',
  `goods_name` varchar(50) NOT NULL COMMENT '商品名称',
  `goods_price` decimal(10,2) NOT NULL COMMENT '商品价格',
  `goods_num` int(11) NOT NULL COMMENT '商品数量',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我们需要将order和order_detail两张表关联起来,可以按照以下步骤进行:

配置实体

在Order类中添加List属性:

@Data
public class Order {
    private Long id;
    private String orderNo;
    private Long userId;
    private Date createTime;
    private Date updateTime;
    private List<OrderDetail> orderDetailList; // 添加OrderDetail列表
}

在OrderDetail类中添加Order属性:

@Data
public class OrderDetail {
    private Long id;
    private Long orderId;
    private String goodsName;
    private BigDecimal goodsPrice;
    private Integer goodsNum;
    private Order order; // 添加Order属性
}

配置mapper

在OrderMapper.xml中添加关联查询的SQL语句:

<select id="selectOrderDetailList" resultMap="OrderDetailResultMap">
    SELECT
    od.id,
    od.order_id,
    od.goods_name,
    od.goods_price,
    od.goods_num
    FROM
    order_detail od
    WHERE
    od.order_id = #{orderId}
</select>

在OrderDetailMapper.xml中添加关联查询的SQL语句:

<select id="selectOrderAndOrderDetailById" resultMap="OrderAndOrderDetailResultMap">
    SELECT
    o.id,
    o.order_no,
    o.user_id,
    o.create_time,
    o.update_time,
    od.id AS 'order_detail_id',
    od.goods_name,
    od.goods_price,
    od.goods_num
    FROM
    `order` o
    LEFT JOIN order_detail od ON o.id = od.order_id
    WHERE
    o.id = #{id}
</select>

配置controller

在controller中进行CRUD操作时,可以通过OrderDetailMapper.selectOrderDetailList(order.getId())关联查询OrderDetail信息,并将结果列表赋值给Order的orderDetailList属性。

在查询OrderDetail的同时查询出对应的Order信息时,可以通过OrderDetailMapper.selectOrderAndOrderDetailById(id)一次性查询出Order和OrderDetail信息,并使用Mybatis Plus的ResultMap逐层映射,最终将OrderDetail的Order属性和Order关联起来。

总结

通过Mybatis Plus逆向工程,可以大大提高程序员们的开发效率,降低人为失误的概率,减少重复工作,是一种非常实用的技术。通过本文的介绍,相信大家已经对Mybatis Plus逆向工程有了更深入的了解和掌握。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis Plus 逆向工程介绍 - Python技术站

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

相关文章

  • jdbc实现图书馆借阅系统

    JDBC实现图书馆借阅系统 简介 JDBC是Java Database Connectivity的缩写,是Java语言访问数据库的标准API,它提供了一套标准的Java接口,用于访问各种关系型数据库系统。本文将介绍如何使用JDBC实现图书馆借阅系统。 步骤 1. 加载数据库驱动 为了使用JDBC访问数据库,我们需要先加载数据库驱动。在这里以MySQL数据库为…

    Java 2023年6月16日
    00
  • Java 函数编程详细介绍

    Java 函数编程详细介绍 什么是函数编程 函数编程是一种编程范式,它将计算机程序视为数学函数的组合,避免了代码状态的改变和可变数据的使用。函数编程强调函数的纯洁性和不可变性,更关注数据的转换和流,而不只是程序的执行顺序。 Java 中的函数编程 在 Java 中,函数编程由 Lambda 表达式和函数接口的引入开始。Lambda 表达式是一种轻量级的语法,…

    Java 2023年5月23日
    00
  • Java环境配置原理全面解析

    这里是关于Java环境配置原理全面解析的详细攻略。 简介 Java是一种跨平台编程语言,需要安装Java开发工具包(JDK)才能进行编码,因此在进行Java编程之前必须进行Java环境的安装和配置。 Java环境配置的主要内容包括: 安装JDK 配置环境变量 本文将逐一介绍这两个过程,并附带两个实际的安装示例。 安装JDK JDK的安装需要从Oracle官网…

    Java 2023年5月24日
    00
  • 带你入门Java的方法

    带你入门Java的方法 Java是一种广泛应用于开发Web应用、Android应用、桌面应用等领域的编程语言。Java语言易学、易用,是学习编程的好选择。以下是带你入门Java的方法,欢迎阅读和学习! 1. 学习Java基础知识 Java基础知识包括Java语言的语法、数据类型、运算符、控制语句、数组、类、对象、继承、接口等概念。要想写出Java程序,必须要…

    Java 2023年5月19日
    00
  • Hibernate hql查询代码实例

    下面我来详细讲解“Hibernate hql查询代码实例”的完整攻略。 什么是Hibernate Hibernate是一个ORM框架(Object Relation Mapping),他能够将Java对象映射到关系数据库的数据表上,并提供了CRUD的操作方式。Hibernate可以用来解决JDBC API的繁琐操作。Hibernate的优点有: 减少了大量的…

    Java 2023年5月31日
    00
  • Java实现线程插队的示例代码

    实现线程插队可以使用Java中的join()方法。下面我将提供两个示例说明。 实现线程按照指定顺序执行 示例代码如下: class ThreadSequence implements Runnable { private int value; private Thread preThread; public ThreadSequence(int value,…

    Java 2023年5月18日
    00
  • response.setHeader参数、用法的介绍

    当我们使用Node.js写网站时,有时候需要通过设置response头信息来对客户端请求做出响应。response header就是指这些头信息。 在Node.js中,我们可以使用response对象中的setHeader方法来设置response header。 下面是关于response.setHeader的详细介绍: response.setHeade…

    Java 2023年6月15日
    00
  • javap命令的使用技巧

    当你需要了解Java程序在编译后生成的字节码时,javap命令是一个很有用的工具。它能够反编译.class文件并输出字节码指令的信息,甚至还能够显示源代码中的行号和本地变量信息。接下来,我们将详细讲解javap命令的使用技巧,以便你能够充分利用这个强大的工具。 命令格式 首先,我们来介绍一下javap命令的基本格式: javap [options] clas…

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