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

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

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

<!-- 單元測試依賴 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 -->

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

後期項目會將全部的配置放在configuration包下,具體數據庫配置以下github

@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;
    }
}

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

二、使用了阿里開源的Druid鏈接池,SpringBoot默認使用的鏈接池是Hikari,二者之間的優缺點後續將會單獨介紹,配置成功後啓動項目,咱們能夠看到項目當前使用的是那種鏈接池,以下圖:
spring

三、在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,具體小版本以官網公告爲準)sql

<?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>

3、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());
        }
    }

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

Git代碼地址:https://gitee.com/Somta/Sprin...
原文地址:http://somta.com.cn/#/blog/vi...

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

相關文章
相關標籤/搜索