由于项目使用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>
相关推荐
Ibatis的SqlMap配置文件是其核心部分,用于定义SQL语句、参数映射和结果映射,但手动编写SqlMap文件可能效率低下且容易出错。为了解决这个问题,出现了"ibatis的SqlMap辅助生成工具",它旨在提高开发效率,减少错误...
1. 动态SQL:Ibatis-SqlMap支持在XML映射文件中编写动态SQL,使得SQL生成更加灵活。 2. 缓存机制:提供了一级缓存和二级缓存,能够提高数据访问效率。 3. 映射文件和Java代码分离:通过XML配置文件,将SQL逻辑和业务...
SqlMap是iBatis的核心配置文件,用于定义数据库交互的各种操作。以下是关于iBatis_SqlMap配置的一些关键知识点: 1. **命名空间(Namespace)**: 命名空间是SqlMap配置中的一个重要概念,用于区分不同的SqlMap...
**命名空间**是iBatis配置文件中的一个重要概念,它用于区分不同的SQL映射文件或同一文件中的不同部分。通过定义命名空间,可以避免SQL映射ID之间的冲突,并且方便地组织相关的映射信息。例如: ```xml <sqlMap ...
下面我们将详细探讨Ibatis配置文件模板中的关键组成部分,包括`SqlMap.properties`、`SqlMapConfig.xml`以及与JavaBean的映射文件。 1. **SqlMap.properties** 这是Ibatis的属性配置文件,主要用于存放数据库连接...
- **Inline Parameter Maps**:在SQL语句中直接指定参数值。 - **Primitive Type Parameters**:处理基本数据类型的参数。 - **Map Type Parameters**:使用Map类型作为参数传递复杂的数据结构。 - **...
iBATIS的核心概念是SqlMapConfig.xml配置文件和一系列的SqlMap.xml映射文件,这两个文件是理解iBATIS工作原理的关键。 SqlMapConfig.xml是整个iBATIS框架的全局配置文件,它包含了数据源、事务管理器等核心组件的...
iBATIS是一个优秀的开源持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,与Java代码分离,实现了数据访问层的解耦合。 在描述中提到了一个博客链接,虽然具体内容未给出,但我们可以推测博主可能分享了...
Dao,SqlMap)"涉及到的主要知识点是关于iBatis框架的代码自动生成器,它能够帮助开发者快速地生成与数据库交互所需的Java实体类(Bean)、数据访问对象(Dao)以及SqlMap配置文件,从而提高开发效率,减少手动编写...
XDoclet 是一个强大的源代码注释处理工具,它通过解析 Java 源代码中的 Javadoc 注释标签来生成各种类型的文档或配置文件。这种机制使得开发者能够在不离开 Java 代码的情况下,方便地指定所需的额外元数据,从而...
本文将深入探讨iBATIS的核心配置文件——`sqlMapConfig.xml`,以及映射文件的详细内容。 `sqlMapConfig.xml`是iBATIS的全局配置文件,它包含了所有iBATIS运行时的设置,如数据源、事务管理器、缓存配置等。让我们...
iBATIS SQLMap是一款在Java应用中广泛使用的持久层框架,它将SQL语句与Java代码分离,使得数据库操作更加灵活、易于维护。这个框架的主要目的是简化数据访问层的开发,减少开发人员编写大量重复的JDBC代码。下面将...
### ibatis配置文件详解 #### 一、引言 在Java开发领域中,持久层框架是连接业务逻辑层与数据库的重要桥梁。ibatis(现已更名为MyBatis)作为一款优秀的持久层框架,提供了灵活的数据访问层支持。本文将对ibatis的...
本知识点主要聚焦于如何生成Ibatis的Dao(数据访问对象)类,以及相关的实体类(Entity)和SQL映射文件(sqlMap)。下面我们将详细介绍这个过程。 首先,Ibatis Dao的生成通常涉及到几个关键步骤: 1. **配置文件*...
这款工具能够显著提高开发效率,通过自动化的方式生成Ibatis所需的XML映射文件,从而避免手动编写这些文件的繁琐工作。 Ibatis是一个优秀的Java持久层框架,它简化了数据库操作,允许开发者直接编写SQL语句,避免了...
总结一下,"IBatis 代码生成工具"是.NET平台上的一款实用软件,能够自动化生成IBatis框架所需的XML配置文件,从而提高开发效率。结合DevExpress组件,它提供了友好的用户界面,简化了与数据库交互的代码编写工作,...
**SqlMap**是MyBatis的核心配置文件之一,它定义了如何将数据库查询结果映射到Java对象上。例如,一个简单的`SqlMap.xml`文件可能包含这样的内容: ```xml SELECT * FROM PERSON WHERE ID = #{id} ``` 这里的`#...
1. mybatis3.0.5:这是MyBatis的3.0.5版本,MyBatis是iBATIS的下一代产品,它继承了iBATIS的核心功能并进行了扩展和优化,支持注解和XML配置文件,提供更强大的动态SQL功能。 2. ibatis-core-3.0:这是iBATIS 3.0...
通过使用简单的 XML 配置文件,iBATIS 可以将 JavaBeans 对象映射到 SQL 语句上,从而实现数据持久化。相比于其他对象关系映射工具,iBATIS 更加简单易用。 #### 安装与升级 iBATIS 的安装过程相对简单,文档中提供...