Spring全家桶學(xué)習(xí)筆記 04 | 輕松整合Mybatis

本節(jié)利用Mybatis實(shí)現(xiàn)數(shù)據(jù)庫相關(guān)操作赋荆,數(shù)據(jù)庫選擇mysql

Mybatis的配置分為兩個(gè)版本邪狞,注解版與XML版挖垛,兩種版本使用場景有些許不同咳秉。

注解版

  • 配置依賴

mybatis-spring-boot-starter 是mybatis針對spring推出的框架婉支,簡單易用。在pom.xml中最好指定一下它的版本澜建。而Mysql模塊與Web模塊不用多說向挖。

<dependencies>
    <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>2.0.0</version>
    </dependency>
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>
  • applicaiton.properties

mybatis.type-aliases-package 用于配置類型別名的包名,在映射時(shí)只需要寫類名就足夠了

spring.datasource.url炕舵、usernamepassword 不用多說何之,注意所用數(shù)據(jù)庫的名稱及參數(shù)

spring.datasource.driver-class-name 用于配置mysql驅(qū)動(dòng)

mybatis.type-aliases-package=com.example.datasource-demo.model 

spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

這些配置會(huì)被Spring Boot自動(dòng)加載從而將數(shù)據(jù)源注入進(jìn) SqlSessionFactory 中。同時(shí)SqlSessionFactory也會(huì)自動(dòng)注入到 Mapper 中咽筋。

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

user表結(jié)構(gòu)
  • 實(shí)體類

此處我使用了 Lombok 插件溶推,引入了 @Data 注解,可以免去 get / set

user實(shí)體
  • Mapper

注解版最大的特點(diǎn)就是Sql語句可以直接以注解的形式寫在mapper接口中

userMapper

那么如何讓SpringBoot識別到這個(gè)mapper呢奸攻?添加 @Mapper 注解是一個(gè)方式蒜危,但需要在每一個(gè)Mapper上都添加一個(gè)注解,更簡便的方式是在啟動(dòng)類中添加注解睹耐,自動(dòng)掃描mapper包辐赞。

MapperScan
  • Controller

為了測試方便,簡單寫了一個(gè)delete接口硝训,別忘了為Controller加上@RestController注解

    @RequestMapping(value = "/delete/{id}")
    public void delete(@PathVariable("id") Long id) {
        userMapper.delete(id);
    }
  • 測試結(jié)果

    1. user表中數(shù)據(jù)
    user表
    1. 測試delete接口


      delete接口
    2. id為1的字段被刪除


      此時(shí)表中數(shù)據(jù)

XML版

application.yml

yml文件與properties文件同是配置文件响委,區(qū)別在于前者通過樹形結(jié)構(gòu)分層,使得層次更加分明窖梁,后者則相對比較直接赘风,當(dāng)工程中同時(shí)存在application.properties文件和 application.yml文件時(shí),yml文件中的配置優(yōu)先級會(huì)更高纵刘,所以保險(xiǎn)起見贝次,工程中只用一種類型即可。

application.yml配置內(nèi)容:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
  type-aliases-package: com.example.datasource-demo.model

可以見到彰导,相比于注解版蛔翅,配置文件中新增了mybatis的內(nèi)容鳞青,config-location 指定了配置文件的路徑盔夜,mapper-locations 指定了映射xml文件的路徑,type-aliases-package 在上文解釋過。

mybatis-config.xml

在applicaiton.yml中我們配置了config-location ,這個(gè)配置文件需要我們自行創(chuàng)建宇立,特別注意頭文件不能遺漏

<?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>
    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer" />
        <typeAlias alias="Long" type="java.lang.Long" />
        <typeAlias alias="HashMap" type="java.util.HashMap" />
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
        <typeAlias alias="ArrayList" type="java.util.ArrayList" />
        <typeAlias alias="LinkedList" type="java.util.LinkedList" />
    </typeAliases>
</configuration>

UserMapper

xml版與注解版最大的不同就是sql語句是存放在獨(dú)立的映射xml文件中的兜叨,根據(jù)我們在配置文件中的路徑創(chuàng)建UserMapper.xml文件

<?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.example.datasourcedemo.mapper.UserMapper">
    <resultMap id="BaseResultMap" type="com.example.datasourcedemo.model.User">
        <id column="id" property="id" jdbcType="BIGINT" />
        <result column="username" property="username" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
        <result column="nick_name" property="nickName" jdbcType="VARCHAR" />

    </resultMap>

    <sql id="Base_Column_List" >
        id, username, password, nick_name
    </sql>

    <select id="getAll" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM user
    </select>

    <select id="getOne" parameterType="java.lang.Long" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM user
        WHERE id = #{id}
    </select>
</mapper>

而UserMapper接口只需要定義接口方法即可聂沙,無需注解

public interface UserMapper {
    
    List<User> getAll();
 
    User getOne(Long id);

}

運(yùn)行項(xiàng)目家浇,結(jié)果與注解版并無二致

// http://localhost:8080/getUser?id=2

{
  "code": 200,
  "message": "查詢用戶成功",
  "data": {
    "id": 2,
    "username": "jerry",
    "password": "123123",
    "nickName": "Jerry"
  }
}

如何選擇

兩種模式各有特點(diǎn)與適用場景,注解版適合簡單快速的模式爵政,適合無需大量多表連接查詢的情況仅讽,而xml模式則更適合傳統(tǒng)中大型項(xiàng)目,靈活地生成Sql钾挟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洁灵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掺出,更是在濱河造成了極大的恐慌徽千,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汤锨,死亡現(xiàn)場離奇詭異双抽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)闲礼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進(jìn)店門牍汹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柬泽,你說我怎么就攤上這事柑贞。” “怎么了聂抢?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棠众。 經(jīng)常有香客問我琳疏,道長,這世上最難降的妖魔是什么闸拿? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任空盼,我火速辦了婚禮,結(jié)果婚禮上新荤,老公的妹妹穿的比我還像新娘揽趾。我一直安慰自己,他們只是感情好苛骨,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布篱瞎。 她就那樣靜靜地躺著苟呐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俐筋。 梳的紋絲不亂的頭發(fā)上牵素,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天,我揣著相機(jī)與錄音澄者,去河邊找鬼笆呆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛粱挡,可吹牛的內(nèi)容都是我干的赠幕。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼询筏,長吁一口氣:“原來是場噩夢啊……” “哼榕堰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起屈留,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤局冰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后灌危,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體康二,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年勇蝙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沫勿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡味混,死狀恐怖产雹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情翁锡,我是刑警寧澤蔓挖,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站馆衔,受9級特大地震影響瘟判,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜角溃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一拷获、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧减细,春花似錦匆瓜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽茧妒。三九已至,卻和暖如春糠馆,著一層夾襖步出監(jiān)牢的瞬間嘶伟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工又碌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留九昧,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓毕匀,卻偏偏與公主長得像铸鹰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子皂岔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評論 2 361

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