ResultMapUtils快速生成mybatis resultMap

2024-08-24 14:48

本文主要是介绍ResultMapUtils快速生成mybatis resultMap,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

package com.zy.platform.common.core.utils;import java.lang.reflect.Field;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author javachen* @description 根据实体类,生成mybatis的resultMap*/
public class ResultMapUtils {private static Pattern humpPattern = Pattern.compile("[A-Z]");//使用方法,在具体的微服务模块System.out.println(getResultMap(Student.class));public static String getUpdateSelective(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("<update id=\"updateSelective\" parameterType=\"");resultMap.append(pkgName);resultMap.append("\">\n");resultMap.append("UPDATE X_TABLE");resultMap.append("\n<set>\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("    <if test=\"");resultMap.append(property+"!=null\">");resultMap.append(property2Column(property).toUpperCase());resultMap.append("=#{"+property+", jdbcType="+javaType2jdbcType(javaType.toLowerCase())+"},</if>\n");}resultMap.append("</set>\n");resultMap.append("where id = #{id,jdbcType=VARCHAR}\n");resultMap.append("</update>");return resultMap.toString();}public static void getInsert(Class<?> clazz){String text = getUpdateSelective(clazz);Pattern p = Pattern.compile("#\\{[^}]+}");Matcher m = p.matcher(text);while (m.find()){System.out.println(m.group()+",");}}/*** 获取表的字段* @param clazz*/public void getColumns(Class<?> clazz){String text = getResultMap(clazz);Pattern p = Pattern.compile("column=[\"\\w\"]+");Matcher m = p.matcher(text);while (m.find()) {Pattern p1 = Pattern.compile("[\"\\w\"]+$");Matcher m1 = p1.matcher(m.group());while (m1.find()) {Pattern p2 = Pattern.compile("[\\w]+");Matcher m2 = p2.matcher(m1.group());while (m2.find()) {System.err.println(m2.group().toUpperCase());}}}}/*** 获取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).toUpperCase());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 "未知类型";}}}

这篇关于ResultMapUtils快速生成mybatis resultMap的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102784

相关文章

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类

详解Java中如何使用JFreeChart生成甘特图

《详解Java中如何使用JFreeChart生成甘特图》甘特图是一种流行的项目管理工具,用于显示项目的进度和任务分配,在Java开发中,JFreeChart是一个强大的开源图表库,能够生成各种类型的图... 目录引言一、JFreeChart简介二、准备工作三、创建甘特图1. 定义数据集2. 创建甘特图3.

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C