前言

想要自己实现一个mybatis-generator类似的轮子,目前只实现MySQL部分的方法。利用下班时间,写了一个小项目,实现了这个功能。我准备分成三篇博客来写这个东西。

基类

/**
*基类
*通用方法和属性
*getMapper 获取mapper 例如:cc.vvxtoys.mapper.StudentMapper
*getPojo 获取实体 例如:cc.vvxtoys.pojo.Student
*getFileName 生成地址
*@author vvxtoys
*/
package cc.vvxtoys.bean; import cc.vvxtoys.config.Engine; public class BaseBean { protected String clazz = "";//实体类名
protected String context = "";//bean内容 public String getClazz() {
return clazz==null?"":clazz;
}
public void setClazz(String clazz) {
this.clazz = clazz;
}
public String getContext() {
return context==null?"":context;
}
public void setContext(String context) {
this.context = context;
}
public String getMapper(){
return Engine.targetMapper+"."+clazz+"Mapper";
}
public String getPojo(){
return Engine.targetPackage+"."+clazz;
}
public String getFileName() { return null;
}
}

Bean

/**
*ClassBean
*dependency 生成实体是否存在Date类型 存在的话导入java.util.Date
*@author vvxtoys
*/
package cc.vvxtoys.bean; import java.io.File; import cc.vvxtoys.config.Engine; public class ClassBean extends BaseBean{ private String attributes = "";//属性
private String methods = "";//方法
private String constructors = "";//构造
private String packages = Engine.targetPackage;
private boolean dependency = false;//依赖 public ClassBean(String clazz) {
this.clazz = clazz;
} public String getAttributes() {
return attributes;
}
public void setAttributes(String attributes) {
this.attributes = attributes;
}
public String getMethods() {
return methods;
}
public void setMethods(String methods) {
this.methods = methods;
}
public String getConstructors() {
return constructors;
}
public void setConstructors(String constructors) {
this.constructors = constructors;
}
public String getPackages() {
return packages;
}
public boolean isDependency() {
return dependency;
}
public void setDependency(boolean dependency) {
this.dependency = dependency;
} public String getFileName(){
return Engine.targetProject+File.separator+Engine.targetPackage.replace(".", File.separator)+File.separator+clazz+".java";
} }

Mapper

/**
*MapperBean
*primary 主键 一般来说建表是有的,默认为true
*@author vvxtoys
*/
package cc.vvxtoys.bean; import java.io.File; import cc.vvxtoys.config.Engine; public class MapperBean extends BaseBean{ private String packages = Engine.targetMapper;
private boolean primary = true; public MapperBean(String clazz) {
this.clazz = clazz;
} public boolean isPrimary() {
return primary;
} public String getPackages() {
return packages;
}
public void setPrimary(boolean primary) {
this.primary = primary;
}
public String getFileName() {
return Engine.targetProject + File.separator + Engine.targetMapper.replace(".", File.separator)
+ File.separator + clazz + "Mapper.java";
}
}

XML

