如何解决Mybatis实体别名支持通配符扫描问题
发表于:2024-10-06 作者:千家信息网编辑
千家信息网最后更新 2024年10月06日,小编给大家分享一下如何解决Mybatis实体别名支持通配符扫描问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Mybat
千家信息网最后更新 2024年10月06日如何解决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安全错误
数据库的锁怎样保障安全
闪之轨迹轨迹数据库
数据库自增字段
辽宁服务器机柜供应商家
黑魂3服务器什么时候
软件开发纠纷起诉流程
观塘区的网络技术公司
小鸟云服务器法人是谁
幼儿园校园网络安全手抄报文字
网络安全主题活动
宁国智能软件开发服务调试
浙江综合软件开发厂家
电脑网络安全密匙什么意思
数据库中的资金流入
深圳谦奕软件开发公司
争做优良网民共筑网络安全
网络安全宣传活动主题是
剑侠情缘三 服务器
总体国家安全观网络安全
模拟创建软件开发团队
阿里巴巴数据库开源项目
网络安全宣传周主题活动总结
蚂蚁金服数据库使用方式
大学生国家网络安全视频
2018网络安全教育宣传片
网络安全与前端开发那个稳定
计算机网络安全基础心得体会
常州软件开发
网络安全运营服务价格
西安app软件开发公司招聘
谁能清除数据库缓存