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

相关文章

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成