java 写 xml 文件 工具类_工具类生成mybatis的Mapper类和xml文件以及实体

package com.song;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

*  自动生成MyBatis的实体类、实体映射XML文件、Mapper

*

* @author   WYS

* @date     2014-11-8

* @version  v1.0

*/

@SuppressWarnings("hiding")

public class EntityUtil {

/**

**********************************使用前必读*******************

**

** 使用前请将moduleName更改为自己模块的名称即可(一般情况下与数据库名一致),其他无须改动。

**

***********************************************************

*/

private final String type_char ="char";

private final String type_date ="date";

private final String type_timestamp ="timestamp";

private final String type_int ="int";

private final String type_bigint ="bigint";

private final String type_text ="text";

private final String type_bit ="bit";

private final String type_decimal ="decimal";

private final String type_blob ="blob";

private final String moduleName ="group";// 对应模块名称(根据自己模块做相应调整!!!务必修改^_^)

private final String bean_path ="d:/entity_bean";

private final String mapper_path ="d:/entity_mapper";

private final String xml_path ="d:/entity_mapper/xml";

private final String bean_package ="net.yunxiaoyuan." + moduleName +".entity";

private final String mapper_package ="net.yunxiaoyuan." + moduleName +".mapper";

private final String driverName ="com.mysql.jdbc.Driver";

private final String user ="test";

private final String password ="test";

private final String url ="jdbc:mysql://192.168.1.253:3306/" + moduleName +"?characterEncoding=utf8";

private String tableName =null;

private String beanName =null;

private String mapperName =null;

private Connection conn =null;

private void init()throws ClassNotFoundException, SQLException {

Class.forName(driverName);

conn = DriverManager.getConnection(url, user, password);

}

/**

*  获取所有的表

*

* @return

* @throws SQLException

*/

private List getTables()throws SQLException {

List tables =new ArrayList();

PreparedStatement pstate = conn.prepareStatement("show tables");

ResultSet results = pstate.executeQuery();

while ( results.next() ) {

String tableName = results.getString(1);

//          if ( tableName.toLowerCase().startsWith("yy_") ) {

tables.add(tableName);

//          }

}

return tables;

}

private void processTable( String table ) {

StringBuffer sb =new StringBuffer(table.length());

String tableNew = table.toLowerCase();

String[] tables = tableNew.split("_");

String temp =null;

for (int i =1 ; i < tables.length ; i++ ) {

temp = tables[i].trim();

sb.append(temp.substring(0,1).toUpperCase()).append(temp.substring(1));

}

beanName = sb.toString();

mapperName = beanName +"Mapper";

}

private String processType( String type ) {

if ( type.indexOf(type_char) > -1 ) {

return "String";

}else if ( type.indexOf(type_bigint) > -1 ) {

return "Long";

}else if ( type.indexOf(type_int) > -1 ) {

return "Integer";

}else if ( type.indexOf(type_date) > -1 ) {

return "java.util.Date";

}else if ( type.indexOf(type_text) > -1 ) {

return "String";

}else if ( type.indexOf(type_timestamp) > -1 ) {

return "java.util.Date";

}else if ( type.indexOf(type_bit) > -1 ) {

return "Boolean";

}else if ( type.indexOf(type_decimal) > -1 ) {

return "java.math.BigDecimal";

}else if ( type.indexOf(type_blob) > -1 ) {

return "byte[]";

}

return null;

}

private String processField( String field ) {

StringBuffer sb =new StringBuffer(field.length());

//field = field.toLowerCase();

String[] fields = field.split("_");

String temp =null;

sb.append(fields[0]);

for (int i =1 ; i < fields.length ; i++ ) {

temp = fields[i].trim();

sb.append(temp.substring(0,1).toUpperCase()).append(temp.substring(1));

}

return sb.toString();

}

/**

*  将实体类名首字母改为小写

*

* @param beanName

* @return

*/

private String processResultMapId( String beanName ) {

return beanName.substring(0,1).toLowerCase() + beanName.substring(1);

}

/**

*  构建类上面的注释

*

* @param bw

* @param text

* @return

* @throws IOException

*/

private BufferedWriter buildClassComment( BufferedWriter bw, String text )throws IOException {

bw.newLine();

bw.newLine();

bw.write("/**");

bw.newLine();

bw.write(" * ");

bw.newLine();

bw.write(" * " + text);

bw.newLine();

bw.write(" * ");

bw.newLine();

bw.write(" **/");

return bw;

}

/**

*  构建方法上面的注释

*

* @param bw

* @param text

* @return

* @throws IOException

*/

private BufferedWriter buildMethodComment( BufferedWriter bw, String text )throws IOException {

bw.newLine();

bw.write("\t/**");

bw.newLine();

bw.write("\t * ");

bw.newLine();

bw.write("\t * " + text);

bw.newLine();

bw.write("\t * ");

bw.newLine();

bw.write("\t **/");

return bw;

}

/**

*  生成实体类

*

* @param columns

* @param types

* @param comments

* @throws IOException

*/

private void buildEntityBean( List columns, List types, List comments, String tableComment )

throws IOException {

File folder =new File(bean_path);

if ( !folder.exists() ) {

folder.mkdir();

}

File beanFile =new File(bean_path, beanName +".java");

BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(new FileOutputStream(beanFile)));

bw.write("package " + bean_package +";");

bw.newLine();

bw.write("import java.io.Serializable;");

bw.newLine();

//bw.write("import lombok.Data;");

//      bw.write("import javax.persistence.Entity;");

bw = buildClassComment(bw, tableComment);

bw.newLine();

bw.write("@SuppressWarnings(\"serial\")");

bw.newLine();

//      bw.write("@Entity");

//bw.write("@Data");

//bw.newLine();

bw.write("public class " + beanName +" implements Serializable {");

bw.newLine();

bw.newLine();

int size = columns.size();

for (int i =0 ; i < size ; i++ ) {

bw.write("\t/**" + comments.get(i) +"**/");

bw.newLine();

bw.write("\tprivate " + processType(types.get(i)) +" " + processField(columns.get(i)) +";");

bw.newLine();

bw.newLine();

}

bw.newLine();

// 生成get 和 set方法

String tempField =null;

String _tempField =null;

String tempType =null;

for (int i =0 ; i < size ; i++ ) {

tempType = processType(types.get(i));

_tempField = processField(columns.get(i));

tempField = _tempField.substring(0,1).toUpperCase() + _tempField.substring(1);

bw.newLine();

//          bw.write("\tpublic void set" + tempField + "(" + tempType + " _" + _tempField + "){");

bw.write("\tpublic void set" + tempField +"(" + tempType +" " + _tempField +"){");

bw.newLine();

//          bw.write("\t\tthis." + _tempField + "=_" + _tempField + ";");

bw.write("\t\tthis." + _tempField +" = " + _tempField +";");

bw.newLine();

bw.write("\t}");

bw.newLine();

bw.newLine();

bw.write("\tpublic " + tempType +" get" + tempField +"(){");

bw.newLine();

bw.write("\t\treturn this." + _tempField +";");

bw.newLine();

bw.write("\t}");

bw.newLine();

}

bw.newLine();

bw.write("}");

bw.newLine();

bw.flush();

bw.close();

}

