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

相关文章

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

resultMap如何处理复杂映射问题

《resultMap如何处理复杂映射问题》:本文主要介绍resultMap如何处理复杂映射问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录resultMap复杂映射问题Ⅰ 多对一查询:学生——老师Ⅱ 一对多查询:老师——学生总结resultMap复杂映射问题

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Mybatis 传参与排序模糊查询功能实现

《Mybatis传参与排序模糊查询功能实现》:本文主要介绍Mybatis传参与排序模糊查询功能实现,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、#{ }和${ }传参的区别二、排序三、like查询四、数据库连接池五、mysql 开发企业规范一、#{ }和${ }传参的

Java利用docx4j+Freemarker生成word文档

《Java利用docx4j+Freemarker生成word文档》这篇文章主要为大家详细介绍了Java如何利用docx4j+Freemarker生成word文档,文中的示例代码讲解详细,感兴趣的小伙伴... 目录技术方案maven依赖创建模板文件实现代码技术方案Java 1.8 + docx4j + Fr

基于SpringBoot+Mybatis实现Mysql分表

《基于SpringBoot+Mybatis实现Mysql分表》这篇文章主要为大家详细介绍了基于SpringBoot+Mybatis实现Mysql分表的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录基本思路定义注解创建ThreadLocal创建拦截器业务处理基本思路1.根据创建时间字段按年进

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生