springboot 打jar包 mybatis的別名失效

1、mybatis默認(rèn)使用VFS,所以要自己重寫改方法,如下


package com.jingbo.houtai.config;

import org.apache.ibatis.io.VFS;

import org.springframework.core.io.Resource;

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import org.springframework.core.io.support.ResourcePatternResolver;

import java.io.IOException;

import java.net.URI;

import java.net.URL;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

/**

* Spring Boot集成MyBatis打包成jar時,找不到類的問題

* @author liufeng

*/

public class MySpringBootVFSextends VFS {

@Override

    public boolean isValid() {

return true;

    }

@Override

    protected Listlist(URL url, String path)throws IOException {

ClassLoader cl =this.getClass().getClassLoader();

        ResourcePatternResolver resolver =new PathMatchingResourcePatternResolver(cl);

        Resource[] resources = resolver.getResources(path +"/**/*.class");

        List resources1 = Arrays.asList(resources);

        List resourcePaths =new ArrayList();

        for (Resource resource: resources1) {

resourcePaths.add(preserveSubpackageName(resource.getURI(), path));

        }

return resourcePaths;

    }

private static StringpreserveSubpackageName(final URI uri, final String rootPath) {

final String uriStr = uri.toString();

        final int start = uriStr.indexOf(rootPath);

        return uriStr.substring(start, uriStr.length());

    }

}



2、自定義sqlsessionFactory


import org.apache.ibatis.session.SqlSessionFactory;

import org.mybatis.spring.SqlSessionFactoryBean;

import org.springframework.beans.factory.annotation.Qualifier;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration

public class MybatisConfig {

@Bean(name ="sqlSessionFactory")

public SqlSessionFactoryclusterSqlSessionFactory(@Qualifier("dataSource") DataSource dataSource)

throws Exception {

final SqlSessionFactoryBean sessionFactory =new SqlSessionFactoryBean();

        sessionFactory.setDataSource(dataSource);

        sessionFactory.setMapperLocations(

new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*Mapper.xml"));

        sessionFactory.setTypeAliasesPackage("com.jingbo.houtai.entity");

        sessionFactory.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);

        //MyBatis無法掃描Spring Boot別名的Bug 添加下面這行代碼

        sessionFactory.setVfs(MySpringBootVFS.class);

        return sessionFactory.getObject();

    }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容