最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Mybatis實體別名支持通配符掃描問題小結(jié)

 更新時間:2022年01月20日 16:18:09   作者:暴走編程  
MyBatis可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄,這篇文章主要介紹了Mybatis實體別名支持通配符掃描的問題,需要的朋友可以參考下

Mybatis簡介

MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。

MyBatis 避免了幾乎所有的 JDBC 代碼和手動設(shè)置參數(shù)以及獲取結(jié)果集。

MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄

問題

Spring集成Mybatis的項目中,可以為指定包下的實體取別名,這樣在Mapper xml文件中可以省略實體類的全路徑名稱,只寫類名稱即可;但是在多模塊項目中,可能需要將實體放在不同的模塊下,此時需要配置多路徑掃描;

方式一:配置多個路徑,逗號分隔符隔開

	<!-- sqlSessionFactory spring 整合 mybatis -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    	<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="typeAliasesPackage" value="com.dongzz.cms.modules.a.entity,com.dongzz.cms.modules.b.entity" />
    </bean>

方式二:采用通配符的方式配置,默認(rèn)不支持此方式,需要對 SqlSessionFactoryBean 進(jìn)行重寫,使其支持通配符掃描

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"; //  別名通配符

    /**
     * 重寫 實體別名擴(kuò)展 支持通配符
     *
     * @param typeAliasesPackage 格式: com.dongzz.cms.modules.**.entity
     */
    @Override
    public void setTypeAliasesPackage(String typeAliasesPackage) {
        // 資源路徑解析器
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        // 元數(shù)據(jù)讀取
        MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver);
        // 解析路徑
        typeAliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(typeAliasesPackage) + "/" + DEFAULT_RESOURCE_PATTERN;
        logger.debug("別名包通配符:" + typeAliasesPackage);
        try {
            Set<String> result = new HashSet<>(); // 別名包路徑集合
            Resource[] resources = resolver.getResources(typeAliasesPackage); // 根據(jù)路徑 讀取所有的類資源
            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()); // 存儲類對應(yīng)的包路徑
                        } 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配置:

	<!-- sqlSessionFactory 采用自定義的 -->
	<bean id="sqlSessionFactory" class="com.dongzz.cms.common.plugin.mybatis.SqlSessionFactoryBean">
    	<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="typeAliasesPackage" value="com.dongzz.cms.modules.**.entity" />
    </bean>

通過自定義 SqlSessionFactoryBean 使得mybatis支持通配符別名掃描,這樣在多模塊項目中,掃描路徑僅需要配置一次即可;

到此這篇關(guān)于Mybatis實體別名支持通配符掃描的文章就介紹到這了,更多相關(guān)Mybatis通配符掃描內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計模式中的工廠及抽象工廠模式解析

    Java設(shè)計模式中的工廠及抽象工廠模式解析

    這篇文章主要介紹了Java設(shè)計模式中的工廠及抽象工廠模式解析,工廠模式作為創(chuàng)建型設(shè)計模式中常見的設(shè)計方法,一般情況下,工廠模式分為3種,簡單工作、工廠方法、抽象工作,其實簡單工廠只是工廠方法的一種特例,需要的朋友可以參考下
    2023-12-12
  • 帶大家深入了解Spring事務(wù)

    帶大家深入了解Spring事務(wù)

    Spring框架提供統(tǒng)一的事務(wù)抽象,通過統(tǒng)一的編程模型使得應(yīng)用程序可以很容易地在不同的事務(wù)框架之間進(jìn)行切換. 在學(xué)習(xí)Spring事務(wù)前,我們先對數(shù)據(jù)庫事務(wù)進(jìn)行簡單的介紹。,需要的朋友可以參考下
    2021-05-05
  • Java List的remove()方法踩坑

    Java List的remove()方法踩坑

    Java的List在刪除元素時,一般會用list.remove(o)/remove(i)方法。在使用時,容易觸碰陷阱,本文就來介紹一下容易踩的坑,感興趣的可以了解一下
    2021-10-10
  • springboot配置druid連接池的方法示例

    springboot配置druid連接池的方法示例

    這篇文章主要介紹了springboot配置druid連接池的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java如何通過"枚舉的枚舉"表示二級分類的業(yè)務(wù)場景

    Java如何通過"枚舉的枚舉"表示二級分類的業(yè)務(wù)場景

    這篇文章主要介紹了Java如何通過"枚舉的枚舉"表示二級分類的業(yè)務(wù)場景問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 通過一個命令輕松切換Java的版本

    通過一個命令輕松切換Java的版本

    這篇文章主要給大家介紹了如何通過一個命令輕松實現(xiàn)切換Java的版本,通過本文介紹的方法,大家就可以將jdk版本之間輕松切換,需要的朋友可以參考學(xué)習(xí),下面跟著小編一起來看看吧。
    2017-05-05
  • SpringBoot整合Druid、Redis的示例詳解

    SpringBoot整合Druid、Redis的示例詳解

    Druid 是阿里巴巴開源平臺上一個數(shù)據(jù)庫連接池實現(xiàn),結(jié)合了 C3P0、DBCP 等 DB 池的優(yōu)點(diǎn),同時加入了日志監(jiān)控。這篇文章主要介紹了SpringBoot整合Druid、Redis的實例詳解,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • mybatis某些字段無法映射成功的解決

    mybatis某些字段無法映射成功的解決

    這篇文章主要介紹了mybatis某些字段無法映射成功的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Java操作redis設(shè)置第二天凌晨過期的解決方案

    Java操作redis設(shè)置第二天凌晨過期的解決方案

    這篇文章主要介紹了Java操作redis設(shè)置第二天凌晨過期的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java內(nèi)存溢出場景及解決方案

    Java內(nèi)存溢出場景及解決方案

    內(nèi)存溢出是Java應(yīng)用開發(fā)中常見的問題,但通過合理的代碼優(yōu)化、內(nèi)存管理以及JVM參數(shù)調(diào)整,我們可以有效地避免和解決這類問題,這篇文章主要介紹了Java內(nèi)存溢出場景及解決辦法,需要的朋友可以參考下
    2024-04-04

最新評論

鄯善县| 洛川县| 巴里| 光泽县| 德安县| 东乌| 澎湖县| 固原市| 武宁县| 延川县| 天长市| 白朗县| 新余市| 湘乡市| 柞水县| 河北省| 西乌珠穆沁旗| 四川省| 阜新市| 南木林县| 洱源县| 大方县| 通州区| 广宗县| 滦平县| 南投市| 富民县| 庆云县| 元江| 麟游县| 敦化市| 五原县| 金塔县| 大田县| 宁陕县| 安宁市| 绥滨县| 聂荣县| 平湖市| 淮滨县| 日喀则市|