/**
*XmlBean
*这个类其实我是不想写的,原定计划使用dom4j来实现,但是最终使用dom4j换行没有达到我想要的
*效果,所以我就自己写了一个简单的xml方法,可以满足我现在的需求了。
*方法就不写注释了,感觉应该能看懂
*@author vvxtoys
*/
package cc.vvxtoys.bean; import java.io.File;
import java.util.ArrayList;
import java.util.List; import cc.vvxtoys.utils.Vconst;
import cc.vvxtoys.config.Engine;
import cc.vvxtoys.utils.Common; public class XMLBean extends BaseBean { private String name;//节点名
private List<XMLBean> childrens = new ArrayList<XMLBean>();//子节点
private int cnt;//用来判断空格
private boolean isEnd = true;//是否关闭节点
private String tname;//表名 public XMLBean(String name, String tname, String clazz) {
this.name = name;
this.tname = tname;
this.clazz = clazz; if (name.equals(Vconst.ROOTELEMENT[0])) {
cnt = 0;
}
} public XMLBean(String name) {
this(name, null, null);
} public void init() {
for (int i = 0; i < cnt; i++) {
this.context += Vconst.SPACE;
}
context += "<" + name + ">";
} public void addElement(XMLBean item) {
item.setCnt(this.cnt + 2);
childrens.add(item);
isEnd = false;
} public void addText(String text) {
StringBuffer buff = new StringBuffer(context);
buff.append(Vconst.LINE);
for (int i = 0; i < cnt + 1; i++) {
buff.append(Vconst.SPACE);
}
buff.append(text);
context = buff.toString();
isEnd = false;
} public void addEndText(String text) {
if (childrens != null && childrens.size() > 0) {
context += Vconst.LINE;
for (XMLBean i : childrens) {
context += i.toString();
}
}
childrens.clear();
StringBuffer buff = new StringBuffer(context);
for (int i = 0; i < cnt + 1; i++) {
buff.append(Vconst.SPACE);
}
buff.append(text);
context = buff.toString();
isEnd = false;
} public void addAttribute(String Qname, String value) {
context = context.substring(0, getSize() - 1);
StringBuffer buff = new StringBuffer(context);
buff.append(Common.ConcatAttr(Qname, value));
buff.append(" >");
context = buff.toString();
} public int getSize() {
return context.length();
} public void setCnt(int cnt) {
this.cnt = cnt;
} public String getTname() {
return tname;
} public void setTname(String tname) {
this.tname = tname;
} public String getFileName() {
return Engine.targetProject + File.separator + Engine.targetXML.replace(".", File.separator) + File.separator
+ clazz + "Mapper.xml";
} public String toString() {
StringBuffer buffer = new StringBuffer(context);
if (isEnd) {
return context.substring(0, getSize() - 1) + "/>\n";
}
buffer.append(Vconst.LINE);
if (childrens != null && childrens.size() > 0) {
for (XMLBean i : childrens) {
buffer.append(i.toString());
}
}
for (int i = 0; i < cnt; i++) {
buffer.append(Vconst.SPACE);
}
buffer.append("</").append(name).append(">");
buffer.append(Vconst.LINE);
return buffer.toString();
}
}

配置工具类

/**
*读取配置文件
*初始化,如果没有自定义配置文件,默认全文检索默认配置文件
*author vvxtoys
*/
package cc.vvxtoys.config; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Properties; import cc.vvxtoys.utils.Common; public class Engine extends Properties{ /**
*
*/
private static final long serialVersionUID = 1L; private static boolean isDefault = true;
private static String DEFAULT_CONFIG = "vgenerator.properties"; public static String targetPackage;//实体类包
public static String targetProject;//项目路径
public static String targetMapper;//mapper包
public static String targetXML;//xml包
public static String [] objectName;//实体名
public static String [] tableName;//表名 public static String user;
public static String pass;
public static String name;
public static String url; public static void setConfigFile(String path){
DEFAULT_CONFIG = path;
isDefault = false;
} private Engine() {
// TODO Auto-generated constructor stub
} public static Engine getInstance(){
Engine engine = null;
String path = isDefault?Common.searchAbsolutePath(DEFAULT_CONFIG):DEFAULT_CONFIG;
try {
engine = new Engine();
InputStreamReader is = new InputStreamReader(new FileInputStream(path), "UTF-8");
engine.load(is); targetPackage = (String)engine.getProperty("targetPackage");
targetProject = (String)engine.getProperty("targetProject");
targetMapper = (String)engine.getProperty("targetMapper");
targetXML = (String)engine.getProperty("targetXML");
tableName = ((String)engine.getProperty("tableName")).split(",");
objectName = ((String)engine.getProperty("objectName")).split(","); user = (String)engine.getProperty("user");
pass = (String)engine.getProperty("pass");
name = (String)engine.getProperty("name");
url = (String)engine.getProperty("url"); } catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
return engine;
} }