/**

*  构建Mapper文件

*

* @throws IOException

*/

private void buildMapper()throws IOException {

File folder =new File(mapper_path);

if ( !folder.exists() ) {

folder.mkdirs();

}

File mapperFile =new File(mapper_path, mapperName +".java");

BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(new FileOutputStream(mapperFile),"utf-8"));

bw.write("package " + mapper_package +";");

bw.newLine();

bw.newLine();

bw.write("import " + bean_package +"." + beanName +";");

bw.newLine();

bw.write("import org.apache.ibatis.annotations.Param;");

bw = buildClassComment(bw, mapperName +"数据库操作接口类");

bw.newLine();

bw.newLine();

//      bw.write("public interface " + mapperName + " extends " + mapper_extends + " {");

bw.write("public interface " + mapperName +"{");

bw.newLine();

bw.newLine();

// ----------定义Mapper中的方法Begin----------

bw = buildMethodComment(bw,"查询(根据主键ID查询)");

bw.newLine();

bw.write("\t" + beanName +"  selectByPrimaryKey ( @Param(\"id\") Long id );");

bw.newLine();

bw = buildMethodComment(bw,"删除(根据主键ID删除)");

bw.newLine();

bw.write("\t" +"int deleteByPrimaryKey ( @Param(\"id\") Long id );");

