`

ibatis自动生成xml(根据javaBean或者数据库字段)

阅读更多
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();
	}
}

 

分享到:
评论

相关推荐

    根据数据库表结构生成javabean的eclipse插件(免费)

    本文将深入探讨一个针对Java开发者的重要工具——"根据数据库表结构生成javabean的eclipse插件"。这个免费插件允许开发者轻松地从Oracle和MySQL数据库的表结构自动生成对应的Java Bean类,大大简化了数据操作层的...

    iBatis自动代码生成工具abator的演示教程

    Abator是基于Maven的代码生成工具,通过简单的配置文件,可以根据数据库表自动生成JavaBean、Mapper接口、XML映射文件以及对应的Service和Controller。这样可以避免手动编写这些重复性高的代码,让开发者更专注于...

    Ibatis/mybatis代码生成工具

    Ibatis Helper是专为Ibatis框架设计的代码生成工具,它能够根据数据库表结构快速生成Mapper接口、Mapper XML文件、Service接口、Service实现类以及DAO接口和实体类。通过简单的配置,用户可以定制生成的代码风格和...

    ibatis:使用ibator自动生成代码和配置文件

    为了解决这个问题,MyBatis提供了ibator,它是一个代码生成器,能够根据数据库表自动生成实体类、Mapper接口、Mapper XML文件以及对应的DAO层实现类,大大减轻了开发人员的工作负担。 首先,让我们了解如何安装...

    更新数据库表字段生成javabean的Eclipse插件(新)

    标题中的“更新数据库表字段生成javabean的Eclipse插件(新)”指的是一个Eclipse开发工具的扩展,它的主要功能是自动化地根据数据库表结构生成对应的Java Bean类。这样的工具能够极大地提升开发效率,避免手动编写...

    generator, A code generator for MyBatis and iBATIS..zip

    MyBatis Generator(MBG)是一个强大的代码生成器,它为MyBatis和iBATIS提供了自动生成Java源代码和XML映射文件的能力。这个工具极大地简化了开发过程,减少了手动编写重复的 CRUD(创建、读取、更新、删除)操作...

    ibatis 配置文件详解

    通过上述解析,我们可以看出ibatis配置文件在ibatis框架中的核心地位,它不仅定义了数据源和事务管理策略,还指定了SQL映射文件的位置,使得ibatis能够根据配置正确地执行SQL语句,完成数据库操作。

    ibatis教程.ppt

    在iBATIS 的理论体系中,SQL Maps是核心组件,它们通过XML文件定义了JavaBean与SQL语句之间的映射,使得数据库操作的代码大大简化。SQL Maps的优势在于其简洁性,能够清晰地分离SQL代码,提高代码的可读性和可维护性...

    ibatis教程 入门教程

    虽然 Hibernate 自动化程度更高,但在某些情况下,如频繁的数据库字段修改,iBATIS 的维护成本更低。同时,iBATIS 的 SQL 存储在独立文件中,有利于团队协作和后期维护。 iBATIS 的工作流程如下: 1. 接收对象参数...

    ibatis的增删改查

    Ibatis会自动将接口方法与XML配置文件中的SQL绑定。 5. **SQL执行** 通过`SqlSession`执行SQL操作。首先获取`SqlSession`实例,然后调用其`selectOne`, `insert`, `update`, `delete`等方法,传入SQL ID和参数。...

    ibatis的多参数查询.doc

    ibatis可以非常简单地将接口及简单的XML文件映射成数据库操作,它非常小巧且功能强大。 #### 三、问题背景 在ibatis中,默认情况下每个SQL映射只能有一个输入参数。但实际开发过程中,我们经常需要处理多个输入...

    iBATIS使用指南

    iBATIS,作为一款开源的持久层框架,其前身称为SQL Maps,主要功能是实现Java对象与数据库操作的映射,使得开发人员能够通过简单的配置文件或者注解来进行数据库交互,而无需编写复杂的JDBC代码。本文将基于给定的...

    iBatis入门例子

    `params`是传入的参数,可以是Map或者JavaBean。 另外,iBatis还支持结果映射,可以将查询结果自动转换为Java对象。在Mapper XML文件中,我们可以通过`&lt;resultMap&gt;`标签定义结果映射,指定字段与Java属性的对应关系...

    自己总结的IBATIS资料

    - 对于支持自动生成主键的数据库,可以在映射文件中配置自动生成主键的功能。 5. **存储过程** - 支持调用数据库的存储过程,并返回相应的结果。 6. **parameterClass** - `parameterClass`属性定义了传入SQL...

    iBATIS SQL Maps指导

    iBATIS是一个轻量级的数据访问框架,它允许开发者将SQL语句直接写在XML配置文件中,从而实现对象与数据库的映射。 在开始使用iBATIS之前,首先理解SQL Map架构的灵活性至关重要。它并不限制数据库模型或对象模型的...

    java+ibatis的自我学习编码的论坛

    "sequence.sql"可能是一个数据库脚本,通常用于创建序列,序列在关系型数据库中常用于生成唯一的ID,比如在主键字段上。在Oracle数据库中,序列是自增ID的一种常见实现方式,而在MySQL或PostgreSQL等数据库中,可能...

    在idea8上用DWR+ibatis+Ext +mysql 开发的小程序

    实体类是JavaBean模式,通常用于ORM(对象关系映射)框架,如iBatis,来映射数据库表中的记录。 接着,我们看到`UserInfo.xml`,这是一个iBatis的映射文件,其中定义了SQL语句。`&lt;mapper&gt;`元素的`namespace`属性值...

    ibatis批处理

    iBatis的配置文件支持`&lt;iterate&gt;`标签,该标签用于在XML映射文件中进行循环处理。 **2.1 情况一:多个输入参数循环次数不对称** 在这种情况下,如果某些参数只有一份,而其他参数有多份,可以通过创建一个新的...

    ibatis开发手册(pdf)

    - **自动生成的主键**:支持自动为主键字段生成唯一值。 - **存储过程**:支持调用数据库中的存储过程。 - **parameterClass**:指定传递给 SQL 语句的参数类型。 - **parameterMap**:更复杂的参数映射机制,...

Global site tag (gtag.js) - Google Analytics