Spring Boot入門系列(五) 使用Mybatis(Annotation版)

文章使用版本為 Spring Boot 2.1.x

前言

Spring Boot 入門系列(四) 使用JdbcTemplate訪問數(shù)據(jù)庫 中我們介紹了 JdbcTemplate 的簡單用法匈挖,當(dāng)項目比較小或者不怎么需要使用數(shù)據(jù)庫時整以,JdbcTemplate 是個不錯的選擇炼吴,但是如果項目比較大時粱锐,我們希望使用一些更加強大的框架,比如今天我們介紹的 MyBatis钮呀。

Mybatis通常有兩種使用方式

  • 在接口文件上寫注解來映射SQL語句
  • 通過XML文件來映射SQL語句

今天我們先來學(xué)習(xí)第一種方式剑鞍,使用注解

添加依賴

在spring boot下使用 mybatis,首先我們要添加 mybatis 的依賴爽醋,其中 pagehelper 是第三方的一個分頁插件蚁署。

       <dependency>
           <groupId>org.mybatis.spring.boot</groupId>
           <artifactId>mybatis-spring-boot-starter</artifactId>
           <version>2.1.0</version>
       </dependency>

       <!--mybatis分頁插件-->
       <dependency>
           <groupId>com.github.pagehelper</groupId>
           <artifactId>pagehelper-spring-boot-starter</artifactId>
           <version>1.2.12</version>
       </dependency>

       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <scope>runtime</scope>
       </dependency>

配置application.yml

application.yml的配置包括兩部分,一部分是數(shù)據(jù)源的配置蚂四,另一部分就是Mybatis的各種配置光戈。

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/spring_boot_learn?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&autoReconnect=true&useSSL=true
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: root
    hikari:
      minimum-idle: 2
      maximum-pool-size: 5
mybatis:
  configuration:
    default-executor-type: reuse
    default-statement-timeout: 2

新建接口類

package org.schhx.springbootlearn.dao;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.schhx.springbootlearn.module.User;

public interface UserMapper {

    @Insert("insert into user (id, username, age) values(#{id}, #{username}, #{age})")
    int insert(User record);

    @Delete("delete from user where id = #{id}")
    int deleteByPrimaryKey(String id);

    @Update("update user set username = #{username}, age = #{age} where id = #{id}")
    int updateByPrimaryKey(User record);

    @Select("select * from user where id = #{id}")
    User selectByPrimaryKey(String id);
}

掃描接口類

現(xiàn)在我們還需要把接口類交給Spring來管理哪痰,掃描接口類的方式有兩種

  • 在接口類上加上注解 @Mapper
  • 在項目啟動類上加注解 @MapperScan(basePackages = {"org.schhx.springbootlearn.dao"})久妆,它會掃描指定包下的所有接口類妒御。

建議使用第二種方式。

測試

到此為止镇饺,我們已經(jīng)把所有的配置都配置完畢,可以通過一個測試文件來測試是否能夠正常訪問數(shù)據(jù)庫送讲。

package org.schhx.springbootlearn.dao;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.schhx.springbootlearn.module.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import java.util.UUID;

import static org.junit.Assert.*;

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

    @Autowired
    private UserMapper userMapper;

    @Test
    @Transactional
    public void insert() throws Exception {
        User user = new User()
                .setId(UUID.randomUUID().toString())
                .setUsername("張三")
                .setAge(20);
        int result = userMapper.insert(user);
        Assert.assertEquals(1, result);
    }

    @Test
    @Transactional
    public void deleteByPrimaryKey() throws Exception {
        User user = new User()
                .setId(UUID.randomUUID().toString())
                .setUsername("張三")
                .setAge(20);
        userMapper.insert(user);
        int result = userMapper.deleteByPrimaryKey(user.getId());
        Assert.assertEquals(1, result);

    }

    @Test
    @Transactional
    public void updateByPrimaryKey() throws Exception {
        User user = new User()
                .setId(UUID.randomUUID().toString())
                .setUsername("張三")
                .setAge(20);
        userMapper.insert(user);
        user.setUsername("李四")
                .setAge(30);
        userMapper.updateByPrimaryKey(user);
        User result = userMapper.selectByPrimaryKey(user.getId());
        Assert.assertEquals(user, result);

    }

    @Test
    public void selectByPrimaryKey() throws Exception {
    }

}

完整示例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奸笤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哼鬓,更是在濱河造成了極大的恐慌监右,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件异希,死亡現(xiàn)場離奇詭異健盒,居然都是意外死亡,警方通過查閱死者的電腦和手機称簿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門扣癣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人憨降,你說我怎么就攤上這事父虑。” “怎么了授药?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵士嚎,是天一觀的道長。 經(jīng)常有香客問我悔叽,道長莱衩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任娇澎,我火速辦了婚禮笨蚁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘九火。我一直安慰自己赚窃,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布岔激。 她就那樣靜靜地躺著勒极,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虑鼎。 梳的紋絲不亂的頭發(fā)上辱匿,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天键痛,我揣著相機與錄音,去河邊找鬼匾七。 笑死絮短,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的昨忆。 我是一名探鬼主播丁频,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼邑贴!你這毒婦竟也來了席里?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拢驾,失蹤者是張志新(化名)和其女友劉穎奖磁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體繁疤,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡咖为,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稠腊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躁染。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖麻养,靈堂內(nèi)的尸體忽然破棺而出褐啡,到底是詐尸還是另有隱情,我是刑警寧澤鳖昌,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布备畦,位于F島的核電站,受9級特大地震影響许昨,放射性物質(zhì)發(fā)生泄漏懂盐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一糕档、第九天 我趴在偏房一處隱蔽的房頂上張望莉恼。 院中可真熱鬧,春花似錦速那、人聲如沸俐银。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捶惜。三九已至,卻和暖如春荔烧,著一層夾襖步出監(jiān)牢的瞬間吱七,已是汗流浹背汽久。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踊餐,地道東北人景醇。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像吝岭,于是被迫代替她去往敵國和親三痰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359