dao generator for php and mysql_MyBatis plus generator 自动生成Dao层

MyBatis plus generator自动生成Dao层

最近在搞生成包的问题,发现Mybatis plus不需要一张一张表的配置耶,所以就有了下文啦哈哈哈~

主要步骤:

1.新建基于SpringBoot的Maven项目,引入相关依赖

2.参考官方文档配置生成包的信息,编写生成generated包的主要类

3.新建模板信息(如果有自己特殊的要求的话,没有使用默认的即可)

4.将生成包打包测试 然后就可以开始使用啦~

整体项目目录结构如下(红色标记的文件为手动新增的内容):

e625da4e3d7c5b909b5ca34d228a817e.png

1.新建基于SpringBoot 的 Maven项目,pom.xml如下(我这里用的mysql8.x的,可根据实际情况更改数据库驱动包哈)

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.2.5.RELEASE

com.imodule.product

product

0.0.1-SNAPSHOT

product

Demo project for Spring Boot

UTF-8

0.0.1-SNAPSHOT

2.3.0

1.6.4

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter

org.springframework.boot

spring-boot-starter-test

test

com.baomidou

mybatis-plus-boot-starter

3.0.1

mysql

mysql-connector-java

8.0.17

org.apache.velocity

velocity-engine-core

2.2

org.projectlombok

lombok

1.18.8

provided

org.springframework.boot

spring-boot-maven-plugin

2.主要配置类 CodeGenerator.java

整个生成过程中 最值得讲的就是此类了,这里我连的TiDB数据库(类似与MySQL,直接用mysql的驱动即可)

细节一:策略配置 StrategyConfig 指定数据库中哪些表需要生成Dao

String[] tablename = {"PRD_BASE","PRD_PROPERTY"}; //多张表用数组表示

strategy.setInclude(tablename);// 包含那些表,excude排除哪些表 include与excude只能设置一个(如果不添加此项配置 默认生成数据库中所有的表对应的Dao)

细节二:由于我们是用的TiDB数据库,这不是我们原来的业务数据库,所以需要从其它库传输数据到TiDB,子啊通过DataPipeline传输的时候,发现DataPipeline有个自动的功能,当它发现同步的表没有主键的时候会自动建立列 _id 作为这张表的主键,同步到TiDB指定库中,这就给我们带来了难题, _id 字段在通过mybatis plus generator生成后,属性名为 id ,去掉了前缀 _ ,当我们执行查询的时候就会找不到 id字段,手动注释掉这个 id字段后,数据又正常啦。所以我们就更改了模板文件新增了 #if判断,就是在字段迭代的时候先判断当前字段是不是 _id,如果是就不做任何操作,也就是不将此属性添加到对象总,如果不是就正常执行。

#if(${field.name.equals("_id")})

语句如下:

#foreach($field in ${table.fields})

#if(${field.name.equals("_id")})

#else

...中间省略原来的模板代码信息...

private ${field.propertyType} ${field.propertyName};

#end

#end

细节三:模板配置 StrategyConfig的setTablePrefix方法,我原以为是可以手动添加表前缀,结果测试发现这是去掉前缀的意思。

示例:

数据库表名称为 PRD_USER

设置 StrategyConfig.setTablePrefix("PRD_");

最后生成的实体类: User ,去掉了 PRD_ 前缀 (除了实体类 Mapper Service Controller都会统一去掉 PRD_前缀)

如果不设置的话tablePrefix的话,生成的实体类为 PrdUser  (Mapper Service Controller都类似)

细节四:模板配置 TemplateConfig 指定生成的结果文件模板信息 (结果文件中需要包含哪些 语法参考对应的引擎)

templateConfig.setEntity("templates/entity.java");

templateConfig.setMapper("templates/mapper.java");

templateConfig.setXml("templates/mapper.xml");

templateConfig.setService("templates/service.java");

templateConfig.setServiceImpl("templates/serviceImpl.java");

templateConfig.setController("templates/controller.java");

这里我们使用TiDB,打算用同一套数据源,里面包含多个数据库(意思就是同一个数据库服务器里面建立多个数据库,类似与DBLINK),系统需要具备跨库查询的功能,直接生成的话是无法查询其它数据库的数据库的

所以我们在模板上做了一些小改造:在表名前增加了库名(目前没有参数可以设置,所以我们就直接在entity.java.vm模版文件中更改了,文章最后会提供更改之后的Entity模板文件)

原来是: @TableName("${table.name}")

更改后: @TableName("prd_demo.${table.name}")  //在这里把库名固定了 (如果有多个库需要分别生成,每次生成前需要先更改这个schema name 数据库名称)

package cozhelim.imodule.product;

import com.baomidou.mybatisplus.core.toolkit.StringPool;

import com.baomidou.mybatisplus.generator.AutoGenerator;

import com.baomidou.mybatisplus.generator.InjectionConfig;

import com.baomidou.mybatisplus.generator.config.*;

import com.baomidou.mybatisplus.generator.config.builder.ConfigBuilder;

import com.baomidou.mybatisplus.generator.config.po.TableInfo;

import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;

import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;

import java.util.List;

@Slf4j

public class CodeGenerator {

public static void main(String[] args) {

// 代码生成器

AutoGenerator mpg = new AutoGenerator();

// 全局配置

GlobalConfig gc = new GlobalConfig();

String projectPath = System.getProperty("user.dir");

gc.setOutputDir(projectPath + "/src/main/java");

gc.setAuthor(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值