根据Java实体自动生成MyBatis的ResultMap
来源:互联网 发布:淘宝店铺关闭激活不了 编辑:程序博客网 时间:2024/04/30 09:44
直接上代码:
import java.lang.reflect.Field;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 根据实体生成对应的ResultMap
* @author wangxh
* @date 2017-10-12 09:44:23
*/
public class ResultMapUtil {
private static Pattern humpPattern = Pattern.compile("[A-Z]");
/**
* 获取ResultMap
* @param clazz 实体类的Class
* @return String
*/
public static String getResultMap(Class<?> clazz){
Object obj = null;
try{
obj = clazz.newInstance();
}catch (Exception e){
return "#Exception.反射生成实体异常#";
}
String clazzName = clazz.getSimpleName();
String resultMapId = Character.toLowerCase(clazzName.charAt(0))+clazzName.substring(1)+"Map";
String pkgName = clazz.getName();
StringBuilder resultMap = new StringBuilder();
resultMap.append("<resultMap id=\"");
resultMap.append(resultMapId);
resultMap.append("\" type=\"");
resultMap.append(pkgName);
resultMap.append("\">\n");
Field[] fields = clazz.getDeclaredFields();
for(Field f : fields){
String property = f.getName();
String javaType = f.getType().getName();
if("serialVersionUID".equals(property)){
continue;//忽略掉这个属性
}
resultMap.append(" <result column=\"");
resultMap.append(property2Column(property));
resultMap.append("\" jdbcType=\"");
resultMap.append(javaType2jdbcType(javaType.toLowerCase()));
resultMap.append("\" property=\"");
resultMap.append(property);
resultMap.append("\" />\n");
}
resultMap.append("</resultMap>");
return resultMap.toString();
}
private static String property2Column(String property){
Matcher matcher = humpPattern.matcher(property);
StringBuffer sb = new StringBuffer();
while(matcher.find()){
matcher.appendReplacement(sb, "_"+matcher.group(0).toLowerCase());
}
matcher.appendTail(sb);
return sb.toString();
}
private static String javaType2jdbcType(String javaType){
if(javaType.contains("string")){
return "VARCHAR";
}else if(javaType.contains("boolean")){
return "BIT";
}else if(javaType.contains("byte")){
return "TINYINT";
}else if(javaType.contains("short")){
return "SMALLINT";
}else if(javaType.contains("int")){
return "INTEGER";
}else if(javaType.contains("long")){
return "BIGINT";
}else if(javaType.contains("double")){
return "DOUBLE";
}else if(javaType.contains("float")){
return "REAL";
}else if(javaType.contains("date")){
return "DATE";
}else if(javaType.contains("timestamp")){
return "TIMESTAMP";
}else if(javaType.contains("time")){
return "TIME";
}else if(javaType.contains("bigdecimal")){
return "DECIMAL";
}else{
return "未知类型";
}
}
}
阅读全文
0 0
- 根据Java实体自动生成MyBatis的ResultMap
- mybatis 根据 数据库表 自动生成 实体
- mybatis 根据 数据库表 自动生成 实体 并自动生成中文注释
- Java根据数据库表格自动生成java实体类
- MyBatis自动生成实体类
- hibernate根据实体自动生成表的设置
- 利用mybatis-generator自动生成JAVA的实体类和mapping等
- 根据库表结构自动生成java实体类(生成规范的变量及get/set方法).
- mysql根据数据库自动生成实体(dto,service,impl,mybatis,xml)
- mysql根据数据库自动生成实体(dto,service,impl,mybatis,xml)
- 总结Mybatis根据库表结构自动生成相关实体及映射文件
- hibernate 根据实体类自动生成表
- hibernate 根据实体类自动生成表
- java 根据实体对象生成 增删改的SQL语句
- Java 根据固定格式的Excel生成实体类
- Java 根据固定格式的Excel生成实体类
- 自动生成Mybatis 实体类、DaoMapper、XML
- mybatis自动生成实体xml文件
- Android ListView滑动后背景变黑
- Spring Boot中使用使用Spring Security和JWT
- 页面有两个RecyclerView无法正常显示且镶嵌ScrollView滑动异常问题
- 【中国超算迎来最强对手】 IBM推出机器学习加速“瑞士军刀”Power9芯片,性能为同类产品的10倍
- Eclipse IDE中设置JVM启动参数
- 根据Java实体自动生成MyBatis的ResultMap
- Java多线程编程总结
- 六个人如何运维一万台服务器?
- ubuntu 查看隐藏文件的两种方法
- android 点击两次back 键退出app
- atoi函数算法分析(字符串转换为相应的整型数)
- 如何在k8s集群中安装nvidia、cuda并使用GPU进行训练
- HDoj 1033 Edge (英语理解题)
- RxJava操作符记录