Mybatis Plus代码生产器实战篇

简单实现一个Mybatis Plus代码生产器

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

MP中有个十分强大的工具——AutoGenerator代码生成器,通过AutoGenerator可以快速生产Entry、Mapper、Mapper Xml、Service、ServiceImpl、Contoller等各个模板的代码,可以极大提升开发效率。

实战练习:

添加依赖

MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖,并且在2.3.3之后表名也区分大小写了。

	<!--   mybatis plus依赖     -->
	 <dependency>
	     <groupId>com.baomidou</groupId>
	     <artifactId>mybatis-plus</artifactId>
	     <version>3.3.2</version>
	 </dependency>
	<!--   mybatis plus generator依赖     -->
	 <dependency>
	     <groupId>com.baomidou</groupId>
	     <artifactId>mybatis-plus-generator</artifactId>
	     <version>3.3.2</version>
	 </dependency>
	
	<!-- 旧版本的MP依赖其中包含了代码生成器并且不区分表名大小写-->
	<!--  <dependency>-->
	<!--      <groupId>com.baomidou</groupId>-->
	<!--      <artifactId>mybatis-plus</artifactId>-->
	<!--      <version>2.3.3</version>-->
	<!--  </dependency>-->
	
	<!-- 模板引擎 依赖 MP支持 Velocity(默认)Freemarker Beetl -->
	 <dependency>
	     <groupId>org.apache.velocity</groupId>
	     <artifactId>velocity-engine-core</artifactId>
	     <version>2.0</version>
	 </dependency>
	 
	<!--数据库驱动,根据数据库选型选择数据库驱动依赖 -->
	<!-- mysql驱动 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.38</version>
	</dependency>
	<!-- oracle驱动 -->
	<dependency>
		<groupId>com.oracle</groupId>
		<artifactId>ojdbc6</artifactId>
		<version>11.2.0.3</version>
	</dependency>
	<!-- sqlserver驱动 -->
	<dependency>
	    <groupId>com.microsoft.sqlserver</groupId>
	    <artifactId>mssql-jdbc</artifactId>
	    <version>7.4.1.jre8</version>
	    <scope>test</scope>
	</dependency>
	<!-- postgresql驱动 -->
	<dependency>
		<groupId>org.postgresql</groupId>
		<artifactId>postgresql</artifactId>
	</dependency>
	
	<!-- swagger2相关依赖,可选 -->
	<dependency>
	     <groupId>io.springfox</groupId>
	     <artifactId>springfox-swagger2</artifactId>
	     <version>3.0.0</version>
	 </dependency>
	 <dependency>
	     <groupId>io.springfox</groupId>
	     <artifactId>springfox-swagger-ui</artifactId>
	     <version>3.0.0</version>
	 </dependency>

编写配置

代码生产器提供了大量的自定义参数供用户选择

创建代码生成器对象
	AutoGenerator ag = new AutoGenerator(); //代码生成器对象
配置 GlobalConfig
	//全局配置
	GlobalConfig gc = new GlobalConfig();
	String outputDir = "D:\\workspace\\demo\\src\\main"; //文件生成路径
	gc.setOutputDir(outputDir+"\\java"); //设置文件生产路径
	gc.setSwagger2(true); //是否开启swagger2,需要引入swagger2依赖
	gc.setAuthor("lion");   //开发人员
	gc.setFileOverride(true); //是否覆盖已有文件
	gc.setActiveRecord(true); //开启 ActiveRecord 模式
	gc.setBaseResultMap(true);//开启 BaseResultMap
	gc.setBaseColumnList(true);//开启 baseColumnList
	gc.setEnableCache(true);   //是否在xml中添加二级缓存配置
	gc.setMapperName("%sMapper"); //设置各层文件名称方式
	gc.setXmlName("%sMapper");
	gc.setServiceImplName("%sServiceImpl");
	gc.setServiceName("%sService");
	gc.setControllerName("%sController");
	//配置到代码生成器对象中
	ag.setGlobalConfig(gc);
配置 DataSourceConfig

