mybatis resultMap 自动生成
程序员文章站
2024-03-19 20:40:22
...
一,实现原理
根据javaBean实例,通过java反射技术,获取类的属性,再通过字符串拼接的方式实现
二,实现步骤
2.1 拼接头部文件
<resultMap id="BaseResultMap" type="com.huajie.entity.sys.SysMenuinfo">
cls 为类的class文件 类名.getClass() 获得
str = "<resultMap id=" + cls.getSimpleName() + "ResultMap type=" + cls.getName() + "> \r\n";
2.2 拼接列 本文采用了驼峰转小写+_的模式
// 每一行字符串
String linestr = "";
Field[] declaredFields = cls.getDeclaredFields();
for (Field field : declaredFields) {
if (field.getType().getName().equals("java.lang.String")) {
linestr = "<result column=\"" + getUpCaseReplace(field.getName()) + "\" property=\"" + field.getName()
+ "\" jdbcType=\"VARCHAR\" />";
} else {
linestr = "<result column=\"" + getUpCaseReplace(field.getName()) + "\" property=\"" + field.getName()
+ "\" jdbcType=\"INTEGER\" />";
}
linestr += "\r\n";
str += linestr;
}
完整代码如下:
只有getResultMapNew修改的完整版 时间有限
package com.huajie.utils;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import com.huajie.entity.sys.SysMenuButton;
public class MyBatisUtil {
// 获取bean的属性 根据属性评价 resultMap
public static String getResultMap(Class<?> cls) throws Exception {
String str = "";
// 每一行字符串 <result column="BID_SECTION_CODE" property="BID_SECTION_CODE"
// jdbcType="VARCHAR" />
String linestr = "";
Field[] declaredFields = cls.getDeclaredFields();
for (Field field : declaredFields) {
if (field.getType().getName().equals("java.lang.String")) {
linestr = "<result column=\"" + field.getName() + "\" property=\"" + field.getName()
+ "\" jdbcType=\"VARCHAR\" />";
} else {
linestr = "<result column=\"" + field.getName() + "\" property=\"" + field.getName()
+ "\" jdbcType=\"INTEGER\" />";
}
System.out.println(linestr);
}
return str;
}
// 获取bean的属性 根据属性评价 resultMap
// 并将驼峰修改为'_'
public static String getResultMapNew(Class<?> cls) throws Exception {
String str = "";
// 头部 <resultMap id="BaseResultMap" type="com.huajie.entity.sys.SysMenuinfo">
str = "<resultMap id=" + cls.getSimpleName() + "ResultMap type=" + cls.getName() + "> \r\n";
// 每一行字符串
String linestr = "";
Field[] declaredFields = cls.getDeclaredFields();
for (Field field : declaredFields) {
if (field.getType().getName().equals("java.lang.String")) {
linestr = "<result column=\"" + getUpCaseReplace(field.getName()) + "\" property=\"" + field.getName()
+ "\" jdbcType=\"VARCHAR\" />";
} else {
linestr = "<result column=\"" + getUpCaseReplace(field.getName()) + "\" property=\"" + field.getName()
+ "\" jdbcType=\"INTEGER\" />";
}
linestr += "\r\n";
str += linestr;
}
str+="</resultMap>";
return str;
}
// 获取Base_Column_List sql语句字段
public static String getColumnList(Class<?> cls) throws Exception {
// 每一行字符串 <result column="BID_SECTION_CODE" property="BID_SECTION_CODE"
// jdbcType="VARCHAR" />
String linestr = "";
Field[] declaredFields = cls.getDeclaredFields();
for (Field field : declaredFields) {
linestr = linestr + field.getName() + ",";
}
String str = linestr.substring(0, linestr.length() - 1);
System.out.println(str);
return str;
}
/**
* 将字符串中的驼峰写法替换成'_'
*
* @param str
* @return
*/
private static String getUpCaseReplace(String str) {
List<String> listChar = getUpCaseList(str);
for (int i = 0; i < listChar.size(); i++) {
str = str.replace(listChar.get(i), "_" + listChar.get(i).toLowerCase());
}
return str;
}
/**
* @Description: 输出字符串中的大写字母
* @param str
*/
private static List<String> getUpCaseList(String str) {
List<String> listChar = new ArrayList<String>();
// 转为char数组
char[] ch = str.toCharArray();
// 得到大写字母
for (int i = 0; i < ch.length; i++) {
if (ch[i] >= 'A' && ch[i] <= 'Z') {
listChar.add(String.valueOf(ch[i]));
}
}
return listChar;
}
/**
* @Description: 输出字符串中的大写字母
* @param str
*/
private static String getColumnListNew(Class<?> cls) throws Exception {
// 每一行字符串 <result column="BID_SECTION_CODE" property="BID_SECTION_CODE"
// jdbcType="VARCHAR" />
String linestr = "";
Field[] declaredFields = cls.getDeclaredFields();
for (Field field : declaredFields) {
linestr = linestr + getUpCaseReplace(field.getName()) + ",";
}
String str = linestr.substring(0, linestr.length() - 1);
System.out.println(str);
return str;
}
public static void main(String[] args) throws Exception {
SysMenuButton a = new SysMenuButton();
System.out.println(getResultMapNew(a.getClass()));
// getColumnListNew(a.getClass());
}
}
测试javaBean
package com.huajie.entity.sys;
import lombok.Data;
@Data
public class SysMenuButton {
private String fdRoleid;
private String fdMenuid;
private String fdButtonid;
private String fdPrivilegetype;
private String fdButtonlabel;
}
效果如下:
推荐阅读
-
mybatis resultMap 自动生成
-
设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!
-
hibernate自动生成xml,vo,dao(oracle DAOXMLHibernateOracleSQL
-
ssh三大框架代码的自动生成 博客分类: java 自动生成配置文件自动生成代码ssh自动生成三大框架自动生成
-
JEECG----你明智的选择 博客分类: web前端java 架构JEECGWEB自动生成代码
-
基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.9.0版) 博客分类: TableGo java数据库自动生成代码零代码编程软件框架
-
C++ 对象关系映射(ORM)介绍 博客分类: C/C++ C++ORM框架自动生成代码数据库
-
基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.0.0版) 博客分类: TableGo java数据库自动生成代码框架模板
-
基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.6.6版) 博客分类: TableGo java数据库自动生成代码框架模板
-
自动生成代码工具家族又添新成员:在线代码生成器 代码生成器自动生成代码代码生成工具java代码生成.net代码生成