概述

一直以来使用原生mybatis-generator的我发现有一个地方很不方便,即它生成的实体类的set方法返回值是void,而目前比较流行的则是链式set的写法,即set方法返回值不再是void而是这个类本身,这样的好处是你可以连写,比如demo.setA().setB().setC(),对此,我对它进行了改动,改动的思路比较简单,它底层代码我看不太懂,但我采用了一个简单的方法,即将它生成后的原生实体类通过文件操作改为链式实体类。

详细

代码下载:http://www.demodashi.com/demo/12478.html

代码实现过程

首先说下我的思路,我是将其生成的java文件读取其内容,然后查找到相应的位置,找到目标代码,替换为自己的代码,最后将其写入该java文件。

其核心代码可以说就是一个类处理器,不依赖任何框架(当然也不依赖mybatis-generator)。

下面来看几个核心的类。

1、文件工具类

package com.zs.tools;public class FileUtils {/*** 得到项目根路径* 比如:E:/Workspaces/eclipse/mybatis-zs-tool/* @return*/public static String getRootPath(){String str=FileUtils.class.getResource("/").getFile().toString().substring(1);String rootPath=str.replaceAll("target/classes/", "");return rootPath;}
}

这个比较简单,就是取得项目根路径。

2、实体处理工具类

package com.zs.tools;import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;/*** 2018-1-25* 该类的作用是将一个生成的类的setget方法中的set方法改为:返回值为该类* 比如:* public As setB(String b) {this.b = b;return this;}* @author it023**/
public class EntityUtils {public static String handleSetTransVoidToClass(File file) throws IOException{if (!file.isDirectory()) {String tmp="";FileReader fr=new FileReader(file);BufferedReader br=new BufferedReader(fr);String str;while ((str = br.readLine()) != null) {               tmp=tmp+str+"\r\n";}//找到类名String className=tmp.substring(tmp.indexOf("class")+5+1, tmp.indexOf("{")-1);//先切开String ss[]=tmp.split("set");List<String> litmp=new ArrayList<String>();//容器备用,之所用用它是因为它是变长的//如果不满足这个条件,说明找错了,那么就将相邻的两个合并for (int i=0;i<ss.length-1;i++) {/*条件1:切了之后最后一个字符是空格*条件2:最后一个字符之前的四个字符是“void”*如果满足上面两个条件,说明我们找到了,将其处理好,然后放入容器*如果不满足上面两个条件,就将它与之后的一个合并,并放入容器*/String s=ss[i];String snext=ss[i+1];if (s.substring(s.length()-1, s.length()).equals(" ") && s.substring(s.length()-1-4, s.length()-1).equals("void")) {//开始处理String a1=s.substring(0, s.length()-5)+className+" ";ss[i+1]=snext.substring(0, snext.indexOf(";"))+";\r\n        return this;"+snext.substring(snext.indexOf(";")+1, snext.length());litmp.add(a1);}else{litmp.add(s);}}litmp.add(ss[ss.length-1]);String result="";for (String s : litmp) {result=result+s+"set";}result=result.substring(0, result.length()-3);PrintWriter out=new PrintWriter(file);out.write(result);//-关闭流-fr.close();br.close();out.flush();out.close();}return "修改成功";}}

其重点就在于如何准确找到set方法的地方,代码注释中有写。

3、启动类

package com.zs.main;import java.io.File;
import java.io.IOException;
import org.mybatis.generator.api.ShellRunner;
import com.zs.tools.EntityUtils;
import com.zs.tools.FileUtils;public class App
{public static void main( String[] args ) throws IOException{App.work();}public static void work() throws IOException {String[] args = new String[] { "-configfile", "resources\\generatorConfig.xml", "-overwrite" };ShellRunner.main(args);String beanPath=FileUtils.getRootPath()+"resources/com/zs/entity";File filedir=new File(beanPath);File files[]=filedir.listFiles();for (File file : files) {EntityUtils.handleSetTransVoidToClass(file);}}
}

调用App.work()即可启动。

项目文件结构截图

演示效果

最终可以看到,实现了我想要的效果。

代码下载:http://www.demodashi.com/demo/12478.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

基于mybatis-generator代码生成工具改(链式方法实体版)相关推荐

