Mybatis Plus 逆向工程介绍

yizhihongxing

下面是完整攻略,首先我们来讲解一下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日

相关文章

  • Java实现简单的酒店管理系统

    Java实现简单的酒店管理系统 系统需求 在开始编写系统代码之前,需要明确系统需求,以确定需要实现哪些功能。 管理员登录:管理员通过用户名和密码登录酒店管理系统。 房间管理:管理员可以添加、修改和删除房间信息,包括房间类型、房间号、房间价格、房间状态等。 客户管理:管理员可以添加、修改和删除客户信息,包括客户姓名、客户身份证号、客户联系方式等。 预定管理:管…

    Java 2023年5月19日
    00
  • SpringMVC框架搭建idea2021.3.2操作数据库的示例详解

    下面我会详细讲解“SpringMVC框架搭建idea2021.3.2操作数据库的示例详解”的完整攻略。 1. 搭建SpringMVC框架和数据库 下载配置Tomcat 首先要下载配置Tomcat,可在官网下载二进制安装包,并在IDEA中进行配置。 创建新的项目 在IDEA中创建SpringMVC项目,选择“SpringMVC”模板即可。 配置SpringMV…

    Java 2023年5月20日
    00
  • 通过Spring Security魔幻山谷讲解获取认证机制核心原理

    下面是通过Spring Security魔幻山谷讲解获取认证机制核心原理的完整攻略,包含了两条示例。 一、认证机制核心原理 Spring Security的认证机制是基于过滤器链来实现的,具体流程如下: 用户提交认证请求; 表单过滤器(FilterSecurityInterceptor)拦截请求,检查请求的路径是否需要进行身份认证; 如果需要认证,则由过滤器…

    Java 2023年5月20日
    00
  • JSP XMLHttpRequest动态无刷新及其中文乱码处理

    JSP XMLHttpRequest动态无刷新及其中文乱码处理,是前端开发中经常会遇到的问题之一。下面,我们将介绍一些方法来解决这个问题。 1. JSP动态无刷新 实现动态无刷新需要使用XMLHttpRequest对象。XMLHttpRequest对象被用于在web浏览器和web服务器之间传输数据。JSP实现动态无刷新的步骤一般如下: 步骤1:创建XMLHt…

    Java 2023年6月15日
    00
  • IDEA插件开发之环境搭建过程图文详解

    首先,要进行IDEA插件开发,需要搭建相应的开发环境。下面是我准备的完整攻略: 环境准备 Java环境 IDEA插件开发需要Java的支持,所以需要先安装Java环境。如果还没有安装,可以在Java官网上下载对应版本的Java开发包,并按照官方文档进行安装操作。 IntelliJ IDEA安装 下载并安装IntelliJ IDEA开发环境。建议下载最新版本。…

    Java 2023年5月26日
    00
  • Java加密技术的作用是什么?

    Java加密技术的作用 Java加密技术的主要作用是保障数据的安全性,对敏感信息进行加密后再传输和存储,提高数据的安全性和可靠性。Java中提供了多种加密技术,包括对称加密和非对称加密,以及数字签名等技术,这些技术可以用来实现数据的加密、签名和认证等功能。 加密技术的分类 对称加密技术:使用同一个密钥进行加密和解密,加密和解密的速度比较快,但是安全性比较差。…

    Java 2023年5月11日
    00
  • Spring Boot如何排除自动加载数据源

    如果在使用Spring Boot时没有启用JPA或其他ORM库,则会默认加载数据源。但是,在某些情况下,您可能不想加载数据源。幸运的是,Spring Boot提供了几种方法来排除自动加载数据源。 方法一:使用 exclude 属性 在 application.properties 中,可以使用 spring.autoconfigure.exclude 属性来…

    Java 2023年5月20日
    00
  • springmvc学习笔记-返回json的日期格式问题的解决方法

    下面是“springmvc学习笔记-返回json的日期格式问题的解决方法”的完整攻略: Spring MVC 返回JSON的日期格式问题的解决方法 Spring MVC框架中,我们通常会使用JSON作为数据返回格式,但是在返回JSON数据的时候,日期格式往往会出现一些问题,本文将详细介绍如何解决Spring MVC返回JSON的日期格式问题。 问题描述 在S…

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