概述
一,实现原理
根据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() + "> rn";
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 += "rn";
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() + "> rn";
// 每一行字符串
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 += "rn";
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 自动生成的全部内容,希望文章能够帮你解决mybatis resultMap 自动生成所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复