SpringBoot + Mybatis初探


前言

整個(gè)SpringBoot非常方便的可以實(shí)現(xiàn)Restful服務(wù),然而在實(shí)際的應(yīng)用中,實(shí)現(xiàn)Restful服務(wù)只是表面,如果需要運(yùn)營(yíng)起來(lái),需要數(shù)據(jù)層的支持。目前服務(wù)端的數(shù)據(jù)層包括關(guān)系型數(shù)據(jù)庫(kù)例如MySQL與非關(guān)系型數(shù)據(jù)庫(kù)例如MangoDB。非關(guān)系型數(shù)據(jù)庫(kù)可能更加方便實(shí)現(xiàn)對(duì)象存儲(chǔ),對(duì)應(yīng)用編碼更加方便,但是對(duì)底層存儲(chǔ)的理解不利,所以在剛開(kāi)始還是推薦使用關(guān)系型數(shù)據(jù)庫(kù)。
這里我們將使用SpringBoot的Restful項(xiàng)目來(lái)結(jié)合Mybatis來(lái)實(shí)現(xiàn)一個(gè)有數(shù)據(jù)存儲(chǔ)的Restful服務(wù)。

Mybatis是什么?

這里是Mybatis的介紹
MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。MyBatis 可以使用簡(jiǎn)單的 XML 或注解來(lái)配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。
簡(jiǎn)言之:MyBatis可以方便的幫助JAVA應(yīng)用使用關(guān)系型數(shù)據(jù)庫(kù)。

寫(xiě)代碼之前

在實(shí)際代碼之前,我們需要給項(xiàng)目配置Mybatis,這里的項(xiàng)目管理使用的maven管理,有一個(gè)pom.xml來(lái)管理依賴(lài),所以我們開(kāi)始吧:
給項(xiàng)目加入MyBatis依賴(lài)

<!--加入mybatis的支持-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

給項(xiàng)目加入MySQL連接的依賴(lài)

<!--加入mysql connector-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>

在加入依賴(lài)之后,需要做的是首先是配置數(shù)據(jù)庫(kù)端口和用戶(hù)
當(dāng)然,我這里使用的是MySQL來(lái)作為數(shù)據(jù)庫(kù)。端口是3306,用戶(hù)是root。

所以開(kāi)始配置:
這里是一個(gè)參考
這里是一個(gè)更好的參考
完成數(shù)據(jù)庫(kù)相關(guān)配置之后,我們需要在Spring項(xiàng)目中完成數(shù)據(jù)庫(kù)的連接配置,不然Spring如何知道該連接哪個(gè)數(shù)據(jù)庫(kù)呢。

  • 在application.properties中添加下面的數(shù)據(jù)(如果沒(méi)有改文件,請(qǐng)?jiān)趈ava平級(jí)建立一個(gè)resource文件夾下新建一個(gè)改文件)
server.port=5000
########################################################
###datasource
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username = root
spring.datasource.password = seven107001
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10

然后SpringBoot就知道用什么(依賴(lài))去連接哪個(gè)數(shù)據(jù)庫(kù)(配置)了。

開(kāi)始編碼吧!

我們?cè)谠创a里面加入dao層,并加入一個(gè)Mapper。(注意mapper是一個(gè)Interface)


屏幕快照 2018-08-24 上午10.53.11.png
package blog.dao;

import blog.domain.BlogItem;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.LinkedList;

@Mapper
public interface BlogMapper {
    @Select("SELECT * FROM blogs")
    LinkedList<BlogItem> getAllBlogItem();

    @Insert("INSERT INTO blogs (title, subTitle, summary, content, dateString) VALUES(#{title}, #{subTitle}, #{summary}, #{content}, #{dateString})")
    int insert(@Param("title") String title,
               @Param("subTitle") String subTitle,
               @Param("summary") String summary,
               @Param("content") String content,
               @Param("dateString") String dateString);
}

是不是很簡(jiǎn)單,我們已經(jīng)用注釋的方式完成了從數(shù)據(jù)庫(kù)獲取和插入的操作。

測(cè)試

  1. 新建一個(gè)Test文件,并在類(lèi)上加注釋?zhuān)?/li>
@RunWith(SpringRunner.class)
@SpringBootTest(classes = App.class, webEnvironment = SpringBootTest.WebEnvironment.**RANDOM_PORT**)

因?yàn)槭褂肧pringBoot來(lái)跑,所以這里測(cè)試需要有一個(gè)Application類(lèi)傳入,隨機(jī)端口。

  1. 然后在類(lèi)中加入一個(gè)自動(dòng)注入的Mapper:
@Autowired
private BlogMapper mapper;

這時(shí)候mapper我們就不需要自己去初始化了,畢竟自動(dòng)注入

  1. 最后我們寫(xiě)一個(gè)測(cè)試方法吧:
@Test
public void testInsertBlog() {
    mapper.insert("標(biāo)題", "副標(biāo)題", "總結(jié)", "主要內(nèi)容", "一小時(shí)以前");
}

這里我們測(cè)試了插入,如果是數(shù)據(jù)庫(kù)本身配置沒(méi)有問(wèn)題的話(huà),就已經(jīng)完成了SpringBoot對(duì)數(shù)據(jù)庫(kù)的操作了。

結(jié)語(yǔ)

其實(shí)Spring+Mybatis真的不難,在做之前感覺(jué)挺復(fù)雜畏難心理,實(shí)際做的時(shí)候發(fā)現(xiàn)和iOS數(shù)據(jù)庫(kù)操作基本一致,基本都是三步:加入依賴(lài),連接,寫(xiě)很容易理解的代碼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容