bw.newLine();

bw = buildMethodComment(bw,"添加");

bw.newLine();

bw.write("\t" +"int insert( " + beanName +" record );");

bw.newLine();

bw = buildMethodComment(bw,"添加 (匹配有值的字段)");

bw.newLine();

bw.write("\t" +"int insertSelective( " + beanName +" record );");

bw.newLine();

bw = buildMethodComment(bw,"修改 (匹配有值的字段)");

bw.newLine();

bw.write("\t" +"int updateByPrimaryKeySelective( " + beanName +" record );");

bw.newLine();

bw = buildMethodComment(bw,"修改(根据主键ID修改)");

bw.newLine();

bw.write("\t" +"int updateByPrimaryKey ( " + beanName +" record );");

bw.newLine();

// ----------定义Mapper中的方法End----------

bw.newLine();

bw.write("}");

bw.flush();

bw.close();

}

/**

*  构建实体类映射XML文件

*

* @param columns

* @param types

* @param comments

* @throws IOException

*/

private void buildMapperXml( List columns, List types, List comments )throws IOException {

File folder =new File(xml_path);

if ( !folder.exists() ) {

folder.mkdirs();

}

File mapperXmlFile =new File(xml_path, mapperName +".xml");

BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(new FileOutputStream(mapperXmlFile)));

bw.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

bw.newLine();

