首页 > 作文

关于Mybatis实体别名支持通配符扫描问题小结

更新时间:2023-04-04 16:45:13 阅读: 评论:0

目录
mybatis简介问题

mybatis简介

mybatis 是一款优秀的持久层框架,它支持定制化 sql、存储过程以及高级映射。

mybatis 避免了几乎所有的 jdbc 代码和手动设置参数以及获取结果集。

mybatis 可以使用简单的 xml 或注解来配置和映射原生信息,将接口和 java 的 pojos(plain old java objects,普通的 java对象)映射成数据库中的记录

问题

spring集成mybatis的项目中,可以为指定包下的实体取别名,这样在mapper xml文件中可以省略实体类的全路径名称,只写类名称即可;但是在多模块项目中,可能需要将实体放在不同的模块下,此时需要配置多路径扫描;

方式一:配置多个路径,逗号分隔符隔开

<!-- sqls李易峰的现任女友sionfactory spring 整合 mybatis --><bean id="sqlssionfactory" class="org.mybatis.spring.sqlssionfactorybean">    <property name="datasource" ref="datasource" />    <!-- mybatis 核心配置 -->        <property name="configlocation" value="classpath:mybatis/mybatis-config.xml"/>        <!-- mapper xml -->        <property name="mapperlocations">        <array>        <value>classpath*:mybatis/mapper/*.xml</v南湘雅alue>        </array>        </property>        <!-- 实体类别名 多个路径扫描 -->        <property name="typealiaspackage" value="com.dongzz.cms.modules.a.entity,com.dongzz.cms.modules.b.entity" />    </bean>

方式二:采用通配符的方式配置,默认不支持此方式,需要对sqlssionfactorybean进行重写,使其支持通配符扫描

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.hasht;import java.util.t;/** * 自定义 sqlssionfactorybean */public class sqlssionfactorybean extends org.mybatis.spring.sqlssionfactorybean {    public static final logger logger = loggerfactory.getlogger(sqlssionfactorybean.class);    public static final string default_resource_pattern = "**/*.class"; //  别名通配符    /**     * 重写 实体别名扩展 支持通配符     *     * @param typealiaspackage 格式: com.dongzz.cms.modules.**.entity     */    @override    public void ttypealiaspackage(string typealiaspackage) {        // 资源路径解析器        resourcepatternresolver resolver = new pathmatchingresourcepatternresolver();        // 元数据读取        metadatareaderfactory metadatareaderfactory = new cachingmetadatareaderfactory(resolver);        // 解析路径        typealiaspackage = resourcepatternresolver.classpath_all_url_prefix + classutils.convertclassnametoresourcepath(typealiaspackage) + "/" + default_resource_pattern;        logger.debug("别名包通配符:" + typealiaspackage);        try {            t<string> result = new hasht<>(); // 别名包路径集合            resource[] resources = resolver.getresources(typealiaspackage); // 根据路径 读取所有的类资源            if 211什么意思(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.ttypealiaspackage(stringutils.join(result.toarray(), ","));            } el {                logger.warn("parameter typeali长安秋望杜牧aspackage:" + typealiaspackage + ", not found any packages.");            }        } catch (ioexception e) {            e.printstacktrace();        }    }}

xml配置:

<!-- sqlssionfactory 采用自定义的 --><bean id="sqlssionfactory" class="com.dongzz.cms.common.plugin.mybatis.sqlssionfactorybean">    <property name="datasource" ref="datasource" />    <!-- mybatis 核心配置 -->        <property name="configlocation" value="classpath:mybatis/mybatis-config.xml"/>        <!-- mapper xml -->        <property name="mapperlocations">        <array>        <value>classpath*:mybatis/mapper/*.xml</value>        </array>        </property>        <!-- 实体类别名 通配符扫描 -->        <property name="typealiaspackage" value="com.dongzz.cms.modules.**.entity" />    </bean>

通过自定义sqlssionfactorybean使得mybatis支持通配符别名扫描,这样在多模块项目中,扫描路径仅需要配置一次即可;

到此这篇关于mybatis实体别名支持通配符扫描的文章就介绍到这了,更多相关mybatis通配符扫描内容请搜索www.887551.com登报遗失声明以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 16:45:11,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/26c422da27618120d4d082d3821f53da.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:关于Mybatis实体别名支持通配符扫描问题小结.doc

本文 PDF 下载地址:关于Mybatis实体别名支持通配符扫描问题小结.pdf

标签:通配符   别名   路径   实体
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图