`

mysql数据库自动生成对应的java实体类和ibatis配置文件

阅读更多

package db.tool;

import java.io.File;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

public class Run {

 public final static String projectPath = "E:\\w\\b\\";
 public final static String entityPackageName = "com.entities";
 public final static String configPackageName = "com.config";
 public final static String dbDriver = "com.mysql.jdbc.Driver";
 public final static String dbURL = "jdbc:mysql://127.0.0.1/businessprocess?useUnicode=true&characterEncoding=UTF-8";
 public final static String dbUser = "root";
 public final static String dbPass = "root";

 public static void main(String[] args) throws Exception {
  Run _i_run = new Run();
  File _v_folder = new File(projectPath + "src\\"
    + entityPackageName.replace(".", "\\\\"));
  if (!_v_folder.exists())
   _v_folder.mkdirs();
  _v_folder = new File(projectPath + "src\\"
    + configPackageName.replace(".", "\\\\"));
  if (!_v_folder.exists())
   _v_folder.mkdirs();
  List<String> _v_tableNameList = _i_run._m_getDbTableNameList();
  File _v_sqlMapFile = new File(projectPath + "src\\\\autoSqlMap.xml");
  if (!_v_sqlMapFile.exists())
   _v_sqlMapFile.createNewFile();
  PrintWriter _v_fw = new PrintWriter(_v_sqlMapFile, "UTF-8");
  _v_fw.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
    + "<!DOCTYPE sqlMapConfig PUBLIC"
    + " \"-//ibatis.apache.org//DTD SQL Map Config 2.0//EN\""
    + " \"http://ibatis.apache.org/dtd/sql-map-config-2.dtd\">"
    + "\r\n\r\n<sqlMapConfig>\r\n\r\n\t<settings cacheModelsEnabled=\"true\" />");
  for (String _v_tblName : _v_tableNameList) {
   _v_fw.println("\t<sqlMap resource=\""
     + configPackageName.replace(".", "/") + "/"
     + _v_tblName.toLowerCase() + ".xml\" />");
   _v_tblName = _i_run._m_firstToUpperCase(_v_tblName);
   System.out.println("table name:" + _v_tblName);
   _i_run._m_packEntityAndConfig(_v_tblName);
  }
  _v_fw.println("\r\n</sqlMapConfig>");
  _v_fw.flush();
  _v_fw.close();
 }

 /**
  * 打包实体类和配置文件
  *
  * @param _v_tblName
  *            数据表名称
  * @throws Exception
  *             exception
  */
 protected void _m_packEntityAndConfig(String _v_tblName) throws Exception {
  Fields[] _v_fields = _m_getFields(_v_tblName);
  String _v_xmlName = _v_tblName.toLowerCase();
  String _v_fullClsName = entityPackageName + "." + _v_tblName;
  // 打包实体类 start //////////////////////////////
  File _v_jFile = new File(projectPath + "src\\"
    + entityPackageName.replace(".", "\\\\") + "\\\\" + _v_tblName
    + ".java");
  if (!_v_jFile.exists())
   _v_jFile.createNewFile();
  PrintWriter _v_fw = new PrintWriter(_v_jFile, "UTF-8");
  _v_fw.println("package " + entityPackageName + ";\n");
  _v_fw.println("public class "
    + _v_tblName
    + " implements com.shareisvalue.framework.BasicEntity,java.io.Serializable {\n");
  _v_fw.println("\tprivate static final long serialVersionUID=1L;");
  for (Fields _v_f : _v_fields)
   _v_fw.println("\tprotected " + _v_f.getJavaType() + " "
     + _m_toAttributeString(_v_f.getName()) + " = null;");
  _v_fw.println("\n\tpublic " + _v_tblName + "() { }\n"); // 构造函数
  _v_fw.println("\tpublic String getTableName() {"); // 构造函数
  _v_fw.println("\t\treturn \"" + _v_xmlName + "\";");
  _v_fw.println("\t}\n");
  for (Fields _v_f : _v_fields) {
   String _v_jType = _v_f.getJavaType();
   String _v_sgName = _m_firstToUpperCase(_v_f.getName());
   String _v_fName = _m_toAttributeString(_v_f.getName());
   _v_fw.println("\tpublic " + _v_jType + " get" + _v_sgName + "() {");
   _v_fw.println("\t\treturn " + _v_fName + ";");
   _v_fw.println("\t}\n");
   _v_fw.println("\tpublic void set" + _v_sgName + "(" + _v_jType
     + " " + _v_fName + ") {");
   _v_fw.println("\t\t this." + _v_fName + " = " + _v_fName + ";");
   _v_fw.println("\t}\n");
  }
  _v_fw.println("}");
  _v_fw.flush();
  _v_fw.close();
  // 打包实体类 end //////////////////////////////

  // 打包sql xml文件 start //////////////////////////////
  _v_jFile = new File(projectPath + "src\\"
    + configPackageName.replace(".", "\\\\") + "\\\\" + _v_xmlName
    + ".xml");
  if (!_v_jFile.exists())
   _v_jFile.createNewFile();
  _v_fw = new PrintWriter(_v_jFile, "UTF-8");
  _v_fw.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"
    + "<!DOCTYPE sqlMap PUBLIC \"-//ibatis.apache.org//DTD SQL Map 2.0//EN\""
    + " \"http://ibatis.apache.org/dtd/sql-map-2.dtd\">\r\n\r\n<sqlMap>\r\n");
  // === select all record ===
  String _v_content = "\t<select id=\"selectAllRecord." + _v_xmlName
    + "\" resultClass=\"" + _v_fullClsName
    + "\">\r\n\t\tSELECT * FROM " + _v_xmlName
    + " \r\n\t</select>\n";
  _v_fw.println(_v_content);
  // === select by primary key ===
  String _v_pkColName = _m_toAttributeString(_m_getPrimaryKeyColumn(_v_fields));
  if (_v_pkColName != null) {
   _v_content = "\t<select id=\"selectRecordByPKId." + _v_xmlName
     + "\" resultClass=\"" + _v_fullClsName
     + "\">\r\n\t\tSELECT * FROM " + _v_xmlName + " WHERE "
     + _v_pkColName + " = #" + _v_pkColName
     + "# \r\n\t</select>\r\n";
   _v_fw.println(_v_content);
  }
  // === insert record ===
  _v_content = "\t<insert id=\"insertRecord." + _v_xmlName
    + "\"\r\n\t\tparameterClass=\"" + _v_fullClsName + "\">\r\n"
    + "\t\tINSERT INTO " + _v_xmlName
    + " \r\n\t\t<dynamic prepend=\"(\">";
  for (Fields _v_fd : _v_fields) {
   _v_content += "\r\n\t\t\t<isNotEmpty property=\""
     + _m_toAttributeString(_v_fd.getName())
     + "\" prepend=\",\">" + _v_fd.getName() + "</isNotEmpty>";
  }
  _v_content += "\r\n\t\t\t)\r\n\t\t</dynamic> \r\n\t\tVALUES \r\n\t\t<dynamic prepend=\"(\">";
  for (Fields _v_fd : _v_fields) {
   _v_content += "\r\n\t\t\t<isNotEmpty property=\""
     + _m_toAttributeString(_v_fd.getName())
     + "\" prepend=\",\">#"
     + _m_toAttributeString(_v_fd.getName()) + "#</isNotEmpty>";
  }
  _v_content += "\r\n\t\t\t)\r\n\t\t</dynamic>\r\n";
  if (_v_pkColName != null)
   _v_content += "\t\t<selectKey resultClass=\"Integer\" keyProperty=\""
     + _v_pkColName
     + "\">\r\n\t\t\tSELECT LAST_INSERT_ID() AS ID\r\n\t\t</selectKey>\r\n";
  _v_content += "\t</insert>";
  _v_fw.println(_v_content);
  // === update record ===
  if (_v_pkColName != null) {
   _v_content = "\r\n\t<update id=\"updateRecord." + _v_xmlName
     + "\" parameterClass=\"" + _v_fullClsName + "\">\r\n"
     + "\t\tUPDATE " + _v_xmlName
     + "\r\n\t\t<dynamic prepend=\"SET\">";
   for (Fields _v_fd : _v_fields) {
    if (!_v_pkColName.equals(_v_fd.getName()))
     _v_content += "\r\n\t\t\t<isNotEmpty property=\""
       + _m_toAttributeString(_v_fd.getName())
       + "\" prepend=\",\">" + _v_fd.getName() + " = #"
       + _m_toAttributeString(_v_fd.getName())
       + "#</isNotEmpty>";
   }
   _v_content += "\r\n\t\t</dynamic>\r\n\t\t<dynamic prepend=\"WHERE\">\r\n\t\t\t<isNotEmpty property=\""
     + _v_pkColName
     + "\">"
     + _v_pkColName
     + " = #"
     + _v_pkColName
     + "#</isNotEmpty>\r\n\t\t</dynamic>\r\n\t</update>";
   _v_fw.println(_v_content);
  }
  // === delete record ===
  if (_v_pkColName != null) {
   _v_content = "\r\n\t<delete id=\"deleteRecordPKId." + _v_xmlName
     + "\" parameterClass=\"" + _v_fullClsName
     + "\">\r\n\t\tDELETE FROM " + _v_xmlName + " WHERE "
     + _v_pkColName + " = #" + _v_pkColName + "#\r\n\t</delete>";
   _v_fw.println(_v_content);
  }
  _v_fw.println("\r\n</sqlMap>");
  _v_fw.flush();
  _v_fw.close();
  // 打包sql xml文件 end //////////////////////////////
 }

 /**
  * 获取主键
  *
  * @param fields
  *            数据库字段集合
  * @return 主键
  */
 protected String _m_getPrimaryKeyColumn(Fields[] fields) {
  String pkName = null;
  for (int i = 0; i < fields.length; i++)
   if (fields[i].isPrimaryKey()) {
    pkName = fields[i].getName();
    break;
   }
  return pkName;
 }

 /**
  * 前两位小写
  *
  * @param _p_attr
  *            字符串
  * @return 前两位小写字符串
  */
 protected String _m_toAttributeString(String _p_attr) {
  if (_p_attr == null)
   return null;
  char[] _v_charArray = _p_attr.toCharArray();
  if (_v_charArray.length > 0) {
   _v_charArray[0] = Character.toLowerCase(_v_charArray[0]);
   if (_v_charArray.length > 1)
    _v_charArray[1] = Character.toLowerCase(_v_charArray[1]);
  }
  return new String(_v_charArray);
 }

 /**
  * 首字母大写
  *
  * @param _p_String
  *            字符串
  * @return 首字母大写字符串
  */
 protected String _m_firstToUpperCase(String _p_String) {
  if (_p_String == null)
   return null;
  char[] _v_charArray = _p_String.toCharArray();
  if (_v_charArray.length > 0)
   _v_charArray[0] = Character.toUpperCase(_v_charArray[0]);
  return new String(_v_charArray);
 }

 /**
  * 获取数据库表对应的数据库字段
  *
  * @param tableName
  *            数据库表
  * @return 字段对象集合
  * @throws Exception
  *             exception
  */
 protected Fields[] _m_getFields(String tableName) throws Exception {
  Connection conn = null;
  PreparedStatement stmt = null;
  Fields[] fields = null;
  conn = _m_getConnection();
  ResultSet rs1 = conn.getMetaData()
    .getPrimaryKeys(null, null, tableName);
  String primaryKey = null;
  while (rs1.next()) {
   primaryKey = rs1.getString(4);
  }
  stmt = conn.prepareStatement("select * from " + tableName);
  ResultSet rs = stmt.executeQuery();
  ResultSetMetaData md = rs.getMetaData();
  int colCount = md.getColumnCount();
  fields = new Fields[colCount];
  for (int i = 0; i < fields.length; i++) {
   String colName = md.getColumnName(i + 1);
   String colType = md.getColumnTypeName(i + 1);
   boolean isPK = colName.equals(primaryKey);
   fields[i] = new Fields(colName, colType, isPK);
   fields[i].setAutoIncrease(md.isAutoIncrement(i + 1));
   fields[i].setJavaType(md.getColumnClassName(i + 1));
  }
  if (stmt != null)
   stmt.close();
  if (conn != null)
   conn.close();
  return fields;
 }

 /**
  * 获取数据库表名称集合
  *
  * @return 数据库表名称集合
  * @throws Exception
  *             exception
  */
 protected List<String> _m_getDbTableNameList() throws Exception {
  List<String> _v_tableNameList = new ArrayList<String>();
  Connection conn = null;
  PreparedStatement stmt = null;
  ResultSet rs = null;
  conn = _m_getConnection();
  stmt = conn.prepareStatement("show tables");
  rs = stmt.executeQuery();
  while (rs.next())
   _v_tableNameList.add(rs.getString(1));
  if (stmt != null)
   stmt.close();
  if (conn != null)
   conn.close();
  if (rs != null)
   rs.close();
  return _v_tableNameList;
 }

 protected Connection _m_getConnection() throws Exception {
  Class.forName(dbDriver);
  Connection conn = DriverManager.getConnection(dbURL, dbUser, dbPass);
  return conn;
 }

}

class Fields {

 public String name = null;
 public String type = null;
 public boolean primaryKey = false;
 public boolean autoIncrease = false;
 public String javaType = null;

 public Fields(String name, String type, boolean primaryKey) {
  this.name = name;
  this.type = type;
  this.primaryKey = primaryKey;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public boolean isPrimaryKey() {
  return primaryKey;
 }

 public void setPrimaryKey(boolean primaryKey) {
  this.primaryKey = primaryKey;
 }

 public String getType() {
  return type;
 }

 public void setType(String type) {
  this.type = type;
 }

 public boolean isAutoIncrease() {
  return autoIncrease;
 }

 public void setAutoIncrease(boolean autoIncrease) {
  this.autoIncrease = autoIncrease;
 }

 public String getJavaType() {
  return javaType;
 }

 public void setJavaType(String javaType) {
  this.javaType = javaType;
 }
}

  • db.rar (3.1 KB)
  • 下载次数: 6
分享到:
评论

相关推荐

    自动生成ibatis 实体类文件

    标题“自动生成iBatis 实体类文件”表明我们要讨论的是如何利用MBG来自动化创建与数据库表对应的企业级Java实体类,从而提高开发效率并减少手动编码的错误。 描述中的“只需要修改数据库名称和表名即可,能更加有效...

    MyBatis自动生成实体类、DAO接口和Mapping映射文件的代码(逆向工程)

    它可以根据数据库表结构,自动生成对应的Java实体类、DAO接口和Mapping映射文件,简化了开发人员的工作。 二、MyBatis逆向工程配置 MyBatis逆向工程的配置主要通过generatorConfiguration.xml文件进行设置。该文件...

    Mybatis自动生成实体类以及Mapper文件

    MBG是一个代码生成工具,它可以基于数据库表结构自动生成Java实体类、Mapper接口和XML配置文件。在实际开发中,当数据库表发生变化时,通过MBG可以快速更新相关的Java代码,避免手动维护这些繁琐的细节。 1. **配置...

    ibtas根据XML生成对应实体类

    总的来说,"ibtas根据XML生成对应实体类"是一个利用Java编写的工具,它根据XML配置文件自动生成与数据库表对应的Java实体类,简化了数据库操作的开发流程。通过对generator.xml的配置,开发者可以轻松适应不同类型的...

    mybatis-mysql数据库生成mybatis相关文件xml、mapper、bean

    6. **Bean类(POJO)**:根据数据库表的字段生成的Java实体类,用于表示数据库中的记录。这些类通常包含getter和setter方法,方便属性的访问和设置。 7. **Ibatis到MyBatis的演变**:Ibatis是MyBatis的前身,是一个...

    ibatis自动生成工具ibator及配置文件示例

    ibator的工作原理是通过读取用户提供的配置文件(通常为`ibatorConfig.xml`),根据配置中的数据库连接信息、表名等参数,自动生成相应的Java源代码和XML配置文件。配置文件中可以指定生成的实体类命名规则、表前缀...

    mybatis/ibatis自动生成SQLMapper脚本

    3. **实体类和表映射**: 为每个数据库表创建一个对应的Java实体类,并在配置文件中定义表名和实体类之间的映射。这有助于Generator自动生成对应字段的getter和setter方法。 4. **配置生成内容**: 指定需要生成的...

    IBatis 代码生成工具

    在映射文件中,每个表会被映射为一个Java实体类,每个字段对应实体类的一个属性,而SQL查询则根据表的结构自动生成。这不仅限于简单的CRUD操作,还可以包括复杂的联接查询和存储过程调用。 此外,该工具可能还具备...

    Spring MVC Ibatis Bean 根据mysql数据表——代码生成工具

    在实际项目中,为了提高开发效率,开发者通常会利用代码生成工具,将MySQL数据库中的数据表自动生成对应的Spring MVC Controller、Service、DAO、Entity(Bean)等代码。这种自动化流程能减少手动编写重复代码的工作...

    IDE mybatis自动生成配置和类信息(generateConfig)

    1. 配置完成后,通过运行配置,MyBatis Generator会根据`mybatis-generator.xml`中的`table`标签定义,自动生成对应数据库表的实体类、Mapper接口和XML文件。 2. 实体类(Entity):包含了数据库表字段的属性和...

    CSharp.Net项目生成器(ibatis)

    - **自动映射**: 根据数据库表结构自动生成对应的C#实体类,省去了手动创建和维护的过程。 - **SQL映射文件生成**: 生成与数据库交互的XML映射文件,包括Insert、Update、Delete、Select等操作。 - **DAL层生成**...

    Ibatis3生成器

    Ibatis3,也称为MyBatis3,是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,或者通过注解方式来映射Java对象与数据库之间的交互。生成器则是Ibatis3中的一个重要组成部分,它可以自动生成相应...

    Ibatis 2.3.4 数据库无关分页

    示例中的"ssi"可能是示例项目的名字,可能包含了一个运行起来的Ibatis 分页应用,包括了Mapper接口、XML配置文件、Java实体类、以及对应的测试用例。通过查看和运行这些示例,你可以更深入地理解如何在Ibatis 2.3.4...

    Ibatis建议代码生成器

    而这款生成器则是针对Ibatis的映射文件(xml配置文件)进行自动化生成,从而减少了手动编写这些文件的繁琐工作。 首先,我们需要理解Ibatis映射文件的作用。映射文件中包含了SQL查询、结果映射以及参数映射等关键...

    ibatis实例,mysql应用举例

    接下来,我们需要创建对应的Java实体类`User`,并建立Mapper接口,这样在Java代码中就可以通过注解或动态代理来调用这些SQL方法。 ```java public class User { private int id; private String username; ...

    spring mvc+ibatiS+mysql代码

    8. **数据库建表**:根据实体类创建MySQL数据库表,确保与iBATIS的映射一致。 9. **运行测试**:启动服务器,通过浏览器访问应用,验证功能是否正常。 通过这个"Spring MVC+iBATIS+MySQL"的DEMO,你可以深入理解这...

    struts+spring+ibatis+mysql简单的配置实例

    6. **创建实体类**:根据数据库表结构创建对应的Java实体类。 7. **配置Struts**:在`struts-config.xml`中定义Action和ActionForm,指定Action的类名和转发路径。 8. **配置Spring**:在`applicationContext.xml`中...

    为mybatis生成映射文件

    总的来说,本项目旨在利用MyBatis Generator自动化生成与MySQL数据库交互所需的Java模型类、Mapper接口和XML映射文件,简化了开发流程,提升了开发效率。对于理解和使用MyBatis框架,以及数据库驱动的Java应用开发,...

    MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

    在MyBatis的学习过程中,逆向工程(Reverse Engineering)是一个非常实用的功能,它可以自动生成基于数据库模式的Java实体类、Mapper接口及XML配置文件,极大地提高了开发效率。 逆向工程在MyBatis中的主要作用是...

Global site tag (gtag.js) - Google Analytics