逆向工程vgenerator(一)的更多相关文章

  1. 逆向工程vgenerator(三)

    前言 该项目的最后一篇博文,最终构建,写入文件,整体项目流程将在本片文章中写出. jdbcType /** *@author vvxtoys *mysql单位 -> jdbcType */ pa ...

  2. 逆向工程vgenerator(二)

    前言 接上篇,这一篇主要的工具类和工厂类,包括数据库方法.通用方法,三个工厂. 常量 /** *author vvxtoys *默认xml开头 *文档分隔 *默认方法名 */ package cc.v ...

  3. IDEA 中生成 MyBatis 逆向工程实践

    IDEA 逆向 MyBatis 工程时,不像支持 Hibernate 那样有自带插件,需要集成第三方的 MyBatis Generator. MyBatis Generator的详细介绍 http:/ ...

  4. mybatis逆向工程生成JavaBean、dao、mapper generatorSqlmapCustom

    import java.io.File; import java.util.ArrayList; import java.util.List; import org.mybatis.generator ...

  5. mybatis入门基础(九)----逆向工程

    一.什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml.po. ...

  6. iOS逆向工程资料

    链接: 基于iOS逆向工程的微信机器人 - 猫友会大讲坛第1期 我的失败与伟大 —— 创业必备的素质(狗神经验谈)

  7. PowerDesigner逆向工程导入MYSQL数据库总结

    由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 首先现在PowerDesigner,这里提供PD16.5版本链接: http://pa ...

  8. IOS_ios逆向工程-静态分析

    返回博客列表 原 ios逆向工程-静态分析 余成海 发布时间: 2014/11/03 19:17 阅读: 11201 收藏: 17 点赞: 5 评论: 6 最近在学习IOS逆向工程,查看网络上的资料也 ...

  9. (转) PowerDesigner逆向工程导入MYSQL数据库总结

    PowerDesigner逆向工程导入MySQL数据库总结 由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1.      安装MYS ...

随机推荐

  1. laravel session使用 转自http://blog.csdn.net/angle_hearts/article/details/53923782

    use Symfony\Component\HttpFoundation\Session\Session;//存储session $session = new Session;$session-> ...

  2. PTA——求n以内k个质数和

    PTA 7-51 求n以内最大的k个素数以及它们的和 #include<stdio.h> #include<math.h> int isPrime(int n); int ma ...

  3. centos下源码编译安装MySQL

    解压下载的软件压缩包  tar xzvf mysql-5.1.63.tar.gz 进入解压的目录  cd mysql-5.1.63/ 安装需要的依赖包  yum install gcc gcc-c++ ...

  4. 3.go语言的转译字符

    go语言的转译字符 \a 匹配响铃符 (相当于 \x07) 注意:正则表达式中不能使用 \b 匹配退格符,因为 \b 被用来匹配单词边界, 可以使用 \x08 表示退格符. \f 匹配换页符 (相当于 ...

  5. 关于pycharm中导入自己写的模块没有智能提示的解决办法

    在pycharm界面中右击py文件所在的文件夹,选择Make Directory as文件,选择其中一个即可

  6. Linux ①

    目录 一.计算机简单认识 二.linux初始 三.安装虚拟机 四.安装Linux系统 五. 使用xshell 6 进行远程控制 六.linux文档与目录结构 七.常用命令 一.计算机简单认识 1.服务 ...

  7. 利用Pluggable Protocol实现浏览器打开本地应用程序

    https://www.cnblogs.com/liushaofeng89/archive/2016/05/03/5432770.html

  8. IIS7 伪静态 web.config 配置方法

    <rule name="Redirect" stopProcessing="true"> <match url=".*" ...

  9. Cookie 简单设置使用

    cookie的理解可以为,存放在用户浏览器上的一个文件,里面是键值对数据,用于跟服务端通讯.前端可以通过jquery cookie插件设置和读取,后端直接设置 1.获取Cookie: 1 2 3 4 ...

  10. centos7 安装php gd库

    yum install php-gd vi /etc/php.ini 添加: extension=/usr/lib64/php/modules/gd.so