spring-boot | 整合通用Mabatis 分頁插件PageHelper


Mybatis通用Mapper介紹

Mybatis 通用 Mapper
極其方便的使用 Mybatis 單表的增刪改查,支持單表操作,不支持通用的多表聯合查詢
優點:
通用 Mapper 可以極大的方便開發人員。
為了讓您更方便的了解通用 Mapper,下面貼一段代碼來看實際效果。
通用Mapper
通用 Mapper 可以緩存,全部針對單表操作,每個實體類都需要繼承通用 Mapper 接口來獲得通用方法。

實際開發過程中,我們對數據庫單表的操作情況有很多,有了通用mapper插件, 我們實現相對應的接口,整合到spring boot項目中,減少了xml文件的配置,使我們的開發更高效。

如何整合通用Mapper插件

引入依賴

    <!--mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<!--pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
<!--阿里巴巴數據源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.25</version>
</dependency>

通過pom.xml文件引入通用Mapper依賴,同時引入了druid數據源和PageHelper分頁的插件,通過 springboot配置文件application.properties進行配置。

# 驅動配置信息
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url = jdbc:mysql://localhost:3306/master?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver

連接池的配置信息

初始化大小,最小,最大

spring.druid.initialSize=5

spring.druid.minIdle=5

spring.druid.maxActive=20

配置獲取連接等待超時的時間

spring.druid.maxWait=60000

配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒

spring.druid.timeBetweenEvictionRunsMillis=60000

配置一個連接在池中最小生存的時間,單位是毫秒

spring.druid.minEvictableIdleTimeMillis=300000

spring.druid.validationQuery=SELECT 1 FROM DUAL

spring.druid.testWhileIdle=true

spring.druid.testOnBorrow=false

spring.druid.testOnReturn=false

spring.druid.poolPreparedStatements=true

spring.druid.maxPoolPreparedStatementPerConnectionSize=20

配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆

spring.druid.filters=stat,wall,log4j

通過connectProperties屬性來打開mergeSql功能;慢SQL記錄

spring.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

mybatis

掃描entrity包

mybatis.type-aliases-package=cn.jj.model

mybatis.mapper-locations=classpath:mapper/*.xml

mappers 多個接口時逗號隔開

mapper.mappers=tk.mybatis.mapper.common.Mapper

mapper.mappers=cn.jj.common.MyMapper

mapper.not-empty=false

mapper.identity=MYSQL

pagehelper

pagehelper.helperDialect=mysql

pagehelper.reasonable=true

pagehelper.supportMethodsArguments=true

pagehelper.params=count=countSql

到這里,我們就做好了相關的配置。接着創建MyMapper接口繼承Mapper。


public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
}

創建實體Bean,使用通用Mapper一定要保證實體類字段和數據庫字段一致。如果不一致可以利用注解進行映射。

@Column(name = "nick")
private String name;
@Table(name = "city")
public class City implements Serializable{
private static final long serialVersionUID = 1L;
@Id
private String id;
private String name;
private String state;
public String getId() {</br>
    return id;</br>
}</br></br>

public void setId(String id) {</br>
    this.id = id;</br>
}</br></br>

public String getName() {</br>
    return name;</br>
}</br></br>

public void setName(String name) {</br>
    this.name = name;</br>
}</br></br>

public String getState() {</br>
    return state;</br>
}</br></br>

public void setState(String state) {</br>
    this.state = state;</br>
}</br></br>

}

接着,在Mapper接口層繼承剛才的MyMapper接口,到這里,單表的增刪改查已經實現了。


@Mapper
public interface CityMapper extends MyMapper<City>{
}

接着,我們通過測試類測試下,數據庫添加好相應數據。

    @Autowired
private CityMapper cityDao;

//查詢</br>
@Test</br>
public void selectAll() {</br>
    List&lt;City&gt; city = cityDao.selectAll();</br>
    for (City city2 : city) {</br>
        System.out.println("id:"+city2.getId()+"\t"+"name:"+city2.getName()+"\t"+"state:"+city2.getState());</br>
    }</br>
}</br>

控制台輸出結果如下:

1240

其他增刪改方法大家大家試着自己嘗試,也都特別簡單。數據庫一共有四條數據,接下來我們加上分頁插件。首先我們通過官網看下分頁插件所支持的數據庫和Mybatis的版本。

1240

可以看出PageHelper支持大部分主流關系型數據庫,引用分頁插件以后,Mybatis分頁會變得特別簡單,需要注意的是,在你需要進行分頁的 MyBatis 查詢方法前調用 PageHelper.startPage 靜態方法即可,緊跟在這個方法后的第一個MyBatis 查詢方法會被進行分頁。詳細的使用方法我們看下官網的例子。

例一:

//獲取第1頁,10條內容,默認查詢總數count
PageHelper.startPage(1, 10);
//緊跟着的第一個select方法會被分頁
List<Country> list = countryMapper.selectIf(1);
assertEquals(2, list.get(0).getId());
assertEquals(10, list.size());
//分頁時,實際返回的結果list類型是Page<E>,如果想取出分頁信息,需要強制轉換為Page<E>
assertEquals(182, ((Page) list).getTotal());

例二:

//request: url?pageNum=1&pageSize=10
//支持 ServletRequest,Map,POJO 對象,需要配合 params 參數
PageHelper.startPage(request);
//緊跟着的第一個select方法會被分頁
List<Country> list = countryMapper.selectIf(1);

//后面的不會被分頁,除非再次調用PageHelper.startPage

List<Country> list2 = countryMapper.selectIf(null);

//list1

assertEquals(2, list.get(0).getId());

assertEquals(10, list.size());

//分頁時,實際返回的結果list類型是Page<E>,如果想取出分頁信息,需要強制轉換為Page<E>,

//或者使用PageInfo類(下面的例子有介紹)

assertEquals(182, ((Page) list).getTotal());

//list2

assertEquals(1, list2.get(0).getId());

assertEquals(182, list2.size());

例三,使用PageInfo的用法:

//獲取第1頁,10條內容,默認查詢總數count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo對結果進行包裝
PageInfo page = new PageInfo(list);
//測試PageInfo全部屬性
//PageInfo包含了非常全面的分頁屬性 assertEquals(1, page.getPageNum());
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(183, page.getTotal());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());

下面是我們自己的service層查詢方法,使用PageHelper進行分頁,取出第二頁數據,每頁顯示兩條:

@Override
public List<City> selectAll() {
//分頁插件的使用 第一個參數是當前頁 第二個參數是每頁顯示的條數
PageHelper.startPage(2, 2);
return cityDao.selectAll();
}

再來看一下測試類:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MapperTest {

@Autowired</br>
private CityService cityService;</br></br>

@Autowired</br>
private UserService userService;</br></br>

//查詢</br>
@Test</br>
public void selectAll() {</br>
    List&lt;City&gt; city = cityService.selectAll();</br>
    for (City city2 : city) {</br>
        System.out.println("id:"+city2.getId()+"\t"+"name:"+city2.getName()+"\t"+"state:"+city2.getState());</br>
    }</br>
 }</br>

}

接下來我們開始測試,通過查看控制台輸出信息,說明分頁已經生效。數據庫一共是四條數據,我們取出第二頁數據,取出兩條。打印結果如下:


1240

到此,通用Mapper和PageHelper已經和spring boot整合完畢!spring boot 對於開發者來說正變得越來越高效、敏捷!
(完)


參考文章

Mybatis通用Mapper
PageHelper官方文檔

    </div>


免責聲明!

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



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