1 創建一個聚合項目
創建foodie-dev項目
在pom文件中設置聚合工程的頂級項目
<packaging>pom</packaging>
選中項目,右鍵新建Module,foodie-dev-common
子工程的pom文件,
<!-- 默認的打包方式是jar包-->
<packaging>jar</packaging>
新建module,foodie-dev-pojo,並且依賴common模塊,在pojo的pom文件中,
<dependencies>
<dependency>
<groupId>com.zte</groupId>
<artifactId>foodie-dev-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
添加其他模塊
<modules>
<module>foodie-dev-common</module>
<module>foodie-dev-pojo</module>
<module>foodie-dev-mapper</module>
<module>foodie-dev-service</module>
<module>foodie-dev-api</module>
</modules>
依賴關係api-->service-->mapper-->pojo-->common
完成這些之後,去maven裏雙擊頂級項目的install,裝配起來。
繼續在父pom中添加各個配置項。
在api模塊中創建工程
運行工程之前,還是要執行一邊安裝install操作;
2 SpringBoot的自動裝配
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
查看run方法的源碼
一個靜態助手,可以來運行一個來自特定source的SpringApplication,這個source就是參數中的primarySource,這個Class泛型。第二個參數通常是java main方法的參數,也就是args。返回的是正在運行的ApplicationContext。
具體看下@SpringBootApplication註解。
@ComponetScan是包掃描,會掃描啓動類Application所在包下面所有的class和子包下的class。
@SpringBootConfiguration
這個註解裏面是一個接口,上面有@Configuration,表明這是一個容器,類似Spring裏面的Beans,裏面有很多Bean,然後用xml文件進行配置。
@EnableAutoConfiguration
這個註解點擊進去之後,
查看@Import
註釋上說,用來導入一個或多個Configuration(容器)
來查看導入的這個 AutoConfigurationImportSelector.class。
查看spring.factories
當滿足一些要求的時候,會加載tomcat(springboot內嵌的tomcat)
點進去看一看到tomcat的默認配置。
幫忙自動裝配了Spring MVC
給web server運行自動裝配。
自動裝配,啓動tomcat
3 整合HikariCP
在父pom文件中添加mysql驅動和mybatis依賴
在api模塊的yml文件中加入配置
運行之前,要重新install一下。
1-4 MyBatis數據庫逆向生成
運行前同樣需要install
4 結合通用Mapper,編寫Restful風格Api
作爲service,需要被容器掃描到,所以加了@Service註解
control+i,引入所有接口方法。
編寫StuFooContorller,到StuServiceImpl,裏面的getStuInfo方法,需要事務的支持,因爲是查詢,只選擇SUPPOTS
1-10 事務傳播詳解
事務的聲明是在serviceImpl層添加的
- [REQUIRED]沒有添加REQUIRED事務註解的時候,
第一個會被執行,把數據寫到數據庫中,因爲中斷,第二方法沒有把數據寫到數據庫中,但是第一個方法在因爲錯誤中斷沒有回滾;
- [REQUIRED]給父級方法添加事務聲明,子級方法不填加,事務會傳遞到子級,報錯後操作回滾,數據庫中沒有數據。
- [REQUIRED]父級事務不填加事務聲明,子級方法添加;被添加的子方法會回滾;
- [SUPPORTS]父方法不聲明,子方法聲明,不會加事務,報錯數據庫也不會回滾;因爲查詢的時候不需要事務回滾,所以使用SUPPORTS
- 父方法聲明[REQUIRED],子方法聲明[SUPPORTS]