SpringBoot2.0之五 優雅整合SpringBoot2.0+MyBatis+druid+PageHelper
??上篇文章我們介紹了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