1. 程式人生 > >SpringBoot2.0之五 優雅整合SpringBoot2.0+MyBatis+druid+PageHelper

SpringBoot2.0之五 優雅整合SpringBoot2.0+MyBatis+druid+PageHelper

pass port println simple 命名 use 字段 prope tid

??上篇文章我們介紹了SpringBoot和MyBatis的整合,可以說非常簡單快捷的就搭建了一個web項目,但是在一個真正的企業級項目中,可能我們還需要更多的更加完善的框架才能開始真正的開發,比如連接池、分頁插件等。下面我們就來看看在SpringBoot中怎麽快速的集成這些東西。

一、新建一個項目,引入相關依賴,加粗的是本項目中新引入的依賴

<!-- 單元測試依賴 start -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!-- 單元測試依賴 end -->
    
    <dependency>
        <groupId>org.springframework
.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1
</version> </dependency> <!-- 數據庫連接池 start --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.8</version> </dependency> <!-- 數據庫連接池 end --> <!-- mysql連接 start --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- mysql連接 end --> <!-- pagehelper分頁 start --> <dependency> <groupId>com.github
.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency> <!-- pagehelper分頁 start -->

二、為了項目配置的整潔性,在SpringBoot-mybatis的項目基礎上,我將數據庫和MyBatis的相關操作進行了統一配置,使得配置根據清晰簡單,項目結構如下

技術分享圖片

後期項目會將所有的配置放在configuration包下,具體數據庫配置如下

@Configuration
@MapperScan(value = "com.somta.springboot.dao")
public class MyBatisConfiguration {

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    @Value("${spring.datasource.url}")
    private String url;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Bean
    public DruidDataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(this.driverClassName);
        dataSource.setUrl(this.url);
        dataSource.setUsername(this.username);
        dataSource.setPassword(this.password);

        dataSource.setInitialSize(5);
        dataSource.setMaxActive(30);
        dataSource.setMinIdle(5);
        dataSource.setMaxWait(60000);
        return dataSource;
    }

    @Bean(name="sqlSessionFactory")
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource) throws IOException {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/**/Mysql_*Mapper.xml"));
        return sqlSessionFactoryBean;
    }
}

1、將Dao層掃描和MyBatis文件的掃描統一放在配置文件中

2、使用了阿裏開源的Druid連接池,SpringBoot默認使用的連接池是Hikari,兩者之間的優缺點後續將會單獨介紹,配置成功後啟動項目,我們可以看到項目當前使用的是那種連接池,如下圖:
技術分享圖片

3、在src/main/resources下面新增了一個mybatis-config文件,該文件配置了MyBatis與數據庫的相關信息,和PageHelper的相關配置,註意:(在不同的PageHelper版本中PageHelper的攔截器發生了變化,PageHelper-4.1.1中使用的是com.github.pagehelper.PageHelper,在PageHelper-5.1.2中使用的攔截器是com.github.pagehelper.PageInterceptor,具體小版本以官網公告為準)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties>
        <property name="dialect" value="mysql"/>
    </properties>
    <settings>
        <!-- 這個配置使全局的映射器啟用或禁用緩存。系統默認值是true -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 全局啟用或禁用延遲加載。當禁用時,所有關聯對象都會即時加載。 系統默認值是true -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 允許或不允許多種結果集從一個單獨的語句中返回(需要適合的驅動)。 系統默認值是true -->
        <setting name="multipleResultSetsEnabled" value="true"/>
        <!--使用列標簽代替列名。不同的驅動在這方便表現不同。參考驅動文檔或充分測試兩種方法來決定所使用的驅動。 系統默認值是true -->
        <setting name="useColumnLabel" value="true"/>
        <!--允許 JDBC 支持生成的鍵。需要適合的驅動。如果設置為 true 則這個設置強制生成的鍵被使用,盡管一些驅動拒絕兼容但仍然有效(比如
            Derby)。 系統默認值是false -->
        <setting name="useGeneratedKeys" value="false"/>
        <!--配置默認的執行器。SIMPLE 執行器沒有什麽特別之處。REUSE 執行器重用預處理語句。BATCH 執行器重用語句和批量更新 系統默認值是SIMPLE -->
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <!--設置超時時間,它決定驅動等待一個數據庫響應的時間。 系統默認值是null -->
        <setting name="defaultStatementTimeout" value="25000"/>
        <!--設置字段和類是否支持駝峰命名的屬性。 系統默認值是false -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 打印查詢語句 -->  
        <!-- <setting name="logImpl" value="STDOUT_LOGGING" /> -->  
    </settings>
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 該參數默認為false -->
            <!-- 設置為true時,會將RowBounds第一個參數offset當成pageNum頁碼使用 -->
            <!-- 和startPage中的pageNum效果一樣-->
            <property name="offsetAsPageNum" value="true"/>
            <!-- 該參數默認為false -->
            <!-- 設置為true時,使用RowBounds分頁會進行count查詢 -->
            <property name="rowBoundsWithCount" value="true"/>
            <!-- 設置為true時,如果pageSize=0或者RowBounds.limit = 0就會查詢出全部的結果 -->
            <!-- (相當於沒有執行分頁查詢,但是返回結果仍然是Page類型)-->
            <property name="pageSizeZero" value="true"/>
            <!-- 3.3.0版本可用 - 分頁參數合理化,默認false禁用 -->
            <!-- 啟用合理化時,如果pageNum<1會查詢第一頁,如果pageNum>pages會查詢最後一頁 -->
            <!-- 禁用合理化時,如果pageNum<1或pageNum>pages會返回空數據 -->
            <property name="reasonable" value="false"/>
            <!-- 支持通過Mapper接口參數來傳遞分頁參數 -->
            <property name="supportMethodsArguments" value="false"/>
            <!-- always總是返回PageInfo類型,check檢查返回類型是否為PageInfo,none返回Page -->
            <property name="returnPageInfo" value="none"/>
        </plugin>
    </plugins>
</configuration>

三、PageHelper的使用方法

PageHelper.startPage(pageNum, pageSize)只作用離它最近的一個查詢,更多與分頁相關的信息我們都可以在page對象中拿到,完全可以滿足各種情況下的分頁查詢。

@Test
public void testQueryUserList() throws Exception {
        int pageNum=1;
        int pageSize=10;
        Page<User> page = PageHelper.startPage(pageNum, pageSize);
        userDao.queryUserList();
        System.out.println("總共條數:"+page.getTotal());
        for (User user : page.getResult()) {
            System.out.println(user.getName());
        }
    }

看到如圖所示的輸出表示分頁插件配置成功了

技術分享圖片

Git代碼地址:https://gitee.com/songhu/SpringBoot/tree/master/SpringBoot-mybatis-expand
原文地址:http://somta.com.cn/#/blog/view/ef507e4e6e28434d9787ec715d406491

本文由明天的地平線創作,如想了解更多更詳細的內容,請關註一下公眾號,公眾號內將進行最新最實時的更新!

技術分享圖片

SpringBoot2.0之五 優雅整合SpringBoot2.0+MyBatis+druid+PageHelper