  1. mybatis java8_Java 8 开发的 Mybatis 注解代码生成工具

    MybatisAnnotationTools MybatisAnnotationTools 是基于 Java8 开发的一款可以用于自动化生成 MyBatis 注解类的工具,支持配置数据源.类路径,表名 ...

  2. C#中扩展StringBuilder支持链式方法

    本篇体验扩展StringBuilder使之支持链式方法. 这里有一个根据键值集合生成select元素的方法. private static string BuilderSelectBox(IDicti ...

  3. 如何在PHP中实现链式方法调用

    写程序的人都喜欢偷懒,希望少打几行代码,并且让代码看起来很酷. 所以很多人写程序都会选择三元运算取代if..else.... 而用过JS的人应该都见识过js中的链式方法. 如 somevars.fun ...

  4. Mybatis Generator生成工具使用

    一.创建数据库以及表t_user 二.引入依赖 <dependency><groupId>org.mybatis.generator</groupId><ar ...

  5. springboot集成mybatis+Generator代码生成

    首先主备个数据库和user表 建表语句如下,当然你也可以用自己的 CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` va ...

  6. (区块链溯源)基于Hyperledger Fabric 的农产品区块链溯源方法

    1. 技术背景 溯源技术中产品溯源是将当前先进的物联网技术.自动控制技术.自动识别技术. 互联网技术结合利用,通过专业的机器设备对单件产品赋予唯一的二维码或条形码等作为防伪身份证,实现"一物 ...

  7. java 注解生成实例_Java 8 开发的 Mybatis 注解代码生成工具

    MybatisAnnotationTools MybatisAnnotationTools 是基于 Java8 开发的一款可以用于自动化生成 MyBatis 注解类的工具,支持配置数据源.类路径,表名 ...

  8. 撑持链式方法生成/解析XML的Java类库 (依靠dom4j) - 代码共享

    [代码] [Java]代码 import java.io.*; import java.util.List; import org.apache.commons.collections.ListUti ...

  9. idea java代码格式化_intellij Idea中的Java代码格式化(链式方法调用)

    我对Intellij Idea 14.1.4中的 java代码格式有一个小问题. 我有一段由我手动格式化的代码,对我来说很好看: public class Test { private static ...

最新文章

  1. 全局负载均衡与CDN内容分发
  2. 简单的分页控件(原创)
  3. 与太原工业学院商讨第十七届全国大学生智能车华北赛区承办事宜
  4. 【转】BT5汉化步骤
  5. MySQL同步复制搭建方法指南详细步骤
  6. 批量删除指定user和transaction type对应order的report
  7. go语言代码连接mysql_【mysql】golang连接mysql操作示例增删改查
  8. Hbulider代码注释,缩进问题 - 设置篇
  9. linux ps 命令的结果中VSZ,RSS,STAT的含义和大小
  10. 用HTML5 Canvas为Web图形创建特效
  11. 联想提取exe文件中的bios文件_3900不带X能干过99K吗?品牌机做视频渲染可以?联想刃7000P评测...
  12. 腾达W311R路由器修改Mac地址方法
  13. 易辅客栈第一套从零学辅助系列教程
  14. window7 右下角图标消失解决方法
  15. 多媒体计算机用什么音箱好,小巧又不失音质 桌面2.0电脑音箱推荐榜
  16. imac2017拆机
  17. windet插入图片的大小_LaTeX图片插入
  18. A Game of Thrones(15)
  19. USB音频编解码芯片电路方案设计(原理图)|TYPEC音频方案|TYPEC扩展坞方案|USB音频方案
  20. SVG 入门指南(看完,对SVG结构不在陌生)

热门文章

  1. android能用svg格式,Android加载html中svg格式图片进行显示
  2. java访问mysql_Java访问数据库
  3. 基于OK6410开发板Uboot源码简单分析
  4. 信号集操作函数,信号阻塞与未决
  5. Hash魔法:一致性 hash 算法
  6. 嵌入式Linux系统编程学习之十四signal信号处理机制
  7. 关于使用pietty或putty终端连接ubuntu虚拟机时报被拒绝连接问题
  8. php 判断两个数组是否相等
  9. 【转】 Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner
  10. 微软随.NET 4.5发布新REST API框架