Decoration1:Spring-boot基礎實現

mingziday發表於2017-04-07

前段時間釋出的Traveller專案,花費了不少精力,但是效果並不如意,根源在於瀑布式的開發思想不適合這種獨立的學習專案。在專案初始就規劃一個全面的web系統,,因為預設了一個前景,在心理上會想盡快看到效果,為了達到這樣的目的,會找一些例子直接使用,不會花時間去思考為什麼這麼做。攤子鋪得太開,隨後喪失了全面維護的耐心,精力也跟不上了。

這個Decoration專案,在原來的專案基礎上開發,我計劃用一種新的思路。不做巨集觀的效果預設,從一個小的功能開始逐漸深入,直到發現要新增新的東西進來的時候,再去考慮通過小規模的演進迭代增加進來。這樣的好處是每次迭代只關注一點,循序漸進,控制節奏,壓力小一點,權當是業餘練手。

因為是開發練習,儘可能省掉重量級的配套,直接用記憶體資料庫H2代替Mysql,用內建伺服器代替Tomcat,這樣更關注技能點的實現,少了外部的干擾。也不要急著傳到GitHub上,等到有一定的雛形的時候再上傳,上傳之後,也不要改一點東西就更新,總之這些外部的東西都不是重點,重點是技術本身,抓大放小,有的放矢,不忘初心。

我會在這裡陸續記錄開發中遇到的各種坑,附帶上坑的解決辦法,這不是通用的開發教程,那種教程網上已經寫得比較多了,我就不要再插一腿了。

4月7日之前的工作進展

1、基本的環境的設定

Eclipse(放棄了STS,採用了更通用的版本):配好maven路徑

JDK8:設定環境變數

Maven:需要JAVA_HOME、MAVEN_HOME環境變數,為了更快地下載jar包,需要在配置檔案中增加新的阿里映象,以前需要等好幾個小時的專案編譯,現在5min搞定。

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>       
    </mirror>
  </mirrors>

 Spring:SpringBoot + SpringDataJPA + H2(內建資料庫)

//熱部署所用的依賴,這樣改了程式碼不用重啟內建伺服器,方便太多了
org.springframework.springloaded 
//使用者把專案打包成jar的依賴
spring-boot-maven-plugin
//定義實體的時候可以用@DATA省略掉對應的set和get方法,也很方便
org.projectlombok.lombok

 2、建立最基本的Repository、Controller

執行 mvn spring-boot:run,成功提示helloword

3、下面就是要講資料真正寫到資料並能夠查出來了

第一步,現在系統啟動之後能夠預設插入進去一些資料,這樣我們先可以查,因為查詢總是最簡單的,方法是用CommandLineRunner,實現這個藉口的bean,會在application啟動之後自動執行,我只需要在這個bean裡面把預製的資料save到表裡面。application關閉的時候就會自動清除這些資料。

第二步,H2資料庫有個web終端,可以用圖形的方式檢視庫裡面的資料,先要開啟配置application.properties,增加一條

spring.h2.console.enabled=true

然後訪問,http://localhost:8080/h2-console

點選連線就能夠登入到資料庫,這是你會看到,我定義的實體已經預設生產了資料庫結構,CommandLineRunner裡面預設的資料也已經插入進去了。這裡需要注意的是上圖中的JDBC URL,預設的資料庫為jdbc:h2:mem:h2db,要查詢真正的本系統建立的資料庫需要開啟一個配置項,再從日誌中找到真正的URL,這個配置項如下:

logging.level.org.hibernate=DEBUG

4、要在前臺顯示實體資料

(1)先要顯示出一個正常的index.html來,那麼普通的html非動態資源怎麼顯示呢,只要放到工程的resource/static或者resource/pubilc目錄下就行了,搞定

(2)先用PostMan查一下,後端返回的資料到底是什麼樣的

PostMan是一個chrome的外掛,用來方便地檢視http的request和response,非常好用

請求返回的資料都是null的,在後臺列印一下日誌,明確到資料確實是查出來了,之所以返回沒有查出來,應該是返回的四個物件沒有按照json格式返回成字串,我們下面的目標就是先把json的資料返回回來。

(3)用spring-boot內建的starter,新增pom依賴如下

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>

在Repository上增加註解@RepositoryRestResource,這個註解的意義是讓Spring MVC在/people處建立RESTful入口點。這樣一來,我們配置的controller就沒有用了,先刪掉。

@RepositoryRestResource(collectionResourceRel = "customer", path = "customer")
public interface CustomerRepository extends PagingAndSortingRepository<Customer, Long> {
    List<Customer> findByLastName(String lastName);
}

好,重新用PostMan測試一下

Json出來了,為什麼沒有顯示錶的內容呢,檢視Customer.class反編譯出來的原始碼,發現get/set方法沒有,追逐原因,原來是@Data註解沒有起作用,使用lombok需要用在Eclipse上進行安裝才行,我之前沒有安裝,只是匯入了pom依賴。但是我按照網上的方法安裝後,Eclipse無法啟動,於是我捨棄lombok(只要修改下eclipse.ini),反正Eclipse自己生產get/set也是點一下滑鼠就能做到了,只是程式碼比較臃腫而已。這會應該沒什麼問題了:

 

相關文章