国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一起來學(xué)SpringBoot | 第八篇:通用Mapper與分頁插件的集成

韓冰 / 934人閱讀

摘要:通用是為了解決使用中的基本操作,使用它可以很方便的進行開發(fā),可以節(jié)省開發(fā)人員大量的時間。當該參數(shù)設(shè)置為時,時會查詢第一頁,超過總數(shù)時,會查詢最后一頁。

SpringBoot 是為了簡化 Spring 應(yīng)用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關(guān)的依賴就可以輕易的搭建出一個 WEB 工程

在一起來學(xué)SpringBoot | 第七篇:整合Mybatis一文中,我們介紹了Mybatis這款優(yōu)秀的框架,順便提及了民間大神開發(fā)的兩款插件通用MapperPageHelper,從此告別簡單CURD代碼的編寫....

插件介紹

以下兩款插件作者均是同一個人,如果你想深入了解Mybatis以及插件開發(fā)可以購買作者的書籍

京東: https://item.jd.com/12103309.html

當當: http://product.dangdang.com/25098208.html

分頁插件

GIT地址: https://github.com/pagehelper/Mybatis-PageHelper

在沒有分頁插件之前,寫一個分頁需要兩條SQL語句,一條查詢一條統(tǒng)計,然后才能計算出頁碼,這樣的代碼冗余而又枯燥,更重要的一點是數(shù)據(jù)庫遷移,眾所周知不同的數(shù)據(jù)庫分頁寫法是不同的,而Mybatis不同于Hibernate的是它只提供動態(tài)SQL和結(jié)果集映射。值得慶幸的是,它雖然沒有為分頁提供良好的解決方案,但卻提供了Interceptor以供開發(fā)者自己擴展,這也是這款分頁插件的由來....

通用Mapper

GIT地址: https://gitee.com/free/Mapper

通用 Mapper 是一個可以實現(xiàn)任意 MyBatis 通用方法的框架,項目提供了常規(guī)的增刪改查操作以及 Example 相關(guān)的單表操作。通用 Mapper 是為了解決 MyBatis 使用中 90% 的基本操作,使用它可以很方便的進行開發(fā),可以節(jié)省開發(fā)人員大量的時間。

導(dǎo)入依賴

pom.xml 中添加通用Mapper與分頁插件的依賴包



    tk.mybatis
    mapper-spring-boot-starter
    2.0.2



    com.github.pagehelper
    pagehelper-spring-boot-starter
    1.2.5



    mysql
    mysql-connector-java



    org.springframework.boot
    spring-boot-starter-web



    org.springframework.boot
    spring-boot-starter-test
    test
屬性配置

