如何解决Mybatis实体别名支持通配符扫描问题
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,小编给大家分享一下如何解决Mybatis实体别名支持通配符扫描问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Mybat
千家信息网最后更新 2025年02月01日如何解决Mybatis实体别名支持通配符扫描问题
小编给大家分享一下如何解决Mybatis实体别名支持通配符扫描问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
Mybatis简介
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录
问题
Spring集成Mybatis的项目中,可以为指定包下的实体取别名,这样在Mapper xml文件中可以省略实体类的全路径名称,只写类名称即可;但是在多模块项目中,可能需要将实体放在不同的模块下,此时需要配置多路径扫描;
方式一:配置多个路径,逗号分隔符隔开
classpath*:mybatis/mapper/*.xml
方式二:采用通配符的方式配置,默认不支持此方式,需要对 SqlSessionFactoryBean
进行重写,使其支持通配符扫描
package com.dongzz.cms.common.plugin.mybatis;import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;import org.springframework.core.type.classreading.CachingMetadataReaderFactory;import org.springframework.core.type.classreading.MetadataReader;import org.springframework.core.type.classreading.MetadataReaderFactory;import org.springframework.util.ClassUtils;import java.io.IOException;import java.util.HashSet;import java.util.Set;/** * 自定义 SqlSessionFactoryBean */public class SqlSessionFactoryBean extends org.mybatis.spring.SqlSessionFactoryBean { public static final Logger logger = LoggerFactory.getLogger(SqlSessionFactoryBean.class); public static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; // 别名通配符 /** * 重写 实体别名扩展 支持通配符 * * @param typeAliasesPackage 格式: com.dongzz.cms.modules.**.entity */ @Override public void setTypeAliasesPackage(String typeAliasesPackage) { // 资源路径解析器 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); // 元数据读取 MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); // 解析路径 typeAliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(typeAliasesPackage) + "/" + DEFAULT_RESOURCE_PATTERN; logger.debug("别名包通配符:" + typeAliasesPackage); try { Setresult = new HashSet<>(); // 别名包路径集合 Resource[] resources = resolver.getResources(typeAliasesPackage); // 根据路径 读取所有的类资源 if (resources != null && resources.length > 0) { MetadataReader metadataReader = null; for (Resource resource : resources) { if (resource.isReadable()) { metadataReader = metadataReaderFactory.getMetadataReader(resource); // 读取类的信息,每个 Resource 都是一个类资源 try { result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName()); // 存储类对应的包路径 } catch (ClassNotFoundException e) { e.printStackTrace(); } } } } if (result.size() > 0) { logger.debug("别名包路径集合:" + StringUtils.join(result.toArray(), ",")); super.setTypeAliasesPackage(StringUtils.join(result.toArray(), ",")); } else { logger.warn("Parameter typeAliasesPackage:" + typeAliasesPackage + ", not found any packages."); } } catch (IOException e) { e.printStackTrace(); } }}
Xml配置:
classpath*:mybatis/mapper/*.xml
通过自定义 SqlSessionFactoryBean
使得mybatis支持通配符别名扫描,这样在多模块项目中,扫描路径仅需要配置一次即可;
以上是"如何解决Mybatis实体别名支持通配符扫描问题"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
路径
别名
通配符
支持
实体
配置
方式
问题
模块
篇文章
资源
项目
信息
内容
数据
存储
不同
优秀
普通
高级
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
电脑共享服务器管理员密码
sql创建数据库名称
工行软件开发中心待遇
网络安全法什么时候起施行
理解网络安全的关键是什么
项目团队完成了一个从旧数据库
数据库表删掉后再附加报错
怀柔区信息网络技术推广好处
网络安全访谈节目
打开公众号服务器安全狗
土木工程去软件开发
数据库导入到另一个sql
浪潮服务器系统故障灯红色
学网络安全读博好吗
网络技术三级难过吗
网络技术后端是什么意思
维宏电子软件开发怎么样
哪个软件开发方面最好
广州家政软件开发
互联网软件开发发展前景
服务器安全永久免费的吗
jsp提取数据库信息
mac可以运行数据库吗
用友t1服务器连接失败
在服务器中设置重生点怎么办
乐刻网络技术双休
苹果和安卓软件开发哪个
公安部网络安全保卫局黄局长
网络安全平台宁波
计算机操作试题视频数据库应用