MyBatis-Plus 代碼生成器


MyBatis-Plus 是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生,官方文檔地址:https://mp.baomidou.com/guide/ 。其具體的使用可以查看 MyBatis-Plus 基本用法,本文介紹的是 MyBatis-Plus 代碼生成器的使用。

數據庫腳本

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
	`id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵ID',
	`user_name` VARCHAR ( 20 ) NOT NULL COMMENT '用戶名',
	`password` VARCHAR ( 20 ) NOT NULL COMMENT '密碼',
	`name` VARCHAR ( 30 ) COMMENT '姓名',
	`age` INT COMMENT '年齡',
	`email` VARCHAR ( 50 ) COMMENT '郵箱'
) COMMENT '測試表';


INSERT INTO `user`(`id`, `user_name`, `password`, `name`, `age`, `email`) VALUES 
(1, 'zhangsan', '123456', '張三', 18, 'test1@itcast.cn'),
(2, 'lisi', '123456', '李四', '20', 'test2@itcast.cn'),
(3, 'wangwu', '123456', '王五', '28', 'test3@itcast.cn'),			
(4, 'zhaoliu', '123456', '趙六', '21', 'test4@itcast.cn'),			
(5, 'sunqi', '123456', '孫七', '24', 'test5@itcast.cn');

代碼生成器使用

☕️ 在 pom.xml 文件中添加 jar 包依賴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.4.RELEASE</version>
    <relativePath/>
</parent>

<dependencies>
    <!-- web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>    
    
    <!-- mysql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- MyBatis-Plus-->
    <!-- 不需要引入 MyBatis 依賴,MyBatis-Plus 已經集成了 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.2</version>
    </dependency>

    <!-- mybatis-plus 的代碼生成器 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.3.2</version>
    </dependency>

    <!-- 代碼生成器的模板引擎 -->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity-engine-core</artifactId>
        <version>2.2</version>
    </dependency>

    <!-- lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

☕️ 編寫代碼生成器配置 MyBatisPlusGenerator

package com.example.util;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class MyBatisPlusGenerator {

    public static void main(String[] args) {
        // 1. 全局配置
        GlobalConfig config = new GlobalConfig();
        config.setActiveRecord(false)  // 是否支持AR模式
                // 作者
                .setAuthor("xxx")
                // 生成文件所在項目路徑
                .setOutputDir("F:\\JavaDemoLearning\\mybatisplus\\src\\main\\java")
                // 是否覆蓋文件
                .setFileOverride(true)
                // 主鍵策略
                .setIdType(IdType.AUTO)
                // 生成后是否打開文件夾
                // .setOpen(false)
                // 設置日期格式
                .setDateType(DateType.ONLY_DATE)
                // 自定義生成的類名
                .setMapperName("%sMapper")
                .setXmlName("%sMapper")
                .setServiceName("%sService")
                .setServiceImplName("%sServiceImpl")
                .setControllerName("%sController")
                // XML 映射文件中是否生成基本的 resultMap
                .setBaseResultMap(true)
                // XML 映射文件中是否生成基本的 columList
                .setBaseColumnList(true);

        // 2. 數據源配置
        DataSourceConfig dsConfig = new DataSourceConfig();
        dsConfig.setDbType(DbType.MYSQL)  // 設置數據庫類型
                .setDriverName("com.mysql.cj.jdbc.Driver")
                .setUrl("jdbc:mysql://localhost:3306/learning?characterEncoding=utf-8&useSSL=false&serverTimezone=Hongkong")
                .setUsername("root")
                .setPassword("123456");

        // 3. 策略配置globalConfiguration中
        StrategyConfig stConfig = new StrategyConfig();
        stConfig.setCapitalMode(true)  // 全局大寫命名
                // 數據庫表映射到實體的命名策略,駝峰式命名映射
                .setNaming(NamingStrategy.underline_to_camel)
                // 是否使用 lombok 注解
                .setEntityLombokModel(true)
                // 需要生成的表, 支持多表一起生成,以數組形式填寫
                .setInclude(new String[]{"user"});

        // 4. 包名策略配置
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setParent("com.example") // 設置包路徑
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("entity")
                .setXml("mapper");

        // 5. 整合配置
        AutoGenerator ag = new AutoGenerator();
        ag.setGlobalConfig(config)
                .setDataSource(dsConfig)
                .setStrategy(stConfig)
                .setPackageInfo(pkConfig);

        // 6. 執行
        ag.execute();
        System.out.println("======= 代碼生成完畢 ========");
    }
}

☕️ 運行代碼

運行 MyBatisPlusGenerator,自動生成的代碼目錄如下:

MyBatis-Plus 的代碼生成器會自動生成實體類、Mapper 層、Service 層和 Controller 層代碼,可根據我們的需求進行調整,自動生成的代碼如下:

⭐️ 自動生成的實體類

package com.example.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * <p>
 * 測試表
 * </p>
 *
 * @author xxx
 * @since 2020-10-09
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class User implements Serializable {

    private static final long serialVersionUID=1L;

    /**
     * 主鍵ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 用戶名
     */
    private String userName;

    /**
     * 密碼
     */
    private String password;

    /**
     * 姓名
     */
    private String name;

    /**
     * 年齡
     */
    private Integer age;

    /**
     * 郵箱
     */
    private String email;
}

⭐️ 自動生成的 Mapper 層接口及其 XML 映射文件

package com.example.mapper;

import com.example.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
 * <p>
 * 測試表 Mapper 接口
 * </p>
 *
 * @author xxx
 * @since 2020-10-09
 */
public interface UserMapper extends BaseMapper<User> {

}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">

    <!-- 通用查詢映射結果 -->
    <resultMap id="BaseResultMap" type="com.example.entity.User">
        <id column="id" property="id" />
        <result column="user_name" property="userName" />
        <result column="password" property="password" />
        <result column="name" property="name" />
        <result column="age" property="age" />
        <result column="email" property="email" />
    </resultMap>

    <!-- 通用查詢結果列 -->
    <sql id="Base_Column_List">
        id, user_name, password, name, age, email
    </sql>
</mapper>

⭐️ 自動生成的 Service 層接口及其實現類

package com.example.service;

import com.example.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * <p>
 * 測試表 服務類
 * </p>
 *
 * @author xxx
 * @since 2020-10-09
 */
public interface UserService extends IService<User> {

}
package com.example.service.impl;

import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 測試表 服務實現類
 * </p>
 *
 * @author xxx
 * @since 2020-10-09
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

⭐️ 自動生成的 Controller 層

package com.example.controller;


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.stereotype.Controller;

/**
 * <p>
 * 測試表 前端控制器
 * </p>
 *
 * @author xxx
 * @since 2020-10-09
 */
@Controller
@RequestMapping("/user")
public class UserController {

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM