springboot-mybatis(打印sql村怪、xml和注解、分頁pagehelper)整合避坑

第一步:導入依賴

關(guān)鍵依賴就mybatis-spring-boot-starter這一個冀膝,其他的作為輔助測試用

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
第二步:配置yml
server:
  port: 8088
spring:
  application:
    name: your-service-name
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://${MYSQL_HOST:localhost}:${MYSQL_PORT:3306}/${MYSQL_DB:your database}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
    username: ${MYSQL-USER:root}
    password: ${MYSQL-PWD:root}
mybatis:
  mapper-locations: classpath:mapper/*.xml  #對應(yīng)MenuConfigMapper.xml
  type-aliases-package: com.nico.mybatis.entity  #對應(yīng)resultType="CastMenuConfig"

注意:mybatis的配置少了任何一個都 無法啟動唁奢,因為你得告訴他這個MenuConfigMapper.xml這種文件去哪里找,resultType="CastMenuConfig"對應(yīng)去哪里找

第三步:配置啟動類

要加這個包掃描路徑@MapperScan(basePackages = "com.nico.mybatis.mapper")

@MapperScan(basePackages = "com.nico.mybatis.mapper")
@SpringBootApplication
public class MyMybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyMybatisApplication.class,args);
    }
}

如果不想在這里加也可以畸写,換個地方在接口類CastMenuConfigMapper 上加@Mapper也一樣的效果驮瞧,注意包路徑org.apache.ibatis.annotations.Mapper和繼承的Mapper路徑tk.mybatis.mapper.common.Mapper他們是不一樣的

@org.apache.ibatis.annotations.Mapper
public interface CastMenuConfigMapper extends Mapper<CastMenuConfig> {

    CastMenuConfig findById(String id);

}
第四步:準備測試

等等氓扛!看看你的實體類好了沒有枯芬,數(shù)據(jù)庫連起來沒有,好的先看實體類采郎,這里避免太長只貼部分字段 get set方法省略了千所,最好重寫個toString方法,方便控制臺打印查看

public class CastMenuConfig implements Serializable {


    private Long id;                    //主鍵

    private String menuName;            //菜單名稱

    private int menuType;               //菜單類型

    private int menuSort;               //菜單順序


//get set此處省略蒜埋。淫痰。。

    @Override
    public String toString() {
        return "CastMenuConfig{" +
                "id=" + id +
                ", menuName='" + menuName + '\'' +
                ", menuType=" + menuType +
                ", menuSort=" + menuSort +
                '}';
    }
}

看一下數(shù)據(jù)庫


圖片.png

好的整份,再把CastMenuConfigMapper.xml 文件配置一下,namespace的包路徑為上面CastMenuConfigMapper 接口的包路徑待错,resultType="CastMenuConfig"是通過yml中這個配置的包路徑 type-aliases-package: com.nico.mybatis.entity找到對應(yīng)實體類CastMenuConfig的,還有接口方法名findById和 id="findById"是對應(yīng)一致的烈评,好了不再疑惑火俄,繼續(xù)看

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.nico.mybatis.mapper.CastMenuConfigMapper">

    <select id="findById" parameterType="String" resultType="CastMenuConfig">
           select * from cast_menu_config where id=#{id}
        </select>
</mapper>

再看看項目文件結(jié)構(gòu),test里面的內(nèi)容是創(chuàng)建測試類生成的讲冠,當然你可以創(chuàng)建controller和業(yè)務(wù)層service代碼瓜客,通過postman或瀏覽器發(fā)起訪問完成整個調(diào)用邏輯,但是這里通過測試來快速訪問竿开。


圖片.png
第五步:進入測試

先創(chuàng)建一個測試類


圖片.png
圖片.png

點擊ok后就生成了測試類谱仪,由上面的文件結(jié)構(gòu)可以看到在test目錄下的文件CastMenuConfigMapperTest

@SpringBootTest
class CastMenuConfigMapperTest {

    @Autowired
    private CastMenuConfigMapper castMenuConfigMapper;
    @Test
    void findById() {
        CastMenuConfig CastMenuConfig = castMenuConfigMapper.findById("1322078827776266241");
        System.out.println("查詢結(jié)果:"+CastMenuConfig);
    }
}

寫好參數(shù),好了否彩,點擊測試


圖片.png

發(fā)現(xiàn)測試通過且返回結(jié)果疯攒,但是返回的值怎么都是null呢


圖片.png

由于數(shù)據(jù)庫字段是這樣的manu_name,實體類是manuName的駝峰命名規(guī)則,所以無法映射匹配上列荔,所以需要在yml的mybatis下配置一個規(guī)則 map-underscore-to-camel-case: true

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.nico.mybatis.entity
  configuration:
    map-underscore-to-camel-case: true

配置好后再次測試就有值了


圖片.png
第六步:如何配置mybatis打印sql日志

首先要配置yml文件mybatis配置項 log-impl: org.apache.ibatis.logging.stdout.StdOutImp

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.nico.mybatis.entity
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl   #打印sql日志到控制臺
    map-underscore-to-camel-case: true

再次測試查看就有sql日志輸出了


圖片.png

但是這樣配置你是看不出日志是哪個服務(wù)輸出的敬尺,無法定位称杨,所以還可以使用另一種方式,同樣配置yml中l(wèi)ogging 用com.nico.mybatis.mapper包名作為key筷转,輸出debug級別的sql日志

logging:
  level:
    com:
      nico:
        mybatis:
          mapper: debug

這樣再次測試姑原,就能看到是哪個接口mapper,哪個方法輸出的sql


圖片.png

配置時發(fā)現(xiàn)有這樣一個配置 base-packages: com.nico.mybatis.mapper 跟啟動類上的配置一樣呜舒,試試能否替代啟動類上的注解锭汛,所以都注釋掉@Mapper注解和@MapperScan(basePackages = "com.nico.mybatis.mapper") 后測試

mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.nico.mybatis.entity
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  base-packages: com.nico.mybatis.mapper  #啟動會報錯,并沒有生效

報錯袭蝗,找不到這個CastMenuConfigMapper文件


圖片.png

所以這個配置不能這么用

第七步:使用注解
@Mapper
public interface CastMenuConfigMapper {

    CastMenuConfig findById(String id);

    @Select("select * from cast_menu_config")
    List<CastMenuConfig> findAll();
}

同上唤殴,生成測試方法進行測試

@SpringBootTest
class CastMenuConfigMapperTest {

    @Autowired
    private CastMenuConfigMapper castMenuConfigMapper;
    @Test
    void findById() {
        CastMenuConfig castMenuConfig = castMenuConfigMapper.findById("1322078827776266241");
        System.out.println("查詢結(jié)果:"+castMenuConfig);
    }

    @Test
    void findAll() {
        List<CastMenuConfig> castMenuConfigList = castMenuConfigMapper.findAll();
        castMenuConfigList.forEach(item->System.out.println("查詢結(jié)果:"+item));
    }
}

遍歷返回查詢結(jié)果


圖片.png
第八步:使用pagehelper分頁助手

導入依賴

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

編寫測試方法

   @Test
    void findPage() {
        PageHelper.startPage(1,2);//獲取第1頁 每頁2條記錄

        List<CastMenuConfig> castMenuConfigList = castMenuConfigMapper.findAll();

        PageInfo<CastMenuConfig> castMenuConfigPageInfo = new PageInfo<>(castMenuConfigList);

        castMenuConfigPageInfo.getList().forEach(item->System.out.println("查詢結(jié)果:"+item));
    }

查看查詢結(jié)果,打印輸出了分頁sql語句


圖片.png

總結(jié):注解方式就不需要掃描xml文件了到腥,還有@update朵逝、@delete、@insert等注解支持乡范,其他配置可參考官方文檔 https://mybatis.org/mybatis-3/zh/getting-started.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末配名,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晋辆,更是在濱河造成了極大的恐慌渠脉,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瓶佳,死亡現(xiàn)場離奇詭異芋膘,居然都是意外死亡,警方通過查閱死者的電腦和手機霸饲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門为朋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厚脉,你說我怎么就攤上這事习寸。” “怎么了器仗?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵融涣,是天一觀的道長。 經(jīng)常有香客問我精钮,道長威鹿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任轨香,我火速辦了婚禮忽你,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臂容。我一直安慰自己科雳,他們只是感情好根蟹,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著糟秘,像睡著了一般简逮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尿赚,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天散庶,我揣著相機與錄音,去河邊找鬼凌净。 笑死悲龟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的冰寻。 我是一名探鬼主播须教,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼斩芭!你這毒婦竟也來了轻腺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤秒旋,失蹤者是張志新(化名)和其女友劉穎约计,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迁筛,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年耕挨,在試婚紗的時候發(fā)現(xiàn)自己被綠了细卧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡筒占,死狀恐怖贪庙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翰苫,我是刑警寧澤止邮,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站奏窑,受9級特大地震影響导披,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拓颓。 院中可真熱鬧木羹,春花似錦令境、人聲如沸牌芋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扁凛。三九已至忍疾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谨朝,已是汗流浹背膝昆。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叠必,地道東北人荚孵。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像纬朝,于是被迫代替她去往敵國和親收叶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容