Spring Boot學(xué)習(xí)筆記(五)整合MyBatis實現(xiàn)數(shù)據(jù)庫訪問

本文主要在上一篇[Spring Boot學(xué)習(xí)筆記(四)構(gòu)建RESTful API標準工程實例]的基礎(chǔ)上揣炕,整合MyBatis族阅,實現(xiàn)簡單的MySql數(shù)據(jù)庫訪問

引入依賴

這里主要依賴兩個,一個是連接MySql的mysql-connector-java,還一個是SpringBoot整合MyBatis的核心依賴mybatis-spring-boot-starter

可以從maven倉庫里生成對應(yīng)的配置代碼:

圖1

對應(yīng)pom.xml如下:

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

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.6</version>
</dependency>

配置數(shù)據(jù)庫

自己安裝下MySql子眶,創(chuàng)建庫和表瀑凝,我這邊demo的表如下:

CREATE TABLE `temp` (
    `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '自增長id',
    `name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '姓名',
    `content` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '描述',
    PRIMARY KEY (`id`)
)
COMMENT='測試表';

application.properties下配置對應(yīng)的數(shù)據(jù)庫地址:

spring.datasource.url=jdbc:mysql://localhost:3306/mytest
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

實際代碼編寫

首先創(chuàng)建數(shù)據(jù)庫映射對象Temp:

public class Temp {
    
    private Integer id;
    private  String name;
    private String content;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setId(String name) {
        this.name = name;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
}

然后創(chuàng)建Temp映射的操作TempMapper:

@Mapper
public interface TempMapper {

    @Select("SELECT * FROM TEMP WHERE ID = #{id}")
    Temp findById(@Param("id") Integer id);

    @Insert("INSERT INTO TEMP(NAME, CONTENT) VALUES(#{name}, #{content})")
    int insert(Temp temp);

    @Update("UPDATE TEMP SET  CONTENT=#{content} WHERE ID=#{id}")
    int update(@Param("content") String content, @Param("id") Integer id);
}

編寫對應(yīng)的service層TempServiceImpl,TempService:

public interface TempService {
    public Temp getTemp(Integer id);
    public Boolean insertTemp(Temp entity);
    public Boolean updateTemp(Temp entity);
}
@Service
public class TempServiceImpl implements TempService{

    @Autowired
    private TempMapper tempMapper;

    @Override
    public Temp getTemp(Integer id)
    {
        return tempMapper.findById(id);
    }

    @Override
    public Boolean insertTemp(Temp entity)
    {
        return tempMapper.insert(entity)>0;
    }

    @Override
    public Boolean updateTemp(Temp entity)
    {
        return tempMapper.update(entity.getContent(),entity.getId())>0;
    }
}

最后編寫Controller:

@RestController
public class TempController {
    @Autowired
    private TempService tempService;