application.properties 文件中分別添加上數(shù)據(jù)庫、Mybatis、通用MapperPageHelper的屬性配置,這里只提供了常見場景的配置,更全的配置可以參考上文所述的文文檔(#^.^#)

spring.datasource.url=jdbc:mysql://localhost:3306/chapter7?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false
spring.datasource.password=root
spring.datasource.username=root
# 如果想看到mybatis日志需要做如下配置
logging.level.com.battcn=DEBUG
########## Mybatis 自身配置 ##########
mybatis.mapper-locations=classpath:com/battcn/mapper/*.xml
mybatis.type-aliases-package=com.battcn.entity
# 駝峰命名規(guī)范 如:數(shù)據(jù)庫字段是  order_id 那么 實體字段就要寫成 orderId
mybatis.configuration.map-underscore-to-camel-case=true
########## 通用Mapper ##########
# 主鍵自增回寫方法,默認值MYSQL,詳細說明請看文檔
mapper.identity=MYSQL
mapper.mappers=tk.mybatis.mapper.common.BaseMapper
# 設(shè)置 insert 和 update 中,是否判斷字符串類型!=""
mapper.not-empty=true
# 枚舉按簡單類型處理
mapper.enum-as-simple-type=true
########## 分頁插件 ##########
pagehelper.helper-dialect=mysql
pagehelper.params=count=countSql
pagehelper.reasonable=false
pagehelper.support-methods-arguments=true
通用Mapper

mapper.enum-as-simple-type: 枚舉按簡單類型處理,如果有枚舉字段則需要加上該配置才會做映射

mapper.not-empty: 設(shè)置以后,會去判斷 insert 和 update 中符串類型!=""

分頁插件

pagehelper.reasonable: 分頁合理化參數(shù),默認值為false。當該參數(shù)設(shè)置為 true 時,pageNum<=0 時會查詢第一頁, pageNum>pages(超過總數(shù)時),會查詢最后一頁。默認false 時,直接根據(jù)參數(shù)進行查詢。

support-methods-arguments: 支持通過 Mapper 接口參數(shù)來傳遞分頁參數(shù),默認值false,分頁插件會從查詢方法的參數(shù)值中,自動根據(jù)上面 params 配置的字段中取值,查找到合適的值時就會自動分頁。

注意事項

由于 mybatis.mapper-locations=classpath:com/battcn/mapper/*.xml配置的在java package中,而Spring Boot默認只打入java package -> *.java,所以我們需要給pom.xml文件添加如下內(nèi)容


    
        
            src/main/resources
        
        
            src/main/java
            
                **/*.xml
            
            true
        
    
    
        
            org.springframework.boot
            spring-boot-maven-plugin
        
    
具體編碼

完成基本配置后,接下來進行具體的編碼操作。

表結(jié)構(gòu)

創(chuàng)建一張 t_user 的表

CREATE TABLE `t_user` (
  `id` int(8) NOT NULL AUTO_INCREMENT COMMENT "主鍵自增",
  `username` varchar(50) NOT NULL COMMENT "用戶名",
  `password` varchar(50) NOT NULL COMMENT "密碼",
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT="用戶表";
實體類

通用Mapper采用了JPA規(guī)范包中的注解,這種的設(shè)計避免了重復(fù)造輪子,更是讓Spring Data Jpa的應(yīng)用可以輕松切換到Mybatis

package com.battcn.entity;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;

/**
 * @author Levin
 * @since 2018/5/10 0007
 */
@Table(name = "t_user")
public class User implements Serializable {

    private static final long serialVersionUID = 8655851615465363473L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String username;
    private String password;
    // TODO  省略get set
}
持久層

為了更好的讓熟悉它,此處模擬了一個自定義的SQL,可以發(fā)現(xiàn)使用 通用Mapper 后并不會破壞原有代碼結(jié)構(gòu)

UserMapper

繼承 BaseMapper 就可以了,這點是不是有點類似 JpaRepository,同時也可以根據(jù)自己需要擴展出更適合自己項目的BaseMapper,它的靈活也是眾多開發(fā)者喜愛的因素之一

package com.battcn.mapper;

import com.battcn.entity.User;
import org.apache.ibatis.annotations.Mapper;
import tk.mybatis.mapper.common.BaseMapper;

/**
 * t_user 操作,繼承 BaseMapper 就可以了,是不是有點類似 JpaRepository
 *
 * @author Levin
 * @since 2018/5/10 0007
 */
@Mapper
public interface UserMapper extends BaseMapper {

    /**
     * 根據(jù)用戶名統(tǒng)計(TODO 假設(shè)它是一個很復(fù)雜的SQL)
     *
     * @param username 用戶名
     * @return 統(tǒng)計結(jié)果
     */
    int countByUsername(String username);
}
UserMapper 映射文件




  
測試

完成數(shù)據(jù)訪問層接口后,編寫一個junit測試類來檢驗代碼的正確性。

package com.battcn;

import com.battcn.entity.User;
import com.battcn.mapper.UserMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

/**
 * @author Levin
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter7ApplicationTests {

    private static final Logger log = LoggerFactory.getLogger(Chapter7ApplicationTests.class);

    @Autowired
    private UserMapper userMapper;

    @Test
    public void test1() throws Exception {
        final User user1 = new User("u1", "p1");
        final User user2 = new User("u1", "p2");
        final User user3 = new User("u3", "p3");
        userMapper.insertSelective(user1);
        log.info("[user1回寫主鍵] - [{}]", user1.getId());
        userMapper.insertSelective(user2);
        log.info("[user2回寫主鍵] - [{}]", user2.getId());
        userMapper.insertSelective(user3);
        log.info("[user3回寫主鍵] - [{}]", user3.getId());
        final int count = userMapper.countByUsername("u1");
        log.info("[調(diào)用自己寫的SQL] - [{}]", count);

        // TODO 模擬分頁
        userMapper.insertSelective(new User("u1", "p1"));
        userMapper.insertSelective(new User("u1", "p1"));
        userMapper.insertSelective(new User("u1", "p1"));
        userMapper.insertSelective(new User("u1", "p1"));
        userMapper.insertSelective(new User("u1", "p1"));
        userMapper.insertSelective(new User("u1", "p1"));
        userMapper.insertSelective(new User("u1", "p1"));
        userMapper.insertSelective(new User("u1", "p1"));
        userMapper.insertSelective(new User("u1", "p1"));
        userMapper.insertSelective(new User("u1", "p1"));
        // TODO 分頁 + 排序 this.userMapper.selectAll() 這一句就是我們需要寫的查詢,有了這兩款插件無縫切換各種數(shù)據(jù)庫
        final PageInfo pageInfo = PageHelper.startPage(1, 10).setOrderBy("id desc").doSelectPageInfo(() -> this.userMapper.selectAll());
        log.info("[lambda寫法] - [分頁信息] - [{}]", pageInfo.toString());

        PageHelper.startPage(1, 10).setOrderBy("id desc");
        final PageInfo userPageInfo = new PageInfo<>(this.userMapper.selectAll());
        log.info("[普通寫法] - [{}]", userPageInfo);
    }
}
總結(jié)

Mybatis官方文檔: http://www.mybatis.org/mybatis-3/zh/index.html

通用Mapper文檔: https://gitee.com/free/Mapper/wikis/1.1-java?parent=1.integration

分頁插件文檔: https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

目前很多大佬都寫過關(guān)于 SpringBoot 的教程了,如有雷同,請多多包涵,本教程基于最新的 spring-boot-starter-parent:2.0.1.RELEASE編寫,包括新版本的特性都會一起介紹...

說點什么

個人QQ:1837307557

battcn開源群(適合新手):391619659

微信公眾號(歡迎調(diào)戲):battcn

個人博客:http://blog.battcn.com/

全文代碼:https://github.com/battcn/spring-boot2-learning/tree/master/chapter7

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71361.html

相關(guān)文章

  • SpringBoot2.0之五 優(yōu)雅整合SpringBoot2.0+MyBatis+druid+Pa

    摘要:當禁用時,所有關(guān)聯(lián)對象都會即時加載。不同的驅(qū)動在這方便表現(xiàn)不同。參考驅(qū)動文檔或充分測試兩種方法來決定所使用的驅(qū)動。需要適合的驅(qū)動。系統(tǒng)默認值是設(shè)置字段和類是否支持駝峰命名的屬性。 ??上篇文章我們介紹了SpringBoot和MyBatis的整合,可以說非常簡單快捷的就搭建了一個web項目,但是在一個真正的企業(yè)級項目中,可能我們還需要更多的更加完善的框架才能開始真正的開發(fā),比如連接池、分...

    hatlonely 評論0 收藏0
  • 起來學(xué)SpringBoot | 第七篇:整合Mybatis

    摘要:但是鑒于國內(nèi)市場環(huán)境而言,掌握無異于是佳的選擇,低學(xué)習成本和動態(tài)解耦的特點使得更容易被人們所接受。 SpringBoot 是為了簡化 Spring 應(yīng)用的創(chuàng)建、運行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,我們只需遵循規(guī)范,引入相關(guān)的依賴就可以輕易的搭建出一個 WEB 工程 MyBatis 是一款優(yōu)秀的持久層框架,它支持...

    includecmath 評論0 收藏0
  • springboot+mybatis+mybatis-plus分頁查詢(簡單實現(xiàn))

    摘要:讀取控制臺內(nèi)容請輸入請輸入正確的代碼生成器全局配置實體屬性注解數(shù)據(jù)源配置包配置這里有個模塊名的配置,可以注釋掉不用。 最近在研究mybatis,然后就去找簡化mybatis開發(fā)的工具,發(fā)現(xiàn)就有通用Mapper和mybatis-plus兩個比較好的可是使用,可是經(jīng)過對比發(fā)現(xiàn)還是mybatis-plus比較好,個人覺得,勿噴。。。 集成還是非常簡單的,然后就在研究怎么分頁,開始研究通用ma...

    Pocher 評論0 收藏0
  • springboot ()集成tkmapper

    摘要:整合想著每次搭建新項目時框架都要從新搭建,基本常用的也就哪幾種,現(xiàn)在就來搭建一種常用的后臺框架,以后新開小項目可以直接拿來使用項目整體結(jié)構(gòu)圖新建空白項目,選中依賴略,也可以完全根據(jù)本人代碼操作文件依賴項展示 springboot整合tkMapper 想著每次搭建新項目時框架都要從新搭建,基本常用的也就哪幾種,現(xiàn)在就來搭建一種常用的springboot后臺框架,以后新開小項目可以直接拿來...

    Shihira 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<