首页 技术 正文
技术 2022年11月8日
0 收藏 358 点赞 1,389 浏览 6523 个字

前言

想要自己实现一个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;
}}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,489
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,290