`
lazy513
  • 浏览: 19505 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

生成ibatis配置文件SqlMap中的各项语句

    博客分类:
  • JAVA
阅读更多

       由于项目使用ibatis,众所周知的原因,配置文件很是烦琐,尤其是数据库字段通常情况下又不与实体中的变量名相同,所以进行数据操作时就要进行映射。 这东西配置起来还是比较烦,于是写了个工具类来生成一下,留着备用。

例如,数据库的表名及部分字段是这样的


 

       都是大写的且使用下划线分割,然后我是使用myeclipse DB Browser连接数据库并通过hibernate 反向生成实体类,部分如下

 

public class CnfFeesConfig implements java.io.Serializable {

	private static final long serialVersionUID = -5883040369836437293L;
	private String sysConfigId;
	private String versionId;
	private String itemId;
	private String itemNameCn;
	private String itemNameEn;
        //get、set
}

 

      接下来就是转换的工具类了,代码很简单,就是通过类全路径装载类,取得类的信息,比如类名,变量列表等,然后做转换,组装。最后输出在控制台,拷过去小做修改就行。

 

package test.ibatis;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

/**
 * 用于生成ibatis对应的各项语句,输出到控制台
 */
public class GenerateIbatisSql {

	/**
	 * 生成别名及resultMap 
	 * @param getSqlClassName 完整的类名称
	 * @param extendMap 父map
	 */
	public static void generateMap(String getSqlClassName, String extendMap)
		throws InstantiationException, IllegalAccessException,
		ClassNotFoundException {

		Class<?> cls = Class.forName(getSqlClassName);
		
		Document document = DocumentHelper.createDocument();
		Element rootElement = document.addElement("sqlMap");
		
		String className = cls.getName();
		String clsName = cls.getSimpleName();
	
		Element typeElement = rootElement.addElement("typeAlias");
		typeElement.addAttribute("alias", clsName + "Class");
		typeElement.addAttribute("type", className);
	
		Element subElement = rootElement.addElement("resultMap");
		subElement.addAttribute("id", clsName + "Map");
		subElement.addAttribute("class", clsName + "Class");
		
		if (null != extendMap)
			subElement.addAttribute("extends", extendMap);
	
		Field[] fields = cls.getDeclaredFields();
		for (Field field : fields) {
			if (!field.getName().equals("serialVersionUID")) {
				Element resultElement = subElement.addElement("result");
	
				String name = field.getName();
				name = trandslate(name);
				
				resultElement.addAttribute("property", field.getName());
				resultElement.addAttribute("column", name);
			}
		}
		
		System.out.println(document.asXML());
	}

	/**
	 * 生成选择语句,只生成了字段
	 */
	public static void generateSelectSql(String getSqlClassName,
			String tableAlias) throws ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		Class<?> cls = Class.forName(getSqlClassName);

		Field[] fields = cls.getDeclaredFields();
		for (Field field : fields) {
			if (!field.getName().equals("serialVersionUID")) {
				
				String name = field.getName();
				name = trandslate(name);
				
				System.out.println(tableAlias + "." + name + ",");
			}
		}
	}

	
	/**
	 * 生成update语句
	 */
	public static void generateUpdateSql(String className, String symbol)
			throws ClassNotFoundException,
			InstantiationException, IllegalAccessException {
		
		Class<?> cls = Class.forName(className);
		String clsName = cls.getSimpleName();

		StringBuilder build = new StringBuilder();
		build.append("<update id=\"update").append(clsName).append("\">\n");
		clsName = trandslate(clsName);
		build.append("UPDATE ").append(clsName.toUpperCase()).append(" SET \n");
		
		//转换变量名
		Field[] fields = cls.getDeclaredFields();
		for (Field field : fields) {
			if (!field.getName().equals("serialVersionUID")) {
				
				String name = field.getName();
				name = trandslate(name);
				
				build.append(name.toUpperCase()).append("=").append(symbol)
					.append(field.getName()).append(symbol).append(",");
			}
		}
		String result = build.toString();
		result = result.substring(0, result.length()-1);
		result += "\n</update>";
		
		System.out.println(result);
	}

	/**
	 * 生成insert语句
	 */
	public static void generateInsertSql(String className, String symbol) 
			throws ClassNotFoundException, InstantiationException, 
			IllegalAccessException {
		
		Class<?> cls = Class.forName(className);
		String clsName = cls.getSimpleName();	//类名
		
		StringBuilder build = new StringBuilder();
		
		build.append("<insert id=\"insert").append(clsName).append("\">\n");
		
		clsName = trandslate(clsName);
		
		build.append("INSERT INTO ").append(clsName.toUpperCase());
		
		List<String> fieldList = new ArrayList<String>();
		List<String> valueList = new ArrayList<String>();

		Field[] fields = cls.getDeclaredFields();
		for (Field field : fields) {
			if (!field.getName().equals("serialVersionUID")) {
				
				String name = field.getName();
				name = trandslate(name);
				
				fieldList.add(name);
				valueList.add(field.getName());
			}
		}

		build.append(" (\n");
		for (int i=0,size=fieldList.size(); i<size; i++) {
			build.append( fieldList.get(i).toUpperCase() );
			if( i < size-1 )
				build.append(",");
		}

		build.append("\n) values (\n");
		for (int i=0,size=valueList.size(); i<size; i++) {
			build.append(symbol).append(valueList.get(i)).append(symbol);
			if( i < size-1 )
				build.append(",");
		}
		build.append("\n)\n</insert>");
		
		System.out.println(build.toString());
	}

	/**变量名的转换,转成表的字段名*/
	private static String trandslate(String name){
		
		//匹配大写
		Pattern pattern = Pattern.compile("[A-Z]");
		Matcher matcher = pattern.matcher(name);
		while (matcher.find()) {
			if (matcher.start() == 0)
				name = name.replace(matcher.group(), matcher.group().toLowerCase());
			else
				name = name.replace(matcher.group(), "_" + matcher.group().toLowerCase());//替换下划线
		}
		return name;
	}

	public static void main(String[] args) {

		//类的全路径名
		String className = "com.cmhit.szps.model.cnf.CnfFeesConfig";
		//标识符号
		String symbol = "";
		
		try {
			generateMap(className, null);			//生成别名及resultMap
			
//			symbol = "t";
//			generateSelectSql(className, symbol);	//生成查询语句
			
//			symbol = "#";
//			generateInsertSql(className, symbol);	//生成插入语句
//			generateUpdateSql(className,symbol);	//生成更新语句
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}

	}

}

 

结果

<?xml version="1.0" encoding="UTF-8"?>
<sqlMap>
<typeAlias alias="CnfFeesConfigClass" type="com.cmhit.szps.model.cnf.CnfFeesConfig"/>
<resultMap id="CnfFeesConfigMap" class="CnfFeesConfigClass">
<result property="sysConfigId" column="sys_config_id"/>
<result property="versionId" column="version_id"/>
<result property="itemId" column="item_id"/>
</resultMap>
</sqlMap>

 

  • 大小: 8.4 KB
分享到:
评论

相关推荐

    ibatis的SqlMap辅助生成工具

    Ibatis的SqlMap配置文件是其核心部分,用于定义SQL语句、参数映射和结果映射,但手动编写SqlMap文件可能效率低下且容易出错。为了解决这个问题,出现了"ibatis的SqlMap辅助生成工具",它旨在提高开发效率,减少错误...

    ibatis-sqlmap_2.3.4_2.jar两个版本的jar包

    1. 动态SQL:Ibatis-SqlMap支持在XML映射文件中编写动态SQL,使得SQL生成更加灵活。 2. 缓存机制:提供了一级缓存和二级缓存,能够提高数据访问效率。 3. 映射文件和Java代码分离:通过XML配置文件,将SQL逻辑和业务...

    iBatis_SqlMap的配置总结[1]

    SqlMap是iBatis的核心配置文件,用于定义数据库交互的各种操作。以下是关于iBatis_SqlMap配置的一些关键知识点: 1. **命名空间(Namespace)**: 命名空间是SqlMap配置中的一个重要概念,用于区分不同的SqlMap...

    ibatis_sqlMap的配置总结

    **命名空间**是iBatis配置文件中的一个重要概念,它用于区分不同的SQL映射文件或同一文件中的不同部分。通过定义命名空间,可以避免SQL映射ID之间的冲突,并且方便地组织相关的映射信息。例如: ```xml &lt;sqlMap ...

    ibatis配置文件模板

    下面我们将详细探讨Ibatis配置文件模板中的关键组成部分,包括`SqlMap.properties`、`SqlMapConfig.xml`以及与JavaBean的映射文件。 1. **SqlMap.properties** 这是Ibatis的属性配置文件,主要用于存放数据库连接...

    ibatis-sqlMap

    - **Inline Parameter Maps**:在SQL语句中直接指定参数值。 - **Primitive Type Parameters**:处理基本数据类型的参数。 - **Map Type Parameters**:使用Map类型作为参数传递复杂的数据结构。 - **...

    iBATIS-SqlMaps,ibatis映射文件

    iBATIS的核心概念是SqlMapConfig.xml配置文件和一系列的SqlMap.xml映射文件,这两个文件是理解iBATIS工作原理的关键。 SqlMapConfig.xml是整个iBATIS框架的全局配置文件,它包含了数据源、事务管理器等核心组件的...

    ibatis-sqlMap相关参考

    iBATIS是一个优秀的开源持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,与Java代码分离,实现了数据访问层的解耦合。 在描述中提到了一个博客链接,虽然具体内容未给出,但我们可以推测博主可能分享了...

    ibatis2代码生成工具(生成实体Bean,Dao,SqlMap)

    Dao,SqlMap)"涉及到的主要知识点是关于iBatis框架的代码自动生成器,它能够帮助开发者快速地生成与数据库交互所需的Java实体类(Bean)、数据访问对象(Dao)以及SqlMap配置文件,从而提高开发效率,减少手动编写...

    pojo+xDoclet生成ibatis映射文件

    XDoclet 是一个强大的源代码注释处理工具,它通过解析 Java 源代码中的 Javadoc 注释标签来生成各种类型的文档或配置文件。这种机制使得开发者能够在不离开 Java 代码的情况下,方便地指定所需的额外元数据,从而...

    \ibatis配置文件、映射文件详解

    本文将深入探讨iBATIS的核心配置文件——`sqlMapConfig.xml`,以及映射文件的详细内容。 `sqlMapConfig.xml`是iBATIS的全局配置文件,它包含了所有iBATIS运行时的设置,如数据源、事务管理器、缓存配置等。让我们...

    iBATIS SQLMap

    iBATIS SQLMap是一款在Java应用中广泛使用的持久层框架,它将SQL语句与Java代码分离,使得数据库操作更加灵活、易于维护。这个框架的主要目的是简化数据访问层的开发,减少开发人员编写大量重复的JDBC代码。下面将...

    ibatis配置文件

    ### ibatis配置文件详解 #### 一、引言 在Java开发领域中,持久层框架是连接业务逻辑层与数据库的重要桥梁。ibatis(现已更名为MyBatis)作为一款优秀的持久层框架,提供了灵活的数据访问层支持。本文将对ibatis的...

    生成ibatis Dao

    本知识点主要聚焦于如何生成Ibatis的Dao(数据访问对象)类,以及相关的实体类(Entity)和SQL映射文件(sqlMap)。下面我们将详细介绍这个过程。 首先,Ibatis Dao的生成通常涉及到几个关键步骤: 1. **配置文件*...

    sqlserver Ibatis XML自动生成工具

    这款工具能够显著提高开发效率,通过自动化的方式生成Ibatis所需的XML映射文件,从而避免手动编写这些文件的繁琐工作。 Ibatis是一个优秀的Java持久层框架,它简化了数据库操作,允许开发者直接编写SQL语句,避免了...

    IBatis 代码生成工具

    总结一下,"IBatis 代码生成工具"是.NET平台上的一款实用软件,能够自动化生成IBatis框架所需的XML配置文件,从而提高开发效率。结合DevExpress组件,它提供了友好的用户界面,简化了与数据库交互的代码编写工作,...

    自动生成SqlMap

    **SqlMap**是MyBatis的核心配置文件之一,它定义了如何将数据库查询结果映射到Java对象上。例如,一个简单的`SqlMap.xml`文件可能包含这样的内容: ```xml SELECT * FROM PERSON WHERE ID = #{id} ``` 这里的`#...

    ibatis jar文件

    1. mybatis3.0.5:这是MyBatis的3.0.5版本,MyBatis是iBATIS的下一代产品,它继承了iBATIS的核心功能并进行了扩展和优化,支持注解和XML配置文件,提供更强大的动态SQL功能。 2. ibatis-core-3.0:这是iBATIS 3.0...

    iBATIS-SqlMaps-2_ja.pdf

    通过使用简单的 XML 配置文件,iBATIS 可以将 JavaBeans 对象映射到 SQL 语句上,从而实现数据持久化。相比于其他对象关系映射工具,iBATIS 更加简单易用。 #### 安装与升级 iBATIS 的安装过程相对简单,文档中提供...

Global site tag (gtag.js) - Google Analytics