    @ApiOperation(value="MyBatis_Demo", notes="MyBatis實現(xiàn)數(shù)據(jù)庫訪問demo")
    @RequestMapping(value = "/temp",method = RequestMethod.GET)
    public Temp getTemp()
    {
        Temp t=tempService.getTemp(1);
        return t;
    }
}

好啦,大功告成臭杰,如果沒有意外的話粤咪,應(yīng)該能順利看到結(jié)果啦。

圖2

問題匯總

編寫過程中不是一帆風(fēng)順的渴杆,我遇到的問題如下寥枝,供大家參考宪塔。

問題1

啟動時提示Failed to start connecter[HTTP/1.1-8080]

圖3
圖4

看到這個提示后還是比較好定位問題的,基本鎖定端口被占用了脉顿,很好奇被誰占用了蝌麸,于是排查了下:

打開命令窗口輸入:

netstat -aon|findstr "8080"

圖5

找到對應(yīng)的PID后到任務(wù)管理器去查看被什么進程給占用了

圖6

結(jié)果發(fā)現(xiàn)是個奇怪的進程,后來百度了下和docker有關(guān)艾疟,這才恍然大悟,之前在docker下調(diào)試 .net core項目的来吩。關(guān)閉進程問題順利解決。

問題2

Consider defining a bean of type 'com.example.api_demo.domain.repository.TempMapper' in your configuration.

這個自己犯了錯誤蔽莱,忘記在啟動類配置掃描包了弟疆,立馬添加上。

圖7
問題3

The server time zone value '?泄???????' is unrecognized or represents more t...

也是一個奇葩的問題盗冷,百度一下怠苔,原來碰到的人挺多,原因就是高版本的MySql驅(qū)動會有數(shù)據(jù)庫和系統(tǒng)時區(qū)差異,我用的版本是6.0.6仪糖,所以碰到了柑司,修改下配置,執(zhí)行時區(qū)就可以了

jdbc:mysql://localhost:3306/mytest?serverTimezone=UTC

或者用回5.1.4版本锅劝,該版本不會存在時區(qū)問題攒驰。

問題4

Could not autowired,No beans of '****' type found

圖8

這個問題困擾了我一陣,很尷尬故爵,應(yīng)該早點百度的或者先嘗試一下編譯的玻粪,后來發(fā)現(xiàn)編譯能通過,運行也沒問題诬垂,后來才知道劲室,可參考這篇博客

如果不想看到這個報錯,可降低Autowired檢測的級別:


圖9

總結(jié)

到這里结窘,簡單MyBatis實現(xiàn)數(shù)據(jù)庫訪問已經(jīng)基本實現(xiàn)很洋,但這不能滿足實際業(yè)務(wù)需求,比如復(fù)雜的sql如何處理隧枫,如何訪問多個庫等蹲缠。

同時,MyBatis的一些注解對于新手來說還是比較陌生的悠垛,下一篇我會嘗試從我的角度去深度整理下MyBatis的復(fù)雜使用,和大家一起分享娜谊,共同進步确买。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纱皆,隨后出現(xiàn)的幾起案子湾趾,更是在濱河造成了極大的恐慌芭商,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搀缠,死亡現(xiàn)場離奇詭異铛楣,居然都是意外死亡,警方通過查閱死者的電腦和手機艺普,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門簸州,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人歧譬,你說我怎么就攤上這事岸浑。” “怎么了瑰步?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵矢洲,是天一觀的道長。 經(jīng)常有香客問我缩焦,道長读虏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任袁滥,我火速辦了婚禮盖桥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呻拌。我一直安慰自己葱轩,他們只是感情好,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布藐握。 她就那樣靜靜地躺著靴拱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪猾普。 梳的紋絲不亂的頭發(fā)上袜炕,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音初家,去河邊找鬼偎窘。 笑死,一個胖子當著我的面吹牛溜在,可吹牛的內(nèi)容都是我干的陌知。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼掖肋,長吁一口氣:“原來是場噩夢啊……” “哼仆葡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起志笼,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沿盅,失蹤者是張志新(化名)和其女友劉穎把篓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腰涧,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡韧掩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了窖铡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疗锐。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖万伤,靈堂內(nèi)的尸體忽然破棺而出窒悔,到底是詐尸還是另有隱情,我是刑警寧澤敌买,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布简珠,位于F島的核電站,受9級特大地震影響虹钮,放射性物質(zhì)發(fā)生泄漏聋庵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一芙粱、第九天 我趴在偏房一處隱蔽的房頂上張望祭玉。 院中可真熱鬧,春花似錦春畔、人聲如沸脱货。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽振峻。三九已至,卻和暖如春择份,著一層夾襖步出監(jiān)牢的瞬間扣孟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工荣赶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凤价,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓拔创,卻偏偏與公主長得像利诺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子剩燥,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理立轧,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,668評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,823評論 6 342
  • 1. 簡介 1.1 什么是 MyBatis 氛改? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,523評論 0 4
  • 都說"陪伴是最長情的告白"比伏。春節(jié)假期里胜卤,我終于整天有時間陪在孩子左右。傾聽他的新年新愿赁项,檢查指導(dǎo)一下他的作業(yè)情況葛躏。
    花草呢喃閱讀 286評論 0 0
  • 過年的意義 PS 我是一個留守兒童,一年就見爸媽一次悠菜,過年對于我來說就像是親友會面舰攒。 講述正題 春節(jié)是中國...
    pattern_eb3b閱讀 119評論 0 0