欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 自动生成