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;
}
}
相关推荐
标题“自动生成iBatis 实体类文件”表明我们要讨论的是如何利用MBG来自动化创建与数据库表对应的企业级Java实体类,从而提高开发效率并减少手动编码的错误。 描述中的“只需要修改数据库名称和表名即可,能更加有效...
它可以根据数据库表结构,自动生成对应的Java实体类、DAO接口和Mapping映射文件,简化了开发人员的工作。 二、MyBatis逆向工程配置 MyBatis逆向工程的配置主要通过generatorConfiguration.xml文件进行设置。该文件...
MBG是一个代码生成工具,它可以基于数据库表结构自动生成Java实体类、Mapper接口和XML配置文件。在实际开发中,当数据库表发生变化时,通过MBG可以快速更新相关的Java代码,避免手动维护这些繁琐的细节。 1. **配置...
总的来说,"ibtas根据XML生成对应实体类"是一个利用Java编写的工具,它根据XML配置文件自动生成与数据库表对应的Java实体类,简化了数据库操作的开发流程。通过对generator.xml的配置,开发者可以轻松适应不同类型的...
6. **Bean类(POJO)**:根据数据库表的字段生成的Java实体类,用于表示数据库中的记录。这些类通常包含getter和setter方法,方便属性的访问和设置。 7. **Ibatis到MyBatis的演变**:Ibatis是MyBatis的前身,是一个...
ibator的工作原理是通过读取用户提供的配置文件(通常为`ibatorConfig.xml`),根据配置中的数据库连接信息、表名等参数,自动生成相应的Java源代码和XML配置文件。配置文件中可以指定生成的实体类命名规则、表前缀...
3. **实体类和表映射**: 为每个数据库表创建一个对应的Java实体类,并在配置文件中定义表名和实体类之间的映射。这有助于Generator自动生成对应字段的getter和setter方法。 4. **配置生成内容**: 指定需要生成的...
在映射文件中,每个表会被映射为一个Java实体类,每个字段对应实体类的一个属性,而SQL查询则根据表的结构自动生成。这不仅限于简单的CRUD操作,还可以包括复杂的联接查询和存储过程调用。 此外,该工具可能还具备...
在实际项目中,为了提高开发效率,开发者通常会利用代码生成工具,将MySQL数据库中的数据表自动生成对应的Spring MVC Controller、Service、DAO、Entity(Bean)等代码。这种自动化流程能减少手动编写重复代码的工作...
1. 配置完成后,通过运行配置,MyBatis Generator会根据`mybatis-generator.xml`中的`table`标签定义,自动生成对应数据库表的实体类、Mapper接口和XML文件。 2. 实体类(Entity):包含了数据库表字段的属性和...
- **自动映射**: 根据数据库表结构自动生成对应的C#实体类,省去了手动创建和维护的过程。 - **SQL映射文件生成**: 生成与数据库交互的XML映射文件,包括Insert、Update、Delete、Select等操作。 - **DAL层生成**...
Ibatis3,也称为MyBatis3,是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,或者通过注解方式来映射Java对象与数据库之间的交互。生成器则是Ibatis3中的一个重要组成部分,它可以自动生成相应...
示例中的"ssi"可能是示例项目的名字,可能包含了一个运行起来的Ibatis 分页应用,包括了Mapper接口、XML配置文件、Java实体类、以及对应的测试用例。通过查看和运行这些示例,你可以更深入地理解如何在Ibatis 2.3.4...
而这款生成器则是针对Ibatis的映射文件(xml配置文件)进行自动化生成,从而减少了手动编写这些文件的繁琐工作。 首先,我们需要理解Ibatis映射文件的作用。映射文件中包含了SQL查询、结果映射以及参数映射等关键...
接下来,我们需要创建对应的Java实体类`User`,并建立Mapper接口,这样在Java代码中就可以通过注解或动态代理来调用这些SQL方法。 ```java public class User { private int id; private String username; ...
8. **数据库建表**:根据实体类创建MySQL数据库表,确保与iBATIS的映射一致。 9. **运行测试**:启动服务器,通过浏览器访问应用,验证功能是否正常。 通过这个"Spring MVC+iBATIS+MySQL"的DEMO,你可以深入理解这...
6. **创建实体类**:根据数据库表结构创建对应的Java实体类。 7. **配置Struts**:在`struts-config.xml`中定义Action和ActionForm,指定Action的类名和转发路径。 8. **配置Spring**:在`applicationContext.xml`中...
总的来说,本项目旨在利用MyBatis Generator自动化生成与MySQL数据库交互所需的Java模型类、Mapper接口和XML映射文件,简化了开发流程,提升了开发效率。对于理解和使用MyBatis框架,以及数据库驱动的Java应用开发,...
在MyBatis的学习过程中,逆向工程(Reverse Engineering)是一个非常实用的功能,它可以自动生成基于数据库模式的Java实体类、Mapper接口及XML配置文件,极大地提高了开发效率。 逆向工程在MyBatis中的主要作用是...