SpringBoot集成Mybatis+MySQL

環(huán)境

  • Mac OS 10.13
  • Mybatis3.4 [org.mybatis.spring.boot 2.0.1]
  • MySQL 8.0.16
  • JAVA 11
  • SpringBoot 2.1.1.RELEASE

配置MySQL

1. 接入依賴

pom.xml 文件中添加一下依賴灾锯,用于接入JDBC驅(qū)動(dòng)

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

2. 配置 aplication.properties

在該配置文件下瓤摧,添加以下代碼:

#設(shè)置數(shù)據(jù)庫海蔽,使用com.mysql.cj.jdbc.Driver對(duì)應(yīng)mysql6以上版本,com.mysql.jdbc.Driver對(duì)應(yīng)mysql5一下版本
spring.datasource.driver-class-name= com.mysql.cj.jdbc.Driver
spring.datasource.url= jdbc:mysql://localhost:3306/數(shù)據(jù)庫名稱?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
spring.datasource.username = 用戶名
spring.datasource.password = 密碼

據(jù)查找資料說:
使用com.mysql.cj.jdbc.Driver需要設(shè)置一下時(shí)區(qū)腺劣,但是貌似沒有遇到這個(gè)坑。
另外的方法:據(jù)資料介紹秒拔,還可以在mybatis_config.xml文件中根據(jù)不同環(huán)境配置不同的數(shù)據(jù)庫础倍,例如以下代碼:

<!--不同環(huán)境數(shù)據(jù)庫源配置,默認(rèn)是dev環(huán)境-->
    <environments default="dev">
        <!--開發(fā)環(huán)境-->
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url"    value="jdbc:mysql://localhost:3306/數(shù)據(jù)庫名稱?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true"/>
                <property name="username" value="用戶名"/>
                <property name="password" value="密碼"/>
            </dataSource>
        </environment>
        <!--生產(chǎn)環(huán)境-->
        <environment id="prod">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url"    value="jdbc:mysql://遠(yuǎn)程數(shù)據(jù)庫服務(wù)設(shè)備ip/數(shù)據(jù)庫?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true"/>
                <property name="username" value="用戶名"/>
                <property name="password" value="密碼"/>
            </dataSource>
        </environment>
    </environments>

不過很不幸的是徒蟆,這個(gè)配置好像無效戈抄。目前采用第一種方法,個(gè)人建議第二種后专,便于管理,將來有機(jī)會(huì)再查證無效的具體原因输莺。

配置Mybatis

1.接入依賴

在 pom.xml 文件中添加一下依賴戚哎,用于接入Mybatis庫

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

2.配置 aplication.properties

在這之前裸诽,你需要在resources文件夾下,新建mybatis-config.xml文件型凳,用于添加mybatis的配置丈冬,本人工程中該文件的目錄是resources/mybatis/config/mybatis-config.xml
另外甘畅,mybatis需要許多mapper文件埂蕊,所以先創(chuàng)建一個(gè)mapper文件夾,以便將來能用疏唾,本人工程中該文件夾目錄是resources/mybatis/mapper蓄氧。
然后引入配置和mapper文件:

mybatis.check-config-location=true
mybatis.config-location=classpath:mybatis/config/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

3.配置mybatis-config.xml

<configuration>
    <!--加載所有entity實(shí)體類-->
    <typeAliases>
        <package name="com.xxx.xxxx.entity"/>
    </typeAliases>
</configuration>

目前還沒有對(duì)mybatis做過多的配置,而只是通過package的方式槐脏,加載所有entity實(shí)體類喉童。(接下來要介紹的User.class就是在該entity文件夾下)

4.創(chuàng)建實(shí)體對(duì)象(entity)

com.xxx.xxxx.entity*文件夾中,新增User.class文件顿天,內(nèi)容如下:

package com.xxx.xxxx.entity;

import java.sql.Timestamp;
import java.util.Date;

public class User{

    private  String username;

    private  String email;

    private  String password;

    private int sex;

    private Date birthday;

    private String headPhoto;

    private String phone;

    private Timestamp createTime;



    public String getUsername(){
        return username;
    }
    public void setUsername(String username){
        this.username = username;
    }

    public String getEmail(){
        return  email;
    }
    public void setEmail(String email){
        this.email = email;
    }

    public String getPassword(){
        return password;
    }
    public void setPassword(String password){
        this.password = password;
    }

    public int getSex(){ return sex; }
    public void setSex(int sex){ this.sex = sex; }

    public Date getBirthday(){ return birthday; }
    public void setBirthday(Date birthday){ this.birthday = birthday; }

    public String getHeadPhoto(){ return headPhoto; }
    public void setHeadPhoto(String headPhoto){ this.headPhoto = headPhoto; }

    public String getPhone(){ return phone; }
    public void setPhone(String phone){ this.phone = phone; }

    public Timestamp getCreateTime(){
        return createTime;
    }
    public void setCreateTime(Timestamp createTime){
        this.createTime = createTime;
    }
}

然后創(chuàng)建數(shù)據(jù)庫表user,表列如下:

user_id           varchar(64) PK
email             varchar(255)
username          varchar(16)
password          varchar(32)
create_time       timestamp
sex               int(11)
birthday          date
headphoto         varchar(200)
phone             varchar(20)

