package mybatis.profession;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import mybatis.entity.DataBase;
import mybatis.entity.PropertyDetails;
import mybatis.utils.TypeDispose;
/**
* @className:CreateXml.java
* @Title: CreateXml
* @Description: TODO(xml生成)
* @author: ludaqing
* @date: 2018年5月9日下午2:49:48
*/
public class CreateXml {
/**
* 开始xml文件生成
* @param dataBase 用户设置数据实体
* @param list 属性详情集合
*/
public static void createXml(DataBase dataBase, List<PropertyDetails> list){
try {
File dir = new File("src\\" + dataBase.getXmlPath().replace(".", "\\"));// 创建一个File对象
if (!dir.exists()) {// 判断该目录是否存在,存在则返回true
//目录不存在则 创建目标目录
dir.mkdirs();
}
/*
* FileWriter
* 字符输出流,构造方法第一个参数为:保存文件的路径+文件名称(包含后缀) 第二个参数为:再次往流中添加数据时之前内容是否保留(true:保留 false:不保留)
*/
FileWriter fw = new FileWriter("src\\" + dataBase.getXmlPath().replace(".", "\\") + "\\" + dataBase.getEntityName() + "Mapper.xml", true);
/*
* 开始拼装xml头
*/
StringBuffer stringBuffer = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n");
stringBuffer.append("<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\" >\r\n");
//xml mapper标签开头
stringBuffer.append("<mapper namespace=\"" + dataBase.getMapperPath() + "." + dataBase.getEntityName() + "Mapper\" >" + "\r\n");
/*
* 开始拼装数据库字段
*/
//获得主键的信息
PropertyDetails keyDetails = null;
stringBuffer.append(" <resultMap id=\"BaseResultMap\" type=\"" + dataBase.getEntityPath() + "." + dataBase.getEntityName() + "\" >" + "\r\n");
for (PropertyDetails propertyDetails:list) {
if (propertyDetails.getIsKey()) {
keyDetails = propertyDetails;
stringBuffer.append(" <id column=\"" + propertyDetails.getName() + "\" property=\"" + propertyDetails.getName() + "\" jdbcType=\"" + propertyDetails.getDatabaseType() + "\" />" + "\r\n");
}else {
stringBuffer.append(" <result column=\"" + propertyDetails.getName() + "\" property=\"" + propertyDetails.getName() + "\" jdbcType=\"" + propertyDetails.getDatabaseType() + "\" />" + "\r\n");
}
}
stringBuffer.append(" </resultMap>" + "\r\n");
/*
* 开始拼装字段集合Base_Column_List
*/
stringBuffer.append(" <sql id=\"Base_Column_List\" >" + "\r\n");
//用于存储字段,方便超过长度限制做换行操作
StringBuffer baseColumnList = new StringBuffer();
//如果做过第一次换行后不能再继续用100的长度进行判断是否换行,所以需要一个变量实时增加需要换行时的长度判断
int index = 0;
baseColumnList.append(" ");
for (int i = 0; i < list.size(); i++) {
//最后一个参数后不需要逗号
if (i == (list.size() - 1)) {
baseColumnList.append(list.get(i).getName() + "\r\n");
break;
}else {
baseColumnList.append(list.get(i).getName() + ", ");
}
//超过长度限制就换行
if (baseColumnList.length() > (100 + index)) {
baseColumnList.append("\r\n ");
index += 100;
}
}
//放到主StringBuffer中
stringBuffer.append(baseColumnList);
stringBuffer.append(" </sql>" + "\r\n");
/*
* 开始拼装查询方法
*/
stringBuffer.append(" <select id=\"selectByPrimaryKey\" resultMap=\"BaseResultMap\" parameterType=\"java.lang.Long\" >" + "\r\n");
stringBuffer.append(" select" + "\r\n");
stringBuffer.append(" <include refid=\"Base_Column_List\" />" + "\r\n");
stringBuffer.append(" from " + dataBase.getTableName() + "\r\n");
stringBuffer.append(" where " + keyDetails.getName() + " = #{" + keyDetails.getName() + ",jdbcType=" + keyDetails.getDatabaseType() + "}" + "\r\n");
stringBuffer.append(" </select>" + "\r\n");
/*
* 开始拼装删除方法
*/
stringBuffer.append(" <delete id=\"deleteByPrimaryKey\" parameterType=\"java.lang.Long\" >" + "\r\n");
stringBuffer.append(" delete from " + dataBase.getTableName() + "\r\n");
stringBuffer.append(" where " + keyDetails.getName() + " = #{" + keyDetails.getName() + ",jdbcType=" + keyDetails.getDatabaseType() + "}" + "\r\n");
stringBuffer.append(" </delete>" + "\r\n");
/*
* 开始拼装新增方法
*/
stringBuffer.append(" <insert id=\"insert\" parameterType=\"" + dataBase.getEntityPath() + "." + dataBase.getEntityName() + "\" >" + "\r\n");
//用于存储字段,方便超过长度限制做换行操作
StringBuffer insert1 = new StringBuffer();
insert1.append(" insert into " + dataBase.getTableName() + "(");
//如果做过第一次换行后不能再继续用100的长度进行判断是否换行,所以需要一个变量实时增加需要换行时的长度判断
index = 0;
for (int i = 0; i < list.size(); i++) {
//最后一个参数后不需要逗号
if (i == (list.size() - 1)) {
insert1.append(list.get(i).getName() + ")\r\n");
break;
}else {
insert1.append(list.get(i).getName() + ", ");
}
//超过长度限制就换行
if (insert1.length() > (100 + index)) {
insert1.append("\r\n ");
index += 100;
}
}
stringBuffer.append(insert1 + " values (");
//用于存储字段,方便超过长度限制做换行操作
StringBuffer insert2 = new StringBuffer();
//如果做过第一次换行后不能再继续用100的长度进行判断是否换行,所以需要一个变量实时增加需要换行时的长度判断
index = 0;
for (int i = 0; i < list.size(); i++) {
//最后一个参数后不需要逗号
if (i == (list.size() - 1)) {
insert2.append("#{" + list.get(i).getName() + ",jdbcType=" + list.get(i).getDatabaseType() + "})\r\n");
break;
}else {
insert2.append("#{" + list.get(i).getName() + ",jdbcType=" + list.get(i).getDatabaseType() + "}, ");
}
//超过长度限制就换行
if (insert2.length() > (100 + index)) {
insert2.append("\r\n ");
index += 100;
}
}
stringBuffer.append(insert2);
stringBuffer.append(" </insert>" + "\r\n");
//xml mapper标
没有合适的资源?快使用搜索试试~ 我知道了~
mybatis生成工具(纯手写,附带注释)
共13个文件
java:12个
xml:1个
需积分: 31 12 下载量 23 浏览量
2018-05-09
17:10:47
上传
评论
收藏 13KB RAR 举报
温馨提示
不参考mybatis生成工具原代码的情况下,自己通过业务逻辑编写mybatis生成工具,不同的实现方式,每行代码都附带注释,还有很多细节没有完善,有时间研究的朋友可以完善
资源推荐
资源详情
资源评论
收起资源包目录
mybatis.rar (13个子文件)
mybatis
utils
ReadXmlUtil.java 5KB
LinkDatabaseUtil.java 1KB
TypeDispose.java 2KB
CaptureName.java 470B
profession
CreateEntity.java 4KB
CreateStart.java 780B
CreateMapper.java 3KB
CreateXml.java 8KB
Produce.java 3KB
generatorConfig.xml 844B
entity
PropertyDetails.java 1KB
DataBase.java 3KB
获取数据库中表的各个字段和属性.java 5KB
共 13 条
- 1
资源评论
诚实可靠王大锤
- 粉丝: 18
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功