一、前言
本文主要從框架應用、框架原理、框架搭建來講述對SpringBoot框架的理解。
應用案例:實驗室數據構造,卡口車輛通過記錄表數據構造
二、SpringBoot框架的應用
1、創建實體Entity類,獲取卡口車輛通過記錄表實體對象
該步驟參考文檔《IDEA中Hibernate的引入與使用》中章節2.配置數據庫和3.生產Hiberante的實體類及配置文件,使用Spring框架無需手動操作配置文件,只需按操作生成實體類即可。
創建的實體類如下所示:
2、創建數據操作Dao類,用於卡口車輛通過記錄數據的保存,及與其他表相關操作的查詢
1)Dao類引入Spring注解@Repository,用於標注數據訪問組件,即DAO組件;
2)該類繼承JpaRepository,帶兩個參數,第一個參數為實體對象,例:TClgjClkktgxxDay,第二個參數是該實體對象Id類型,例:Long
3)引入Spring注解@Query實現查詢功能,value內容輸入sql語句,指定nativeQuery=true即使用原生的sql語句查詢。List<Object[]>為返回的數據格式,getKkjbxxData()為方法內容。
原生sql中涉及參數化使用?1代表第一個參數,方法對應帶入參數即可。
實體Id類型
3、創建service類,用於實現數據組裝及插入
1)引入Spring注解@Component,作用:把普通pojo實例化到spring容器中,相當於配置文件中的
例:
注解@Service未設置bean名字
main是靜態方法無法獲取到這個實例的屬性,從容器中獲取到該bean的寫法如下:
FxfzxyrServiceImpl fxfzxyrService = (FxfzxyrServiceImpl) SpringBeanUtil.getBean("fxfzxyrServiceImpl");
若有設置bean名字則按bean名字填寫。
2)引入Spring注解@Autowired,作用:注入Dao類
3)由於使用JDBC的批量提交方法,故需要寫sql,sql的values后面對應的是實體對象定義的字段名,sql語句后面List
批量提交方法如下:
4、創建測試類,執行測試程序
1)@RunWith:指定SpringRunner類來運行
2)@SpringBootTest:配置文件的讀取
3)@Autowired:注入service類
4)@Test:測試方法
綜上所述,我們已經了解到springboot框架在數據構造中的應用操作。接下來了解下SpringBoot框架的原理。
三、SpringBoot框架的原理
1、啟動原理
1)場景應用測試類中指定從Start類啟動(可配置),啟動類主要包含以下配置
@Configuration:配置Spring並啟動Spring容器
@SpringBootAplication:繼承@Configuration注解,加載配置文件
@EnableJpaRepositories:用來掃描和發現指定包及其子包中的Repository定義,Spring Boot只會掃描啟動類當前包和以下的包 ,例:啟動類的包是在com.forezp.helloworld下面,然后就只會掃描com.forezp.helloworld或者com.forezp.helloworld.下面的包。
@EntityScan:用來掃描和發現指定包及其子包中的Entity定義,Spring Boot只會掃描啟動類當前包和以下的包 ,例:啟動類的包是在com.forezp.helloworld下面,然后就只會掃描com.forezp.helloworld或者com.forezp.helloworld.下面的包。
@ComponentScan:用來掃描和發現指定包及其子包中的Component定義,自動裝配到spring的bean容器中,Spring Boot只會掃描啟動類當前包和以下的包 ,例:啟動類的包是在com.forezp.helloworld下面,然后就只會掃描com.forezp.helloworld或者com.forezp.helloworld.*下面的包。
- @PostConstruct
被@PostConstruct修飾的方法會在服務器加載Servlet的時候運行,並且只會被服務器調用一次,類似於Serclet的inti()方法。被@PostConstruct修飾的方法會在構造函數之后,init()方法之前運行。
3)@PropertySource加載局部配置文件
/**
* 表碼表配置
*/
@Configuration
@PropertySource("classpath:tables.properties")
@ConfigurationProperties(prefix = "table")
public class DictConfig {
private static Map<String,String> bm = new HashMap<>();
public static Map<String, String> getBm() {
return bm;
}
public void setBm(Map<String, String> bm) {
this.bm = bm;
}
}
2、SpringBoot配置文件application.properties
配置數據庫信息,容器端口信息(默認使用Tomcat作為內嵌的Servlet容器,通過pom文件可以修改成其他容器如jetty)等其他
1)容器端口號設置
server.port=8080
2)上下文路徑設置
server.contex-path=/DataLab
3)配置文件切換
spring.profiles.active=dev 則讀取的配置文件是application-dev.properties
4)多配置文件
配置多個配置文件,分類存放配置信息
spring.profiles.active=server1,server2
3、pom中引入springboot相關的依賴包
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4、SpringBoot打成可執行jar包,需要引入插件,並指定主函數入口
如下圖所示:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.dragonsoft.testlab.TestSpringJMY</mainClass>
<executable>true</executable>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
四、SpringBoot框架的搭建
1、搭建方法1
1)File>New>Project,New Project界面選擇Spring Initializr
2)選擇Spring Initializr,Project SDK選擇安裝的JDK,點擊Next
3)group:選擇包路徑,例如:com.xxx.example;Artifact:填寫項目名稱,例如:demo;,其他的不用管,點擊Next
4)選擇SpringBoot版本
選擇2.1.6,Web選擇Spring Web Starter,完成后點擊【Next】
5)project name:項目名稱;project location :項目路徑,點擊Finish
6)選擇創建一個新的空間 New Window
7)刪除沒有的文件 .mvn、mvnw、mvnw.cmd
至此一個SpringBoot框架搭建完成。
2、搭建方法2(推薦)
1)File->new,選擇maven,創建一個空項目,直接next
2)填寫工程名,點擊Next
3)填寫Project Name 和location,點擊Finish
4)在pom文件中引入SpringBoot相關依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
5)在resource目錄下新建一個application.properties文件
配置tomcat端口
server.port=8080 server.tomcat.uri-encoding=utf-8
6)在application.properties中配置數據庫連接信息
spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@192.168.6.18:1521:orcl
spring.datasource.username=csbsys
spring.datasource.password=dragon
7)在application.properties中配置Spring Data JPA
spring.jpa.database = oracle
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.Oracle10gDialect
spring.jpa.show-sql = true
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
8)設計Controller層(controller),Service層(service),Dao層(dao),創建配置類包(config),創建實體類包(entity),創建組件類包(component),創建公共類包(util)
9)配置項目啟動類Application
@Configuration
@SpringBootApplication(exclude = {MongoAutoConfiguration.class,MongoDataAutoConfiguration.class})
@EnableJpaRepositories(basePackages = {"com.dragonsoft.dataManage.*"})
@EntityScan(value={"com.dragonsoft.dataManage.*"})
@ComponentScan(value = {"com.dragonsoft.dataManage.*"})
public class Application {
public static void main(String[] args) throws Exception {
//啟動springboot
ApplicationContext ac = SpringApplication.run(Application.class,args);
SpringBeanUtil.setApplicationContext(ac);
}
10)啟動項目(運行啟動類Application)
頁面訪問地址tomcat配置的端口