Spring Boot MyBatis 通用Mapper插件集成



Mybatis在使用過程中需要三個東西,每張表對應一個XXMapper.java接口文件,每張表對應一個XXMapper.xml文件,每張表對應一個Entity的Java文件。   其中XXMapper.xml把XXMapper.java接口文件、Entity的Java文件 結合起來
在配置過程中:

MyBatisConfig.java
    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactoryBean() {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setTypeAliasesPackage("tk.mybatis.springboot.model");//每一張表對應的實體類

        //添加XML目錄
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));//每張表對應的xml文件
            return bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }

 

import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;

import java.util.Properties;

/**
 * MyBatis掃描接口,使用的tk.mybatis.spring.mapper.MapperScannerConfigurer,如果你不使用通用Mapper,可以改為org.xxx...
 *
 * @author liuzh
 * @since 2015-12-19 14:46
 */
@Configuration
//TODO 注意,由於MapperScannerConfigurer執行的比較早,所以必須有下面的注解
@AutoConfigureAfter(MyBatisConfig.class)
public class MyBatisMapperScannerConfig {

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer() {
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("tk.mybatis.springboot.mapper");//每張表對應的XXMapper.java interface類型的Java文件
        Properties properties = new Properties();
        properties.setProperty("mappers", "tk.mybatis.springboot.util.MyMapper");
        properties.setProperty("notEmpty", "false");
        properties.setProperty("IDENTITY", "MYSQL");
        mapperScannerConfigurer.setProperties(properties);
        return mapperScannerConfigurer;
    }

}

 

 


sqlSessionFactoryBeanName
屬性

這個屬性一般都用不到,只有當你配置多數據源的時候,這是會有多個sqlSessionFactory,你就需要通過該屬性來指定哪一個sqlSessionFactory(值為SqlSessionFactoryBean <bean>配置中的id屬性)。


由於通用Mapper依賴JPA,所以還需要下載persistence-api-1.0.jar:

http://repo1.maven.org/maven2/javax/persistence/persistence-api/1.0/

http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/2.Integration.md


MyBatis通用Mapper3 通用Mapper都可以極大的方便開發人員。可以隨意的按照自己的需要選擇通用方法,還可以很方便的開發自己的通用方法。 極其方便的使用MyBatis單表的增刪改查。
支持單表操作,不支持通用的多表聯合查詢。 通用 Mapper 支持 Mybatis-3.2.4 及以上版本 特別強調 不是表中字段的屬性必須加 @Transient 注解
通用 Mapper 不支持 devtools 熱加載,devtools 排除實體類包即可,
配置方式參考:using-boot-devtools-customizing-classload(http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html#using-boot-devtools-customizing-classload)
看本文之前,請確保你已經在SpringBoot中集成MyBatis,並能正常使用。

Spring DevTools 配置
感謝emf1002提供的解決方案。

在使用 DevTools 時,通用Mapper經常會出現 class x.x.A cannot be cast to x.x.A。

同一個類如果使用了不同的類加載器,就會產生這樣的錯誤,所以解決方案就是讓通用Mapper和實體類使用相同的類加載器即可。

DevTools 默認會對 IDE 中引入的所有項目使用 restart 類加載器,對於引入的 jar 包使用 base 類加載器,因此只要保證通用Mapper的jar包使用 restart 類加載器即可。

在 src/main/resources 中創建 META-INF 目錄,在此目錄下添加 spring-devtools.properties 配置,內容如下:

restart.include.mapper=/mapper-[\\w-\\.]+jar
restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar
使用這個配置后,就會使用 restart 類加載加載 include 進去的 jar 包。




如果沒有,那么請先移步 http://blog.csdn.net/catoop/article/details/50553714 做了解后,再按本文步驟操作。

使用MyBatis在我們通過xml集中配置SQL,並通過創建接口Mapper文件來完成持久化DAO層(mybatis內部使用的是動態代理,所以我們不需要自己編寫實現類)。

然而在實際開發中,單表操作非常多,如果你也想像JPA、JDBC那樣做一個所謂的BaseDao。那么可以實現一個通用Mapper來達到目的。
現在有現成的通用Mapper插件,我們無需重新創造輪子(代碼是開源的,你也可以自己在其基礎上修改)。

通用Mapper插件網址:http://git.oschina.net/free/Mapper

 

 

 

https://yq.aliyun.com/articles/5831

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM