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

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

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

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

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

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

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

二、Spring Boot與Spring Cloud

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

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

三、Spring Boot集成Mybatis

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

        3.一、 引入Spring Boot與Mybatis依賴包

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

 Maven方式引入:mybatis

<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.二、  從屬性文件中配置數據源

            配置數據源我使用的是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.三、  使用註解方式寫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。謝謝你們的閱讀。

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

相關文章
相關標籤/搜索