自动生成实体类以及mybatis配置文件
发布日期:2021-08-21 10:50:30 浏览次数:2 分类:技术文章

本文共 15888 字,大约阅读时间需要 52 分钟。

hot3.png

 先在数据库中设计表,然后使用下面工具生成实体类和mapper,配置可根据需求自行更改

package com.xgh.educmbs.util;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;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 = "xghtestdb"; // 对应模块名称(根据自己模块做相应调整!!!务必修改^_^)    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 = "com.yunxiaoyuan." + moduleName + ".entity";    private final String mapper_package = "com.yunxiaoyuan." + moduleName + ".mapper";    private final String driverName = "com.mysql.jdbc.Driver";    private final String user = "root";    private final String password = "root";    private final String url = "jdbc:mysql://192.168.3.86: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 + "<" + beanName + "> {"); 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("
"); bw.newLine(); bw.write(""); 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
"); 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
"); 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(); } }}

 

转载于:https://my.oschina.net/u/3160411/blog/1556215

转载地址:https://blog.csdn.net/weixin_33716941/article/details/92377532 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:centos7下安装composer+laravel
下一篇:初中英语--冠词

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年03月26日 12时49分03秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章