package com.j2ee.framework.ibatis; import java.lang.reflect.Field; import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.j2ee.framework.domain.Right; /** * 根据javaBean或者数据库字段自动生成xml * * @author Tangchao * */ public class IbatisByJavaBenOrTableColumnToXml { private List<Class<?>> classz; private Map<String, String[]> tableNameToColumns = new HashMap<String, String[]>(); public static String DATABASE_MYSQL = "mysql"; public static String DATABASE_ORACLE = "oracle"; public IbatisByJavaBenOrTableColumnToXml(List<Class<?>> classz) { this.classz = classz; } public IbatisByJavaBenOrTableColumnToXml(Connection conn, String[] tableNames, String dataBase) throws SQLException { Statement st = conn.createStatement(); for (String table : tableNames) { String sql = "select * from " + table + (DATABASE_ORACLE.equals(dataBase) == true ? " where rownum=1" : "limit 0,1"); ResultSet rs = st.executeQuery(sql); ResultSetMetaData rsmd = rs.getMetaData(); tableNameToColumns.put(table, new String[rsmd.getColumnCount()]); for (int i = 1; i <= rsmd.getColumnCount(); i++) { tableNameToColumns.get(table)[i - 1] = rsmd.getColumnName(i); } rs.close(); } if (null != conn) { conn.close(); } } public String getXml() { String xml = getResultMap() + getInsert() + getSelect() + getUpdate() + getDelete(); return xml; } public String getfields() { StringBuffer sb = new StringBuffer(); if (tableNameToColumns.size() > 0) { for (String table : tableNameToColumns.keySet()) { String[] fields = tableNameToColumns.get(table); sb.append(table).append(":{"); for (String field : fields) { sb.append(field).append(","); } sb.deleteCharAt(sb.length() - 1); sb.append("}\n"); } } else { for (Class<?> class1 : classz) { Field[] fields = class1.getDeclaredFields(); sb.append(class1.getSimpleName()).append(":{"); for (Field field : fields) { sb.append(field.getName()).append(","); } sb.deleteCharAt(sb.length() - 1); sb.append("}\n"); } } System.out.println(sb.toString()); return sb.toString(); } private String getProperty(String field) { if (field.indexOf("_") > 0) { String property = field.toLowerCase(); StringBuffer newProperty = new StringBuffer(); int lastIndex = -1; for (int i = 0; i < property.length(); i++) { if (property.charAt(i) == '_') { lastIndex = i + 1; continue; } newProperty.append(lastIndex == i ? Character.toUpperCase(property.charAt(i)) : property.charAt(i)); } return newProperty.toString(); } else { return field.toLowerCase(); } } public String getResultMap() { StringBuffer sb = new StringBuffer(); sb.append("<!-- 映射 -->\n"); if (tableNameToColumns.size() > 0) { for (String table : tableNameToColumns.keySet()) { String[] fields = tableNameToColumns.get(table); sb.append("<resultMap id=\"").append(table).append(".resultMap\"").append(" class=\"").append(table) .append("\"> \n"); for (String field : fields) { sb.append("<result property=\"").append(getProperty(field)).append("\" column=\"").append(field) .append("\" />\n"); } sb.append("</resultMap>\n"); } } else { for (Class<?> class1 : classz) { Field[] fields = class1.getDeclaredFields(); sb.append("<resultMap id=\"").append(class1.getSimpleName()).append(".resultMap\"").append(" class=\"") .append(class1.getName()).append("\"> \n"); for (Field field : fields) { String name = field.getName(); sb.append("<result property=\"").append(name).append("\" column=\"").append(name.toUpperCase()) .append("\" />\n"); } sb.append("</resultMap>\n"); } } System.out.println(sb.toString()); return sb.toString(); } public String getInsert() { StringBuffer sb = new StringBuffer(); sb.append("<!-- 新增 -->\n"); if (tableNameToColumns.size() > 0) { for (String table : tableNameToColumns.keySet()) { String[] fields = tableNameToColumns.get(table); int length = fields.length - 1; sb.append("<insert id=\"insert\"").append(" parameterClass=\"").append(table).append("\"> \n"); sb.append("insert into ").append(table).append("("); for (int i = 0; i < length; i++) { sb.append(fields[i]).append(","); } sb.append(fields[length]); sb.append(")\n values ("); for (int i = 0; i < length; i++) { sb.append("#").append(getProperty(fields[i])).append("#,"); } sb.append("#").append(getProperty(fields[length])).append("#"); sb.append(")\n"); sb.append("</insert>\n"); } } else { for (Class<?> class1 : classz) { Field[] fields = class1.getDeclaredFields(); int length = fields.length - 1; sb.append("<insert id=\"insert\"").append(" parameterClass=\"").append(class1.getName()) .append("\"> \n"); sb.append("insert into ").append("t_").append(class1.getSimpleName()).append("("); for (int i = 0; i < length; i++) { sb.append(fields[i].getName().toUpperCase()).append(","); } sb.append(fields[length].getName().toUpperCase()); sb.append(")\n values ("); for (int i = 0; i < length; i++) { sb.append("#").append(fields[i].getName()).append("#,"); } sb.append("#").append(fields[length].getName()).append("#"); sb.append(")\n"); sb.append("</insert>\n"); } } System.out.println(sb.toString()); return sb.toString(); } public String getSelect() { StringBuffer sb = new StringBuffer(); sb.append("<!-- 查询 -->\n"); if (tableNameToColumns.size() > 0) { for (String table : tableNameToColumns.keySet()) { String[] fields = tableNameToColumns.get(table); int length = fields.length - 1; sb.append("<select id=\"select\"").append(" resultMap=\"").append(table).append(".resultMap\"> \n"); sb.append("select \n"); for (int i = 0; i < length; i++) { sb.append("\t").append(fields[i]).append(",\n"); } sb.append("\t").append(fields[length]).append("\n"); sb.append(" from ").append(table).append(" \n"); sb.append("<dynamic prepend=\"where\">\n"); for (String field : fields) { sb.append("<isNotEmpty property=\"").append(getProperty(field)).append("\" prepend=\"and\">\n"); sb.append(field).append(" = #").append(getProperty(field)).append("#\n"); sb.append("</isNotEmpty>\n"); } sb.append("</dynamic>\n"); sb.append("</select>\n"); } } else { for (Class<?> class1 : classz) { Field[] fields = class1.getDeclaredFields(); int length = fields.length - 1; sb.append("<select id=\"select\"").append(" resultMap=\"").append(class1.getSimpleName()) .append(".resultMap\"> \n"); sb.append("select \n"); for (int i = 0; i < length; i++) { sb.append("\t").append(fields[i].getName()).append(",\n"); } sb.append("\t").append(fields[length].getName()).append("\n"); sb.append(" from ").append("t_").append(class1.getSimpleName()).append(" \n"); sb.append("<dynamic prepend=\"where\">\n"); for (Field field : fields) { String name = field.getName(); sb.append("<isNotEmpty property=\"").append(name).append("\" prepend=\"and\">\n"); sb.append(name.toUpperCase()).append(" = #").append(name).append("#\n"); sb.append("</isNotEmpty>\n"); } sb.append("</dynamic>\n"); sb.append("</select>\n"); } } System.out.println(sb.toString()); return sb.toString(); } public String getUpdate() { StringBuffer sb = new StringBuffer(); sb.append("<!-- 修改 -->\n"); if (tableNameToColumns.size() > 0) { for (String table : tableNameToColumns.keySet()) { String[] fields = tableNameToColumns.get(table); sb.append("<update id=\"update\"").append(" parameterClass=\"").append(table).append("\"> \n"); sb.append("update ").append(table).append("\n"); sb.append("<dynamic prepend=\"set\">\n"); for (String field : fields) { sb.append("<isNotEmpty property=\"").append(getProperty(field)).append("\" prepend=\",\">\n"); sb.append(field).append(" = #").append(getProperty(field)).append("#\n"); sb.append("</isNotEmpty>\n"); } sb.append("</dynamic>\n"); sb.append("where id = 1 \n"); sb.append("</update>\n"); } } else { for (Class<?> class1 : classz) { Field[] fields = class1.getDeclaredFields(); sb.append("<update id=\"update\"").append(" parameterClass=\"").append(class1.getName()) .append("\"> \n"); sb.append("update ").append("t_").append(class1.getSimpleName()).append("\n"); sb.append("<dynamic prepend=\"set\">\n"); for (Field field : fields) { String name = field.getName(); sb.append("<isNotEmpty property=\"").append(name).append("\" prepend=\",\">\n"); sb.append(name.toUpperCase()).append(" = #").append(name).append("#\n"); sb.append("</isNotEmpty>\n"); } sb.append("</dynamic>\n"); sb.append("where id = 1 \n"); sb.append("</update>\n"); } } System.out.println(sb.toString()); return sb.toString(); } public String getDelete() { // StringBuffer sb = new StringBuffer(); sb.append("<!-- 删除 -->\n"); if (tableNameToColumns.size() > 0) { for (String table : tableNameToColumns.keySet()) { sb.append("<delete id=\"delete\" parameterClass=\"String\">\n"); sb.append("delete from" ).append(table).append(" where id = 1\n"); sb.append("</delete>\n"); } } else { for (Class<?> class1 : classz) { sb.append("<delete id=\"delete\" parameterClass=\"String\">\n"); sb.append("delete from " ).append("t_").append(class1.getSimpleName()).append(" where id = 1\n"); sb.append("</delete>\n"); } } System.out.println(sb.toString()); return sb.toString(); } public static void main(String[] args) throws SQLException { List<Class<?>> classz = new ArrayList<Class<?>>(); /* * classz.add(ConstantValue.class); classz.add(Right.class); * classz.add(SysConfig.class); classz.add(TaskBean.class); */ classz.add(Right.class); new IbatisByJavaBenOrTableColumnToXml(classz).getXml(); } }
相关推荐
本文将深入探讨一个针对Java开发者的重要工具——"根据数据库表结构生成javabean的eclipse插件"。这个免费插件允许开发者轻松地从Oracle和MySQL数据库的表结构自动生成对应的Java Bean类,大大简化了数据操作层的...
Abator是基于Maven的代码生成工具,通过简单的配置文件,可以根据数据库表自动生成JavaBean、Mapper接口、XML映射文件以及对应的Service和Controller。这样可以避免手动编写这些重复性高的代码,让开发者更专注于...
Ibatis Helper是专为Ibatis框架设计的代码生成工具,它能够根据数据库表结构快速生成Mapper接口、Mapper XML文件、Service接口、Service实现类以及DAO接口和实体类。通过简单的配置,用户可以定制生成的代码风格和...
为了解决这个问题,MyBatis提供了ibator,它是一个代码生成器,能够根据数据库表自动生成实体类、Mapper接口、Mapper XML文件以及对应的DAO层实现类,大大减轻了开发人员的工作负担。 首先,让我们了解如何安装...
标题中的“更新数据库表字段生成javabean的Eclipse插件(新)”指的是一个Eclipse开发工具的扩展,它的主要功能是自动化地根据数据库表结构生成对应的Java Bean类。这样的工具能够极大地提升开发效率,避免手动编写...
MyBatis Generator(MBG)是一个强大的代码生成器,它为MyBatis和iBATIS提供了自动生成Java源代码和XML映射文件的能力。这个工具极大地简化了开发过程,减少了手动编写重复的 CRUD(创建、读取、更新、删除)操作...
通过上述解析,我们可以看出ibatis配置文件在ibatis框架中的核心地位,它不仅定义了数据源和事务管理策略,还指定了SQL映射文件的位置,使得ibatis能够根据配置正确地执行SQL语句,完成数据库操作。
在iBATIS 的理论体系中,SQL Maps是核心组件,它们通过XML文件定义了JavaBean与SQL语句之间的映射,使得数据库操作的代码大大简化。SQL Maps的优势在于其简洁性,能够清晰地分离SQL代码,提高代码的可读性和可维护性...
虽然 Hibernate 自动化程度更高,但在某些情况下,如频繁的数据库字段修改,iBATIS 的维护成本更低。同时,iBATIS 的 SQL 存储在独立文件中,有利于团队协作和后期维护。 iBATIS 的工作流程如下: 1. 接收对象参数...
Ibatis会自动将接口方法与XML配置文件中的SQL绑定。 5. **SQL执行** 通过`SqlSession`执行SQL操作。首先获取`SqlSession`实例,然后调用其`selectOne`, `insert`, `update`, `delete`等方法,传入SQL ID和参数。...
ibatis可以非常简单地将接口及简单的XML文件映射成数据库操作,它非常小巧且功能强大。 #### 三、问题背景 在ibatis中,默认情况下每个SQL映射只能有一个输入参数。但实际开发过程中,我们经常需要处理多个输入...
iBATIS,作为一款开源的持久层框架,其前身称为SQL Maps,主要功能是实现Java对象与数据库操作的映射,使得开发人员能够通过简单的配置文件或者注解来进行数据库交互,而无需编写复杂的JDBC代码。本文将基于给定的...
`params`是传入的参数,可以是Map或者JavaBean。 另外,iBatis还支持结果映射,可以将查询结果自动转换为Java对象。在Mapper XML文件中,我们可以通过`<resultMap>`标签定义结果映射,指定字段与Java属性的对应关系...
iBATIS是一个轻量级的数据访问框架,它允许开发者将SQL语句直接写在XML配置文件中,从而实现对象与数据库的映射。 在开始使用iBATIS之前,首先理解SQL Map架构的灵活性至关重要。它并不限制数据库模型或对象模型的...
"sequence.sql"可能是一个数据库脚本,通常用于创建序列,序列在关系型数据库中常用于生成唯一的ID,比如在主键字段上。在Oracle数据库中,序列是自增ID的一种常见实现方式,而在MySQL或PostgreSQL等数据库中,可能...
实体类是JavaBean模式,通常用于ORM(对象关系映射)框架,如iBatis,来映射数据库表中的记录。 接着,我们看到`UserInfo.xml`,这是一个iBatis的映射文件,其中定义了SQL语句。`<mapper>`元素的`namespace`属性值...
iBatis的配置文件支持`<iterate>`标签,该标签用于在XML映射文件中进行循环处理。 **2.1 情况一:多个输入参数循环次数不对称** 在这种情况下,如果某些参数只有一份,而其他参数有多份,可以通过创建一个新的...
- **自动生成的主键**:支持自动为主键字段生成唯一值。 - **存储过程**:支持调用数据库中的存储过程。 - **parameterClass**:指定传递给 SQL 语句的参数类型。 - **parameterMap**:更复杂的参数映射机制,...