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日

相关文章

  • js使用xml数据载体实现城市省份二级联动效果

    下面是使用XML数据载体实现城市省份二级联动效果的完整攻略: 1. 准备XML数据源 首先,我们需要准备一个XML文件作为数据源。XML是一种标记语言,可以方便地描述数据结构。这里我们以中国省市县三级行政区划数据作为示例。可以从许多数据开放平台或者政府官网上获取到相应的数据,如国家统计局。然后,我们可以将数据整理成以下格式(也可以根据自己需求来进行修改): …

    Java 2023年6月15日
    00
  • Tomcat中更改网站根目录和默认页的配置方法

    好的。首先我们需要了解一下Tomcat的目录结构,以及默认的网站根目录和默认页。在Tomcat的目录下,有一个webapps目录,它是用来存放Web应用程序的。在该目录下新建一个名为myweb的文件夹,作为我们的示例Web应用程序。 下面就是具体的步骤: 1. 更改网站根目录 在Tomcat中,网站根目录的默认值是webapps目录下的根目录。我们可以通过更…

    Java 2023年6月2日
    00
  • Java中文件的读写方法之IO流详解

    Java中文件的读写方法之IO流详解 什么是Java IO流 Java IO(Input/Output)流是一种用于处理输入输出的机制,它为我们提供了读取和写入数据的方法,可从不同来源读取数据,例如网络、文件等,也可以将数据写入到不同的位置,例如文件、网络等。Java IO流分为输入流和输出流,其中,输入流用于读取数据,输出流用于写入数据。 Java IO流…

    Java 2023年5月19日
    00
  • Java Durid进行JDBC连接详解

    Java Druid进行JDBC连接详解 简介 Druid是阿里巴巴开源的一个数据库连接池,Druid本身包含了JDBC和数据库连接池的实现,可以提供比JDBC更强大的扩展性和可用性。本攻略将详细介绍如何使用Java Druid进行数据库连接。 步骤 引入Druid依赖 在pom.xml中添加下面的依赖: <dependency> <gro…

    Java 2023年6月1日
    00
  • SpringSecurity整合springBoot、redis实现登录互踢功能

    下面我将详细讲解“SpringSecurity整合springBoot、redis实现登录互踢功能”的完整攻略。在这个攻略中,我们将会学习如何使用SpringSecurity完成登录验证,如何将SpringSecurity和SpringBoot进行整合,以及如何使用Redis实现登录互踢功能。 一、如何使用SpringSecurity完成登录验证 Sprin…

    Java 2023年5月19日
    00
  • spring异步service中处理线程数限制详解

    Spring异步Service中处理线程数限制详解 异步Service基础知识 在Spring中,我们可以使用@Async注解来定义一个异步方法。这个方法会在调用时在单独的线程中执行,而不是在当前请求线程中执行。 以下是一个简单的示例,演示了如何使用@Async注解: @Service public class MyService { @Async publ…

    Java 2023年5月19日
    00
  • Java操作IO对象流进行数据的读写

    针对Java操作IO(输入/输出)对象流进行数据的读写,一般包括以下的几个步骤: 创建IO对象流(如FileInputStream、FileOutputStream等)以及处理器流(如InputStreamReader、OutputStreamWriter等) 读、写或处理流中读写的数据(如读文本文件、写二进制文件等) 关闭流以释放资源,避免内存泄漏 具体步…

    Java 2023年5月26日
    00
  • java的arraylist排序示例(arraylist用法)

    下面是关于Java的ArrayList排序示例及用法的攻略。 ArrayList是什么 ArrayList是Java提供的集合框架中的一种,它继承了List接口并实现了可变数组。它的特点是可以添加、删除、排序和搜索其中的元素,同时可以动态地更改其大小。因其灵活性和高效性,它被广泛应用于Java程序开发中。 ArrayList的排序 使用自然排序(默认) Ar…

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