bw.write(""-//mybatis.org//DTD Mapper 3.0//EN\" ");

bw.newLine();

bw.write("    \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">");

bw.newLine();

bw.write("");

bw.newLine();

bw.newLine();

/*bw.write("\t");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.write("\t\t");

bw.newLine();

bw.write("\t\t");

bw.newLine();

int size = columns.size();

for ( int i = 1 ; i < size ; i++ ) {

bw.write("\t\t");

bw.newLine();

bw.write("\t\t

+ this.processField(columns.get(i)) + "\" column=\"" + columns.get(i) + "\" />");

bw.newLine();

}

bw.write("\t");

bw.newLine();

bw.newLine();

bw.newLine();*/

// 下面开始写SqlMapper中的方法

// this.outputSqlMapperMethod(bw, columns, types);

buildSQL(bw, columns, types);

bw.write("");

bw.flush();

bw.close();

}

private void buildSQL( BufferedWriter bw, List columns, List types )throws IOException {

int size = columns.size();

// 通用结果列

bw.write("\t");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.write("\t\t id,");

for (int i =1 ; i < size ; i++ ) {

bw.write("\t" + columns.get(i));

if ( i != size -1 ) {

bw.write(",");

}

}

bw.newLine();

bw.write("\t");

bw.newLine();

bw.newLine();

// 查询(根据主键ID查询)

bw.write("\t");

bw.newLine();

bw.write("\t

+ processResultMapId(beanName) +"\" parameterType=\"java.lang." + processType(types.get(0)) +"\">");

bw.newLine();

bw.write("\t\t SELECT");

bw.newLine();

bw.write("\t\t ");

bw.newLine();

bw.write("\t\t FROM " + tableName);

bw.newLine();

bw.write("\t\t WHERE " + columns.get(0) +" = #{" + processField(columns.get(0)) +"}");

bw.newLine();

bw.write("\t

");

bw.newLine();

bw.newLine();

// 查询完

// 删除(根据主键ID删除)

bw.write("\t");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.write("\t\t DELETE FROM " + tableName);

bw.newLine();

bw.write("\t\t WHERE " + columns.get(0) +" = #{" + processField(columns.get(0)) +"}");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.newLine();

// 删除完

// 添加insert方法

bw.write("\t");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.write("\t\t INSERT INTO " + tableName);

bw.newLine();

bw.write(" \t\t(");

for (int i =0 ; i < size ; i++ ) {

bw.write(columns.get(i));

if ( i != size -1 ) {

bw.write(",");

}

}

bw.write(") ");

bw.newLine();

bw.write("\t\t VALUES ");

bw.newLine();

bw.write(" \t\t(");

for (int i =0 ; i < size ; i++ ) {

bw.write("#{" + processField(columns.get(i)) +"}");

if ( i != size -1 ) {

bw.write(",");

}

}

bw.write(") ");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.newLine();

// 添加insert完

//---------------  insert方法(匹配有值的字段)

bw.write("\t");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.write("\t\t INSERT INTO " + tableName);

bw.newLine();

bw.write("\t\t ");

bw.newLine();

String tempField =null;

for (int i =0 ; i < size ; i++ ) {

tempField = processField(columns.get(i));

bw.write("\t\t\t");

bw.newLine();

bw.write("\t\t\t\t " + columns.get(i) +",");

bw.newLine();

bw.write("\t\t\t");

bw.newLine();

}

bw.newLine();

bw.write("\t\t ");

bw.newLine();

bw.write("\t\t ");

bw.newLine();

tempField =null;

for (int i =0 ; i < size ; i++ ) {

tempField = processField(columns.get(i));

bw.write("\t\t\t");

bw.newLine();

bw.write("\t\t\t\t #{" + tempField +"},");

bw.newLine();

bw.write("\t\t\t");

bw.newLine();

}

bw.write("\t\t ");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.newLine();

//---------------  完毕

// 修改update方法

bw.write("\t");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.write("\t\t UPDATE " + tableName);

bw.newLine();

bw.write(" \t\t ");

bw.newLine();

tempField =null;

for (int i =1 ; i < size ; i++ ) {

tempField = processField(columns.get(i));

bw.write("\t\t\t");

bw.newLine();

bw.write("\t\t\t\t " + columns.get(i) +" = #{" + tempField +"},");

bw.newLine();

bw.write("\t\t\t");

bw.newLine();

}

bw.newLine();

bw.write(" \t\t ");

bw.newLine();

bw.write("\t\t WHERE " + columns.get(0) +" = #{" + processField(columns.get(0)) +"}");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.newLine();

// update方法完毕

// ----- 修改(匹配有值的字段)

bw.write("\t");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.write("\t\t UPDATE " + tableName);

bw.newLine();

bw.write("\t\t SET ");

bw.newLine();

tempField =null;

for (int i =1 ; i < size ; i++ ) {

tempField = processField(columns.get(i));

bw.write("\t\t\t " + columns.get(i) +" = #{" + tempField +"}");

if ( i != size -1 ) {

bw.write(",");

}

bw.newLine();

}

bw.write("\t\t WHERE " + columns.get(0) +" = #{" + processField(columns.get(0)) +"}");

bw.newLine();

bw.write("\t");

bw.newLine();

bw.newLine();

}

/**

*  获取所有的数据库表注释

*

* @return

* @throws SQLException

*/

private Map getTableComment()throws SQLException {

Map maps =new HashMap();

PreparedStatement pstate = conn.prepareStatement("show table status");

ResultSet results = pstate.executeQuery();

while ( results.next() ) {

String tableName = results.getString("NAME");

String comment = results.getString("COMMENT");

maps.put(tableName, comment);

}

return maps;

}

public void generate()throws ClassNotFoundException, SQLException, IOException {

init();

String prefix ="show full fields from ";

List columns =null;

List types =null;

List comments =null;

PreparedStatement pstate =null;

List tables = getTables();

Map tableComments = getTableComment();

for ( String table : tables ) {

columns =new ArrayList();

types =new ArrayList();

comments =new ArrayList();

pstate = conn.prepareStatement(prefix + table);

ResultSet results = pstate.executeQuery();

while ( results.next() ) {

columns.add(results.getString("FIELD"));

types.add(results.getString("TYPE"));

comments.add(results.getString("COMMENT"));

}

tableName = table;

processTable(table);

//          this.outputBaseBean();

String tableComment = tableComments.get(tableName);

buildEntityBean(columns, types, comments, tableComment);

buildMapper();

buildMapperXml(columns, types, comments);

}

conn.close();

}

public static void main( String[] args ) {

try {

new EntityUtil().generate();

// 自动打开生成文件的目录

Runtime.getRuntime().exec("cmd /c start explorer D:\\");

}catch ( ClassNotFoundException e ) {

e.printStackTrace();

}catch ( SQLException e ) {

e.printStackTrace();

}catch ( IOException e ) {

e.printStackTrace();

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值