mybatis resultMap 自动生成

一,实现原理

根据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;

}

效果如下:

猜你喜欢

转载自blog.csdn.net/xiewenfeng520/article/details/82490673