在这里配置数据库相关信息

	//数据源配置
	DataSourceConfig ds = new DataSourceConfig();
	 ds.setDbType(DbType.ORACLE);    //数据库类型
	 ds.setDriverName("驱动名称"); //驱动名称
	 ds.setUrl("URL"); //驱动连接的URL
	 ds.setUsername("用户名");   //数据库连接用户名
	 ds.setPassword("密码");//数据库连接密码
	 ag.setDataSource(ds);
自定义模板引擎(可选)

需要继承AbstractTemplateEngine.

自定义代码模板(可选)

默认放到templates文件夹下,也可以指定模板文件:

	//指定自定义模板路径, 位置:/resources/templates/entity2.java.ftl(或者是.vm)
	//注意不要带上.ftl(或者是.vm), 会根据使用的模板引擎自动识别
	TemplateConfig templateConfig = new TemplateConfig()
	    .setEntity("templates/entity2.java");
	
	AutoGenerator mpg = new AutoGenerator();
	//配置自定义模板
	mpg.setTemplate(templateConfig);
自定义属性注入(可选)
	//自定义属性注入
	InjectionConfig cfg = new InjectionConfig() {
	    //自定义属性注入:abc
	    //在.ftl(或者是.vm)模板中,通过${cfg.abc}获取属性
	    @Override
	    public void initMap() {
	        Map<String, Object> map = new HashMap<>();
	        map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
	        this.setMap(map);
	    }
	};

使用

在文件entity2.java.ftl
自定义属性注入abc=${cfg.abc}

在文件entity2.java.vm
自定义属性注入abc=$!{cfg.abc}
配置全局策略
	 //配置全局策略
	 StrategyConfig sc = new StrategyConfig();
	 //自定义继承的Controller类全称,带包名
	 sc.setSuperControllerClass("com.zkr.demo.Controller.BaseController");
	 sc.setNaming(NamingStrategy.underline_to_camel);//驼峰命名
	 sc.setInclude(new String[]{"表名"}); //需要包含的表名(与exclude需要排除的表名二选一配置),新版本注意大小写
	 ag.setStrategy(sc);
配置包信息
	//包设置
	PackageConfig pc = new PackageConfig();
	 pc.setController("Controller");  //Controller包名
	 pc.setEntity("model.entity");   //Entity包名
	 pc.setParent("com.zkr.demo");   //父包名
	
	 ag.setPackageInfo(pc);
前端文件生成

首先需要创建文件夹来保存生成的文件

	final String viewOutputDir = outputDir + "\\view"; //前端页面生成路径
	File viewDir = new File(viewOutputDir); //新建view文件夹
	if (!viewDir.exists()) {
	    viewDir.mkdirs();
	}

然后配置代码生成器文件输出配置

	List<FileOutConfig> focList = new ArrayList<FileOutConfig>();
	focList.add(new FileOutConfig("/templates/listvue.vue.vm"){
	     @Override
	     public String outputFile(TableInfo tableInfo) {
	         return getGeneratorViewPath(viewOutputDir, tableInfo, ".vue"); //新建view文件
	     }
	 });
	 cfg.setFileOutConfigList(focList);
	 ag.setCfg(cfg);

需要先新建页面文件

	/**
	* 页面生成的文件名
	*/
	private static String getGeneratorViewPath(String viewOutputDir, TableInfo tableInfo, String suffixPath) {
	    String name = StringUtils.firstToLowerCase(tableInfo.getEntityName());
	    String path = viewOutputDir + "/" + name + "/index"  + suffixPath;
	    File viewDir = new File(path).getParentFile();
	    if (!viewDir.exists()) {
	        viewDir.mkdirs();
	    }
	    return path;
	}
执行生产
	// 执行生成
	ag.execute();

注意事项

  • 如果是Springboot项目注意依赖之间的版本
  • 如果是使用新版本的Mybatis-Plus 代码生成器 需要注意表名的大小写
  • 注意文件生成路径的设置
  • 如果需要自定义模板引擎需要放到templates路径下,或者在TemplateConfig 中配置。

参考

Mybatis-plus代码生成器

Teler / code-generate -码云

MybatisPlus:Error processing condition on com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoC…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值