1、如果拿到表结构请关注我前面的文章
2、生成bean
package com.pingan.util; import java.io.File; import java.io.IOException; import java.util.List; import org.apache.commons.io.FileUtils; import com.pingan.bean.ColumnModel; public class BeanProcess { /** * 从表结构中去生成javabean * @param structureList * @param beanName * @return */ public static String genJavaBeanFromTableStructure(List<ColumnModel> columnModelList,String beanName,String packagePath){ StringBuffer sb = new StringBuffer(); try { //java package引入 sb.append("package "+packagePath.replace("\\", ".")+";\r\n"); //java import引入 for (ColumnModel columnModel : columnModelList) { String columnClassName = columnModel.getColumnClassName(); if(!columnClassName.contains("lang")){ sb.append("import "+columnModel.getColumnClassName()+";\r\n"); } } //java 类声明 sb.append("public class "+StringUtils.toFirstCharUpCase(beanName)+" {\r\n"); //java 属性 for (ColumnModel columnModel : columnModelList) { if(StringUtils.isNotBlank(columnModel.getRemarks())){ sb.append(" //"+columnModel.getRemarks()+" \r\n"); } sb.append(" private "+columnModel.getFieldType()+" "+columnModel.getFieldName()+";\r\n"); } sb.append("\r\n"); //java 属性get set方法 for (ColumnModel columnModel : columnModelList) { sb.append( "\tpublic "+columnModel.getFieldType()+" get"+StringUtils.toFirstCharUpCase((String) columnModel.getFieldName())+"() {\r\n" + "\t\treturn "+columnModel.getFieldName()+";\r\n" + "\t}\r\n" + "\r\n" + "\tpublic void set"+StringUtils.toFirstCharUpCase((String) columnModel.getFieldName())+"("+columnModel.getFieldType()+" "+columnModel.getFieldName()+") {\r\n" + "\t\t this."+columnModel.getFieldName()+" = "+columnModel.getFieldName()+";\r\n" + "\t}\r\n\r\n"); } sb.append("}\r\n"); } catch (Exception e) { e.printStackTrace(); } return sb.toString(); } /** * 将bean信息读到磁盘上 * @param classPath * @param packagePath * @param tableName * @param beanClassName * @throws IOException */ public static void createBeanInDisk(String classPath,String packagePath,String tableName,String beanClassName) throws IOException{ List<ColumnModel> columnModelList = JdbcUtil.getTableStructure(tableName); String beanDetail = genJavaBeanFromTableStructure(columnModelList,beanClassName,packagePath); System.out.println("已生成数据:\r"+beanDetail); File javaFile = new File(classPath+File.separator+packagePath+File.separator+StringUtils.toFirstCharUpCase(beanClassName)+".java"); FileUtils.writeStringToFile(javaFile, beanDetail); } /** * @param args */ public static void main(String[] args) { String classPath = "D:\\zhuangxinliang\\commonWeb\\src"; String packagePath = "com\\pingan\\bean"; try { createBeanInDisk(classPath,packagePath,"wealth_product_info","productInfo"); } catch (IOException e) { e.printStackTrace(); } } }
3、生成对应的ibatis映射
package com.pingan.util; import java.util.List; import com.pingan.bean.ColumnModel; public class IbatisProcess { /** * 生成ibatis对象别名 * @param clazz * @return */ public static String genObjectTypeAlias(Class<?> clazz){ return "<typeAlias alias=\""+clazz.getSimpleName().toUpperCase()+"\" type=\""+clazz.getName()+"\"></typeAlias>"; } /** * 生成whereSql语句块 * @param clazz * @return */ public static String genWhereSql(List<ColumnModel> columnModelList,Class<?> clazz,String tableName){ StringBuffer sb = new StringBuffer(); sb.append("<sql id=\""+StringUtils.toFirstCharLowCase(clazz.getSimpleName())+"_where\">"); for (ColumnModel columnModel : columnModelList) { if(!columnModel.getColumnName().contains("ID_")){ sb.append(" <isNotEmpty property =\""+columnModel.getFieldName()+"\" prepend=\"and\">\r\n"); sb.append(" "+columnModel.getColumnName()+"=#"+columnModel.getFieldName()+"#\r\n"); sb.append(" </isNotEmpty>\r\n"); } } sb.append("</sql>"); return sb.toString(); } /** * 对象结果映射 * @param clazz * @return */ public static String genResultMapper(List<ColumnModel> columnModelList,Class<?> clazz,String tableName){ StringBuffer sb = new StringBuffer(); sb.append("<resultMap id =\""+StringUtils.toFirstCharLowCase(clazz.getSimpleName())+"_rm\" class =\""+clazz.getSimpleName().toUpperCase()+"\">\r\n"); for (ColumnModel columnModel : columnModelList) { sb.append(" <result property=\""+columnModel.getFieldName()+"\" column=\""+columnModel.getColumnName()+"\"></result>\r\n"); } sb.append("</resultMap>"); return sb.toString(); } /** * 生成插入语句 * @param clazz * @param tableName * @return */ public static String genInsertMapper(List<ColumnModel> columnModelList,Class<?> clazz,String tableName){ StringBuffer sb = new StringBuffer(); sb.append("<insert id = \"save"+StringUtils.toFirstCharUpCase(clazz.getSimpleName())+"\" parameterClass=\""+clazz.getSimpleName().toUpperCase()+"\">\r\n"); sb.append(" insert into "+tableName+"(\r\n"); for (ColumnModel columnModel : columnModelList) { if(!columnModel.getColumnName().contains("ID_")){ sb.append(" "+columnModel.getColumnName()+",\r\n"); } } sb.deleteCharAt(sb.lastIndexOf(",")); sb.append(" ) "); sb.append("values(\r\n"); for (ColumnModel columnModel : columnModelList) { if(!columnModel.getColumnName().contains("ID_")){ sb.append(" #"+columnModel.getFieldName()+"#,\r\n"); } } sb.deleteCharAt(sb.lastIndexOf(",")); sb.append(" )\r\n"); sb.append("</insert>"); return sb.toString(); } /** * 生成更新语句 * @param clazz * @param tableName * @return */ public static String genUpdateMapper(List<ColumnModel> columnModelList,Class<?> clazz,String tableName){ StringBuffer sb = new StringBuffer(); sb.append("<update id=\"update"+StringUtils.toFirstCharUpCase(clazz.getSimpleName())+"\" parameterClass=\""+clazz.getSimpleName().toUpperCase()+"\">\r\n"); sb.append(" update "+tableName+" set\r\n"); for (ColumnModel columnModel : columnModelList) { if(!columnModel.getColumnName().contains("ID_")){ sb.append(" <isNotEmpty property =\""+columnModel.getFieldName()+"\" prepend=\",\">\r\n"); sb.append(" "+columnModel.getColumnName()+"=#"+columnModel.getFieldName()+"#\r\n"); sb.append(" </isNotEmpty>\r\n"); } } sb.deleteCharAt(sb.lastIndexOf(",")); sb.append(" where 1=1 \r\n"); sb.append(" <include refid=\""+StringUtils.toFirstCharLowCase(clazz.getSimpleName())+"_where\"/> \r\n"); sb.append("</update>"); return sb.toString(); } /** * 生成更新语句 * @param clazz * @param tableName * @return */ public static String genSelectMapper(List<ColumnModel> columnModelList,Class<?> clazz,String tableName){ StringBuffer sb = new StringBuffer(); sb.append("<select id=\"query"+clazz.getSimpleName()+"\" parameterClass=\"java.util.HashMap\" resultMap=\""+StringUtils.toFirstCharLowCase(clazz.getSimpleName())+"_rm\">\">\r\n"); sb.append(" select \r\n"); for (ColumnModel columnModel : columnModelList) { if(!columnModel.getColumnName().contains("ID_")){ sb.append(" "+columnModel.getColumnName()+",\r\n"); } } sb.deleteCharAt(sb.lastIndexOf(",")); sb.append(" from "+tableName+" \r\n"); sb.append(" where 1=1 \r\n"); sb.append(" <include refid=\""+StringUtils.toFirstCharLowCase(clazz.getSimpleName())+"_where\"/> \r\n"); sb.append("</select>"); return sb.toString(); } /** * 主方法 * @param args */ public static void main(String[] args) { try { String tableName = "wealth_product_info"; List<ColumnModel> columnModelList = JdbcUtil.getTableStructure(tableName); Class clazz = Class.forName("com.pingan.bean.ProductInfo"); System.out.println(genObjectTypeAlias(clazz)); System.out.println(genWhereSql(columnModelList,clazz,tableName)); System.out.println(genResultMapper(columnModelList,clazz,tableName)); System.out.println(genUpdateMapper(columnModelList,clazz,tableName)); System.out.println(genSelectMapper(columnModelList,clazz,tableName)); } catch (ClassNotFoundException e) { e.printStackTrace(); } } }
4、String工具类
package com.pingan.util; public class StringUtils extends org.apache.commons.lang.StringUtils{ /** * 将数据库字段转换成bean属性 * @param columnName * @return */ public static String getFieldName(String columnName) { char[] columnCharArr = columnName.toLowerCase().toCharArray(); StringBuffer sb = new StringBuffer(); int ad = -1; for (int i = 0; i < columnCharArr.length; i++) { char cur = columnCharArr[i]; if(cur=='_'){ ad = i; }else{ if((ad+1)==i&&ad!=-1){ sb.append(Character.toUpperCase(cur)); }else{ sb.append(cur); } ad=-1; } } return sb.toString(); } /** * 将首字母变大写 * @param str * @return */ public static String toFirstCharUpCase(String str){ char[] columnCharArr = str.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < columnCharArr.length; i++) { char cur = columnCharArr[i]; if(i==0){ sb.append(Character.toUpperCase(cur)); }else{ sb.append(cur); } } return sb.toString(); } /** * 将首字母变小写 * @param str * @return */ public static String toFirstCharLowCase(String str){ char[] columnCharArr = str.toCharArray(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < columnCharArr.length; i++) { char cur = columnCharArr[i]; if(i==0){ sb.append(Character.toLowerCase(cur)); }else{ sb.append(cur); } } return sb.toString(); } }
其它的类可参数我前面的文章,谢谢
相关推荐
在使用ibatis时,还需要定义JavaBean,如`User`类,用于映射数据库中的表。`User`类中包含了对应数据库字段的属性,如`id`和`name`,并通过getter和setter方法进行访问。 同时,需要在`SqlMapConfig.xml`中配置数据...
XML映射文件包含了具体的SQL语句,MBG会根据表结构生成对应的SELECT、INSERT、UPDATE和DELETE语句。这些映射文件会定义字段到数据库列的映射,以及如何处理结果集。此外,还可以配置动态SQL元素,如if、choose、when...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射和对象关系映射,使得开发者可以避免直接编写大量的SQL语句,从而提高开发效率和代码可读性。在这个"ibatis的增删改查"主题中,我们将深入...
3. **数据对象**:讨论如何定义JavaBean作为数据对象,以及如何通过iBATIS自动映射查询结果到这些对象。 4. **事务管理**:讲解如何使用iBATIS进行事务控制,包括手动和自动提交/回滚事务。 5. **缓存机制**:分析...
Ibatis支持多种数据类型和参数映射方式,包括基本类型、JavaBean、Map等。在处理结果集时,Ibatis提供了自动映射功能,它可以将查询结果自动转换为Java对象。此外,还可以自定义结果映射,对复杂的数据结构进行精确...
iBATIS的核心功能是通过其SQLMap组件实现的,它允许开发者以XML配置文件的形式指定SQL语句和映射规则,从而将SQL语句与Java对象关联起来。 #### 二、SQLMap详解 ##### 2.1 SQLMap的概念 SQLMap是iBATIS中的一个...
通过使用简单的XML配置文件来映射JavaBean到SQL语句,iBATIS提供了一种更加灵活的方式来处理数据库操作,与传统的ORM框架相比,它在保持简洁的同时提供了更多的控制权。 #### 二、核心概念与功能 ##### 2.1 SQLMap...
为了更直观地展示ibatis的使用,我们将通过一个简单的`Category`表操作来说明ibatis的基本用法。 #### 1. 创建数据库 使用ibatis提供的DDL脚本来创建数据库结构。在这个例子中,我们选择了Oracle数据库,因为...
iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得数据库访问更为灵活和可控。这个"iBatis入门例子"很适合初学者来理解并掌握iBatis的核心概念和用法。 首先,我们需要了解...
- **工作原理**:通过读取XML配置文件中的SQL语句定义和映射信息,SQLMap在运行时动态生成相应的SQL语句并执行。 #### 三、安装与配置 - **JAR文件和依赖性**: - iBATIS的主要JAR文件包括`sqlmap-client.jar`、`...
- **iBATIS SQL Map** 是一种用于简化数据库访问的工具,它通过简单的XML配置文件将Java Bean与SQL语句进行映射,从而减少了编写数据库访问代码的工作量。 #### 二、SQL Map 概念 - **SQL Map** 的核心概念是将Java...
### Ibatis学习笔记 #### 一、Ibatis优点 **A. 优点** 1. **SQL语句独立性**:Ibatis将SQL语句从Java源程序中抽离出来,放置于单独的XML文件中编写,这使得在后期对程序进行维护时变得更加便捷。 2. **简化开发...
- `antlr.jar`:ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,可能在Spring或iBatis的SQL解析中发挥作用。 - `cglib-nodep-2.1_3.jar`:CGLIB是一个代码生成库,常用于动态...
通过读取配置文件,ORM框架能够自动关联JavaBean的属性和数据库字段。在查询时,ORM会将数据库查询结果填充到对应的JavaBean对象中;在插入或更新时,它会将JavaBean的属性值转化为SQL语句中的参数。此外,ORM还支持...
为数据库表中的每一列对应创建一个 JavaBean 类,用于存放数据库记录的数据。 ##### 2.5 创建 MyBatis 全局配置文件 MyBatis 的全局配置文件主要用于配置数据源、事务管理、缓存策略等。该配置文件通常命名为 ...
ORM框架的核心原理在于读取配置文件,自动关联JavaBean的属性与数据库表的字段,从而实现数据的自动装载和保存。例如,当执行查询操作时,ORM框架会自动将查询结果封装成JavaBean对象;当执行更新或插入操作时,框架...