微服務開發的入門級框架Spring Boot詳解(四) 原 薦

         前幾章把Spring Boot大概都介紹了個遍,如果各位朋友有什麼疑問和指教歡迎在評論指出。下面我將介紹如何使用Spring Boot進行企業級開發。大概會從以下幾點開始介紹。

  • 如何使用Spring Boot進行企業開發
  • Spring Boot與Spring Cloud(Spring Cloud會單獨寫一系列,包括PaaS雲環境如何使用)
  • Spring Boot集成Mybatis(這裏會重點說,包括事物,用註解寫SQL及動態SQL等等)

1、使用Spring Boot進行企業開發

        剛開始接觸微服務的開發我基本是一臉懵逼的狀態,因爲以前是做傳統電商項目的開發,還好我的經理是個大牛(Pivotal原廠出來的),他對於微服務的開發以及PaaS雲可以說是理解到骨子裏了,感謝我的經理給了我很多的建議和思路。首先微服務的開發最先思考的應該是模型的設計,從數據庫模型開始,因爲微服務架構就是要高內聚低耦合,一個功能掛了,我應用其他模塊照樣跑。數據庫模型很重要,可以說一個數據庫的設計表結構就代表了你要實現的功能部分。寫微服務就像是在搭積木,你的積木顏色可能不同,但最終卻能完美的搭在一起,即使抽掉幾塊也不會倒。

       當數據庫建立好後,我又在思考,傳統架構一般都是Controller接收數據,返回視圖,Service把Controller接收的數據按業務需求做處理,然後DAO做數據的持久化。那麼微服務也是這麼來寫嗎?

       其實流程差不太多。DAO不需要在寫impl類實現接口了,而是直接在接口上使用註解,Service直接使用接口內的方法。(歡迎補充,相互學習!因爲我做的第一個微服務項目從前端到後臺到數據庫設計都由我一人完成的,這個問題我也問過我經理,我的經理說微服務開發的流程就是沒有流程!我覺得意思就是全靠自己想吧........)

2、Spring Boot與Spring Cloud

        這裏不得不提一嘴Spring Cloud,關於這個框架後面也會專門來說。

        如果說Spring Boot是員工。那麼Spring Cloud就是老闆。所有功能寫好之後,Spring Cloud就像是個管理者,每個員工(服務)會的技能都必須向老闆彙報,當一個員工想向另一個員工求助時,也得向老闆彙報,老闆給你調度。當然,Spring Cloud的功能不僅僅於此,關於這塊的東西,我會單獨寫一系列的博客,包括微服務應用在雲上環境去跑時如何去使用。

3、Spring Boot集成Mybatis

        接下來進入正題,Spring Boot是不推薦再去使用XML去做框架配置(化繁爲簡),剛開始的時候我算是愁壞了,因爲之前做項目,都是從XML中配置視圖解析器啊,AOP,事物管理,包括各種動態SQL。那麼如何使用註解進行這些配置呢?下面進行詳解。

        3.1、 引入Spring Boot與Mybatis依賴包

            因爲Spring Boot畢竟出身名門,所以很多廠商都提供了與Spring Boot集成的包。Mybatis同樣也提供了mybatis-spring-boot-starter 目前 1.3.x 是最新版本。如果你的業務不需要十分繁瑣的SQL語句,那麼我推薦使用JPA的方式來操作數據庫會更加敏捷。

 Maven方式引入:

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

Gradle方式引入:

dependencies {
    compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.1-SNAPSHOT")
}

        3.2、  從屬性文件中配置數據源

            配置數據源我使用的是properties配置,代碼如下:前四個是必配的,含義應該就不用解釋了吧,大家都懂。之後的可選配置不全,如果需要全的可以去看官方文檔。

spring.datasource.url = jdbc:mysql://localhost:3306/spring-boot?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver

#可選配置
# 初始化大小,最小,最大
spring.datasource.initialSize=10
spring.datasource.minIdle=10
spring.datasource.maxActive=20
# 配置獲取連接等待超時的時間
spring.datasource.maxWait=80000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連接,單位是毫秒
spring.datasource.timeBetweenEvictionRunsMillis=80000
# 配置一個連接在池中最小生存的時間,單位是毫秒
spring.datasource.minEvictableIdleTimeMillis=500000
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合併多個DruidDataSource的監控數據
spring.datasource.useGlobalDataSourceStat=true
#指定連接的事務的默認隔離級別.
spring.datasource.default-transaction-isolation
#指定driver的類名,默認從jdbc url中自動探測.
spring.datasource.driver-class-name
#是否採用FIFO返回連接.
spring.datasource.fair-queue
#使用Hikari connection pool時,在心跳檢查時傳遞的屬性
spring.datasource.health-check-properties.[key]
#指定連接多久沒被使用時,被設置爲空閒,默認爲10ms
spring.datasource.idle-timeout
#當初始化連接池時,是否忽略異常.
spring.datasource.ignore-exception-on-pre-load

         3.3、  使用註解方式寫SQL語句

            以上步驟做完,就可以寫SQL語句了。

            最簡單的四個註解。分別對應查找,更新,刪除,插入的SQL語句。

例子:

@Select("select * from admin")
@Update("update admin a set a.userName='二十歲以後'")
@Delete("delete from admin  where userName='二十歲以後'")
@Insert("insert into admin (UserName,PassWord) values('二十歲以後','123')")

            參數的引用@Param

例子: 將註解括號內的參數進行引用 ,SQL語句中使用#{} 或 ${} 的方式都可以 ,使用#時變量是佔位符,可以防止sql注入。而$使用時,變量就是直接追加在sql中,一般會有sql注入問題。 還有就是通過#方式獲取變量時,可能會出現與數據庫的字段的類型不匹配錯誤 ,比如時間類型可以使用$。

@Select("select * from admin where User_Name=#{UserName} ")
public Admin selectUser(@param("UserName")  String UM);

            不使用@Param註解的情況,那麼參數只能有一個,並且是Javabean。在SQL語句裏可以引用JavaBean的屬性,而且只能引用JavaBean的屬性。 例子如下:

// 這裏id是Admin的屬性
@Select("SELECT * from admin where id = ${id}")
public Admin selectAdminById(Admin admin);

            結果映射列表: @Results、 @Result

例子: @Results是結果映射列表,@Result中property是Admin類的屬性名,colomn是數據庫表的字段名 。將數據庫結果集和我JAVA中POJO類的字段做綁定。(我記得Mybatis好像是有個功能,比如數據庫字段名爲User_Name,POJO的字段名爲UserName。符合這種規則的會自動綁定,無需手動。可以用mybatis-generator工具來生成POJO類)

@Results({
		  @Result(property="Id",column="UserId"),
		  @Result(property="UserName",column="UserName")
	  })
	  @Select("select UserId, UserName from admin  where  a.RealName=#{RM}")
	  public Admin selectAdminByRM(@Param("RM") String RM);

             聲明Mapper接口 @Mapper

例子: @Mapper將UserDao聲明爲一個Mapper接口。

package cn.yy.dao;

@Mapper
public interface UserDao {

	@Results({
		  @Result(property="Id",column="UserId"),
		  @Result(property="UserName",column="UserName")
	  })
	  @Select("select UserId, UserName from admin  where  a.RealName=#{RM}")
	  public Admin selectAdminByRM(@Param("RM") String RM);
}

            到此SpringBoot集成Mybatis的初級介紹就到此爲止,下一章我將介紹如何使用註解寫動態SQL。謝謝大家的閱讀。

            您的收藏和關注,是我最大的動力!感謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章