天天看點

MyBatis-Plus系列之代碼生成器

代碼生成器,也叫逆向工程,是根據資料庫裡的表結構,自動生成對應的實體類、映射檔案和接口。

這和hibernate的自動建表恰好相反。

很早之前,寫了一個代碼生成器的工程,自己也一直在用,很友善,也經過大量驗證,也支援很多資料庫。

看到很多小夥伴在為資料庫生成實體類發愁,現分享給大家,提高開發效率。

mybatis-plus-code-generator 工程介紹

工程位址:

mybatis-plus-code-generator

https://github.com/fengwenyi/mybatis-plus-code-generator

目錄結構:

MyBatis-Plus系列之代碼生成器

Config類

針對每個人的習慣,可以在這個類裡進行配置

/** 包名:service */
    public static final String PACKAGE_NAME_SERVICE = "repository";

    /** 包名:service.impl */
    public static final String PACKAGE_NAME_SERVICE_IMPL = "repository.impl";

    /** 包名:model */
    public static final String PACKAGE_NAME_MODEL = "entity";

    /** 包名:dao */
    public static final String PACKAGE_NAME_DAO = "mapper";

    /** 包名:xml */
    public static final String PACKAGE_NAME_XML = "xml";

    /** 檔案名字尾:Model */
    public static final String FILE_NAME_MODEL = "%sEntity";

    /** 檔案名字尾:Dao */
    public static final String FILE_NAME_DAO = "I%sMapper";

    /** 檔案名字尾:Mapper */
    public static final String FILE_NAME_XML = "%sMapper";

    /** MP開頭,Service結尾 */
    public static final String FILE_NAME_SERVICE = "MP%sRepository";

    /** 檔案名字尾:ServiceImpl */
    public static final String FILE_NAME_SERVICE_IMPL = "%sRepositoryImpl";

    /** 邏輯删除字段 */
    public static final String FIELD_LOGIC_DELETE_NAME = "delete_status";

    /** 作者 */
    public static final String AUTHOR = "Erwin Feng";

    /** 是否支援Swagger,預設不支援 */
    public static final Boolean SWAGGER_SUPPORT = false;           

MySQL8CodeGenerator

MyBatis-Plus系列之代碼生成器

圈中的地方是必須要改的。

修改之後,執行就可以生成相應的代碼檔案了,下面我們舉個例子。

示例

我們以MyBatis-Plus官網的例子為例,拿來示範

SQL

DROP TABLE IF EXISTS user;

CREATE TABLE user
(
    id BIGINT(20) NOT NULL COMMENT '主鍵ID',
    name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
    age INT(11) NULL DEFAULT NULL COMMENT '年齡',
    email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱',
    PRIMARY KEY (id)
);

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, '[email protected]'),
(2, 'Jack', 20, '[email protected]'),
(3, 'Tom', 28, '[email protected]'),
(4, 'Sandy', 21, '[email protected]'),
(5, 'Billie', 24, '[email protected]');           

testMySQLCodeGenerator

DbType dbType = DbType.MYSQL;
String dbUrl = "jdbc:mysql://192.168.16.128:3306/study-spring-boot-mybatis-plus";
String username = "root";
String password = "123456";
String driver = "com.mysql.cj.jdbc.Driver";
// 表字首,生成的實體類,不含字首
String [] tablePrefixes = {};
// 表名,為空,生成所有的表
String [] tableNames = {};
// 字段字首
String [] fieldPrefixes = {};
// 基礎包名
String packageName = "com.fengwenyi.studyspringbootmybatisplus.db";
CommonUtils.execute(dbType, dbUrl, username, password, driver, tablePrefixes, tableNames, packageName, fieldPrefixes);           

生成的檔案

MyBatis-Plus系列之代碼生成器

我們将生成的檔案拷貝到工程裡

MyBatis-Plus系列之代碼生成器

測試

@Autowired
private MPUserRepository mpUserRepository;

@Test
public void testSelectList() {
    List<UserEntity> list = mpUserRepository.list();
    list.forEach(userEntity -> log.info(userEntity.toString()));
}           

運作:

MyBatis-Plus系列之代碼生成器

工程連結

代碼生成器:

示 例 工 程:

study-spring-boot-mybatis-plus https://github.com/fengwenyi/study-spring-boot/tree/master/spring-boot-mybatis-plus