前言
整個(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)

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è)試
- 新建一個(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ī)端口。
- 然后在類(lèi)中加入一個(gè)自動(dòng)注入的Mapper:
@Autowired
private BlogMapper mapper;
這時(shí)候mapper我們就不需要自己去初始化了,畢竟自動(dòng)注入
- 最后我們寫(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ě)很容易理解的代碼。