5.創(chuàng)建Respository接口

在mybatis中堂氯,我們需要實(shí)現(xiàn)查詢,刪除牌废,更新等操作咽白,所有的這些操作都在mapper.xml文件中實(shí)現(xiàn),我們只需要給項(xiàng)目暴露接口函數(shù)就好了鸟缕。我們把這些接口全部歸類到respository文件夾下晶框。例如,我們需要對(duì)user進(jìn)行一些查詢操作叁扫,你可以編寫以下接口:
IUserMapper.class

import com.xxx.xxxx.entity.User;

public interface IUserMapper {

    //通過userId去獲取用戶信息
    public User getUserById(String userId);
}

6.接口實(shí)現(xiàn)Mapper.xml

我們需要實(shí)現(xiàn)getUserById操作三妈。首先我們得在,mapper文件夾下創(chuàng)建一個(gè)UserMapper.xml文件莫绣,文件內(nèi)容如下:

<?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.xxx.xxx.respository.IUserMapper">
  
    <resultMap id="UserMapperResult" type="com.xxx.xxxx.entity.User">
        <result property="email" column="email"></result>
        <result property="username" column="username"></result>
        <result property="sex" column="sex"></result>
        <result property="birthday" column="birthday"></result>
        <result property="headPhoto" column="head_photo"></result>
        <result property="phone" column="phone"></result>
        <result property="password" column="password"></result>
        <result property="createTime" column="create_time"></result>
    </resultMap>

    <select id="getUserById" resultMap="UserMapperResult">
        select * from user
        where
         user.user_id = #{userId}
    </select>
</mapper>

請(qǐng)留意這行<mapper namespace="com.xxx.xxxx.respository.IUserMapper">畴蒲,這里直接關(guān)聯(lián)到了IUserMapper,然后對(duì)應(yīng)的接口函數(shù)getUserById对室,也在這里做了映射<select id="getUserById" resultMap="UserMapperResult">模燥。

7.暴露接口給mybatis

在接口與mapper.xml文件關(guān)聯(lián)起來之前,我們要先把接口文件暴露給mybatis掩宜。而mybatis通過注解 @MapperScan 來掃描這些接口文件蔫骂,在本人工程中,我們?cè)赼pplication文件中添加了@MapperScan("com.xxx.xxxx.respository")代碼牺汤,這樣mybatis就會(huì)自動(dòng)掃描respository文件夾下的所有接口了辽旋。
xxxApplication.class

package com.xxx.xxxx;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.xxx.xxxx.respository")
@SpringBootApplication

public class xxxApplication {

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

}

8.調(diào)用

在本人工程中,有一個(gè)loginController.class,里面實(shí)現(xiàn)了get請(qǐng)求补胚,另外通過@Autowired的方式注入IUserMapper的bean码耐。
LoginController.class

package com.xxx.xxxx.controllers.Login;
import com.xxx.xxxx.entity.User;
import com.xxx.xxxx.respository.IUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/login")
public class LoginController {

    @Autowired
    private IUserMapper userMapper;

    @RequestMapping(value = "/get" , method = RequestMethod.GET)
    public  User loginGet(){
        System.out.println("get 方法=====");
        User user = userMapper.getUserById("32435cdsg");
        return user;
    }
}

9.結(jié)果如下

{
"username":"xxxxxx",
"email":"xxx@email.com",
"password":"xxxxx","sex":0,
"birthday":null,
"headPhoto":null,
"phone":null,
"createTime":"2019-07-11T22:27:59.000+0000"
}

10.Referrence

Mybatis中文網(wǎng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溶其,隨后出現(xiàn)的幾起案子骚腥,更是在濱河造成了極大的恐慌,老刑警劉巖瓶逃,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件束铭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡厢绝,警方通過查閱死者的電腦和手機(jī)契沫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來代芜,“玉大人埠褪,你說我怎么就攤上這事〖繁樱” “怎么了钞速?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嫡秕。 經(jīng)常有香客問我渴语,道長(zhǎng),這世上最難降的妖魔是什么昆咽? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任驾凶,我火速辦了婚禮,結(jié)果婚禮上掷酗,老公的妹妹穿的比我還像新娘调违。我一直安慰自己,他們只是感情好泻轰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布技肩。 她就那樣靜靜地躺著,像睡著了一般浮声。 火紅的嫁衣襯著肌膚如雪虚婿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天泳挥,我揣著相機(jī)與錄音然痊,去河邊找鬼。 笑死屉符,一個(gè)胖子當(dāng)著我的面吹牛剧浸,可吹牛的內(nèi)容都是我干的锹引。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼辛蚊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼粤蝎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袋马,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秸应,沒想到半個(gè)月后虑凛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡软啼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年桑谍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祸挪。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锣披,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贿条,到底是詐尸還是另有隱情雹仿,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布整以,位于F島的核電站胧辽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏公黑。R本人自食惡果不足惜邑商,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凡蚜。 院中可真熱鬧人断,春花似錦、人聲如沸朝蜘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芹务。三九已至蝉绷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枣抱,已是汗流浹背熔吗。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佳晶,地道東北人桅狠。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親中跌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子咨堤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348