如何解决Mybatis实体别名支持通配符扫描问题
发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,小编给大家分享一下如何解决Mybatis实体别名支持通配符扫描问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Mybat
千家信息网最后更新 2025年11月17日如何解决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 { Set result = 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安全错误
数据库的锁怎样保障安全
网络安全线上晚会
甘肃天水网络安全宣传图片
网络安全解决方案和服务
东莞软件开发教学
香港轻量云服务器可以备案吗
荆门社区团购软件开发
雪野湖网络安全论坛
我的世界免登录服务器
互联网科技口红
有UHC的服务器
历年a股数据库
用dos命令连接数据库
数据库比对均未发现高度同源序列
web软件开发优点缺陷
软件开发很赚
无锡哪个地区搞软件开发比较好
新华三服务器怎么安装
工业互联网的网络安全
服务器的安全规范
辽宁pdu服务器电源供应商
数据库数据验证怎么做
同方服务器武器装备名录
邮箱域名服务器地址是什么
光纤服务器硬盘
震撼服务器
昆虫记思维导图软件开发
两个数据库怎么连接
数据库查询指定字段
广东公安招聘网络安全人才
华为服务器bmc默认地址是多少