java程序里面的springboot_第1頁
java程序里面的springboot_第2頁
java程序里面的springboot_第3頁
java程序里面的springboot_第4頁
java程序里面的springboot_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、概念spring boot對spring mvc、tomcat等都做了集成,只需要依賴spring boot的jar,通過注解指定主類,然后執(zhí)行里面的main方法,它就能啟動tomcat提供服務。不需要spring mvc的繁瑣配置。使用spring boot時不需要引入spring mvc,tomcat等的依賴,只需要引入spring boot的依賴即可,它會自動尋找spring mvc,tomcat等的合適的版本引入,解決了框架中各種組件版本不一致的問題。安裝配置:無ide手工方式:1、新建文件夾SpringBootSample2、該文件夾下新建文件pom.xml內(nèi)容:<?xml v

2、ersion="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"> <model

3、Version>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>myproject</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId></groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>

4、1.4.0.RELEASE</version> </parent></project>其中parent里定義了很多依賴的版本,繼承它之后,以后的依賴都不用寫版本號,全從parent繼承,這樣可以避免版本沖突,將個依賴的版本都交給了spring boot管理。不過這里的示例沒有任何依賴。3、cd到該目錄下執(zhí)行mvn package說明已經(jīng)構(gòu)建成功了4、構(gòu)建web項目spring boot將各功能分成了不同模塊,只需要添加需要的模塊即可,版本號由spring boot統(tǒng)一管理,添加web模塊后,它會自動引入spring mvc、tomcat、spring cor

5、e等依賴。4.1 pom.xml加入依賴和插件<?xml version="1.0" encoding="UTF-8"?><project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/ma

6、ven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>myproject</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId></groupId> <artifactId>spring-boot-starter-parent&l

7、t;/artifactId> <version>1.4.0.RELEASE</version> </parent> <!- Additional lines to be added here. -><dependencies><dependency><groupId></groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><b

8、uild><plugins><plugin><groupId></groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>引入spring-boot-maven-plugin插件可以使mvn package打出的jar包能直接用java jar命令運行,未使用插件:會提示:使用了插件:多了BOOT-INF,主類的class和所有依賴包都在里

9、面。4.2 編寫主類java由于添加web依賴后它會自動去找主類的main方法,找不到會報錯,因此需要創(chuàng)建主類:創(chuàng)建SpringBootSamplesrcmainjava目錄結(jié)構(gòu)在該目錄下創(chuàng)建Example.java內(nèi)容:import .*;import .*;import .*;import .*;RestControllerEnableAutoConfigurationpublic class Example RequestMapping("/") String home() return "kkk!" public static void main

10、(String args) throws Exception SpringApplication.run(Example.class, args); 其中EnableAutoConfiguration表示該類是主類,從該類main方法啟動。RestController是Controller和ResponseBody的組合寫法,表示方法返回的內(nèi)容直接給客戶端,而不是去找模板。4.3構(gòu)建運行有3種方式,一種是利用spring boot插件,執(zhí)行: mvn spring-boot:run它會自動啟動tomcat,默認端口是8080或者mvn package打出jar文件,然后執(zhí)行:java

11、第三種方式是在ide里面直接執(zhí)行主類的main方法。5、訪問應用http:/localhost:8080使用ide創(chuàng)建:idea和eclipse中創(chuàng)建maven項目,跟手工方式一樣配置即可。idea向?qū)?chuàng)建idea中還提供了直接創(chuàng)建spring boot項目的方式,可以通過向?qū)Ч催xweb等spring boot的模塊:File-New Project-Spring Initializr配置說明向?qū)?chuàng)建出來的工程配置跟手工創(chuàng)建的一致:自動創(chuàng)建的主類:注意這里創(chuàng)建了一個配置文件,默認是空的??梢詫⒑芏嗯渲梅旁诶锩?,如啟動端口,數(shù)據(jù)庫連接等自定義配置信息。EnableAutoConfiguratio

12、n 和 SpringBootApplication說明 SpringBootApplication等同于Configuration,EnableAutoConfiguration,ComponentScan三個屬性的組合。當訪問非主類的Controller時,就需要主類配置ComponentScan屬性才能掃描到,否則掃描不到。因此主類上通常用 SpringBootApplication,這樣就可以掃描到其他類的bean。修改端口和上下文路徑perties中增加配置:server.port=90server.context-path=/kkk訪問:使用yml配置y

13、ml文件配置可以減少properties的配置量,如:注意:1、冒號后面必須帶一個空格,否則無法識別2、要注意縮進,因為它通過代碼行縮進確定屬性歸屬級別的。使用value讀取配置yml配置:讀?。簻y試:配置中引用配置:用$引用即可,如:注入分組配置:如果配置的屬性較多,則使用value需要對每個屬性都寫一個變量來接收,很不方便,可以將屬性放到一個分組里,然后定義一個實體類來接收參數(shù),使用時只用引用該實體類即可:這里的prefix跟配置中的對應。這里使用ConfigurationProperties注入了company里面的屬性。也可以直接注入到Controller,需要在controller中

14、定義配置的屬性不過最好不要這樣用。如:。分dev、online環(huán)境配置:如:java -jar指定環(huán)境不過這種方式切環(huán)境需要改代碼,可以在java jar運行參數(shù)中指定環(huán)境,它會覆蓋掉配置中指定的環(huán)境。如:java -jar kkk-0.0.1-SNAPSHOT.jar -sprin=online使用thymeleaf模板thymeleaf是spring提供的模板,類似于freemarker、velocity等。pom.xml加入依賴:<dependency> <groupId></groupId> <artifactId>spring-boot

15、-starter-thymeleaf</artifactId></dependency>templates目錄下新建index.html然后使用Controller即可返回模板。使用常用的springmvc注解匹配多個路徑如:RequestMapping(value = "list", "users")public String list() return "index"GetMapping、PostMapping等的簡化寫法GetMapping("list")相當于RequestMappi

16、ng(value = "list", method = RequestMethod.GET).PostMapping、PutMapping等同理。使用spring data jpajpa是一套java提出的規(guī)范,用于持久化操作,jpa有很多實現(xiàn),如hibernate、toplink等。spring data jpa是封裝在hibernate、toplink等上面一層的實現(xiàn),用戶通過它來操作hibernate等,可以不關(guān)心底層實現(xiàn)。配置pom.xml加入依賴:<dependency> <groupId></groupId> <arti

17、factId>spring-boot-starter-data-jpa</artifactId></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency>application.yml配置:spring: datasource: driver-class-name: url: jdbc:mysql:/:3306/use

18、rs username: root password: 123456 jpa: hibernate: ddl-auto: update show-sql: true其中ddl-auto:update表示如果沒有表會自動創(chuàng)建表,有表則不動。create表示則每次都會把原表drop掉重新創(chuàng)建。create-drop表示每次都重新創(chuàng)建表,應用停下來就把表刪除none表示不執(zhí)行任何ddl。validate表示不執(zhí)行ddl,但會檢查實體類和表結(jié)構(gòu)是否一致,不一致就報錯。show-sql:true表示打印sql語句。創(chuàng)建實體類Company.java:import org.hibernate.annota

19、tions.Generated;import org.springframework.boot.autoconfigure.domain.EntityScan;import perties.ConfigurationProperties;import org.springframework.stereotype.Component;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.

20、Id;/* * Created by Administrator on 2017/12/7. */Entitypublic class Company Id GeneratedValue private Long id; private String name; private String address; public Long getId() return id; public void setId(Long id) this.id = id; public String getAddress() return address; public void setAddress(String

21、 address) this.address = address; public String getName() return name; public void setName(String name) = name; 其中Id表示主鍵, GeneratedValue表示自動生成執(zhí)行程序即可自動創(chuàng)建表Long映射成了bigint(20)String映射成了varchar(255)增刪改查操作:查詢?nèi)繑?shù)據(jù)新增數(shù)據(jù)查詢單條數(shù)據(jù)更新更新也是調(diào)用save,發(fā)現(xiàn)有id就自動執(zhí)行update語句刪除根據(jù)條件查詢接口里增加的這個方面名字是約定,它會自動根據(jù)name去查詢。開啟事務需

22、要開啟事務的方法上增加Transactional注解即可。表單驗證1、實體類上用注解加條件:2、方法參數(shù)上用Valid指定驗證的實體,后面緊接一個BindingResult參數(shù)獲取驗證結(jié)果。RequestMapping("addCompany")public Company addCompany(Valid Company company, BindingResult bindingResult) if (bindingResult.hasErrors() System.out.println(bindingResult.getFieldError().getDefault

23、Message(); return null; return companyRepository.save(company);這里如果不返回null,則執(zhí)行到companyRepository.save(company);時會拋出異常,jpa會驗證實體類的屬性。異常處理可以異常進行統(tǒng)一處理定義異常處理類:MyExceptionHandler.java:package ;import org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.Exc

24、eptionHandler;import org.springframework.web.bind.annotation.ResponseBody;/* * Created by Administrator on 2017/12/15. */ControllerAdvicepublic class MyExceptionHandler ExceptionHandler(value=Exception.class) ResponseBody public String kkk() return "error happend" 它會自動捕捉異常調(diào)用方法。 一般會自定義異常類型,

25、調(diào)用不同方法,這里使用Exception異常類只是為了做示范。自定義異常類通常會增加code屬性,拋異常時傳入code,外面可以取得code。通常使用方法:ResultEnum.javapublic enum ResultEnum ERROR(-1, "未知錯誤"), SUCCESS(0, "成功"); private Integer code; private String msg; ResultEnum(int code, String msg) this.code = code; this.msg = msg; public Integer get

26、Code() return code; public String getMsg() return msg; MyException.javapublic class MyException extends RuntimeException private Integer code; public MyException(ResultEnum resultEnum) super(resultEnum.getMsg(); this.code = resultEnum.getCode(); public Integer getCode() return code; public void setC

27、ode(Integer code) this.code = code; 拋異常throw new MyException(ResultEnum.ERROR);MyExceptionHandler.javaimport org.springframework.web.bind.annotation.ControllerAdvice;import org.springframework.web.bind.annotation.ExceptionHandler;import org.springframework.web.bind.annotation.ResponseBody;/* * Creat

28、ed by Administrator on 2017/12/15. */ControllerAdvicepublic class MyExceptionHandler ExceptionHandler(value=MyException.class) ResponseBody public String kkk(MyException e) return e.getMessage(); ExceptionHandler(value=RuntimeException.class) ResponseBody public String kkkkkk(RuntimeException e) ret

29、urn "runtime exception" 注意這里的MyException繼承了RuntimeException,它會自動判斷拋出異常的類型,找到最精確的匹配,如拋出MyException,則會調(diào)用kkk方法。使用AOP1、加入aop依賴<dependency> <groupId></groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>2、編寫切面類:如:package ;import org.aspectj.

30、lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.stereotype.Component;/* * Created by Administrator on 2017/12/14. */AspectComponentpublic class CompanyAspect Before("execution(public * (.)") public void beforeList() System.out.println("aspec

31、t-before list"); 3、測試:springaop各種注解的詳細用法參見”springaop.docx”主類的位置和spring掃描包路徑默認的spring掃描包路徑是從主類開始一層層往下掃描,也可以在主類上用注解設(shè)置,如:ComponentScan(basePackages="com.example")如果類沒有在掃描包路徑下,則即使加了Component等注解也不會被ioc容器發(fā)現(xiàn)。使用單元測試的時候,由于單元測試類必須在主類的包路徑以下才能找到依賴,因此主類最好放到最外層。關(guān)于包路徑的說明通過這個菜單可以修改:測試包的根目錄下面的所有測試類的測試

32、方法,都會加入maven的test生命周期運行。使用單元測試在test/java這種測試包下創(chuàng)建測試的java文件即可,一般測試包層級跟main/java下的包層級一致,測試類也跟main/java里的類一一對應,便于管理??梢允褂胕dea快速創(chuàng)建測試文件,在需要測試的方法上右鍵-go to-Test,然后選方法創(chuàng)建文件就行了。但創(chuàng)建出來的類上需要手動加上RunWith(SpringRunner.class)、SpringBootTest注解。測試service的方法測試service的方法很簡單,只用注入service即可,如:import ;import ;import org.junit

33、.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.transaction.annotation.Transactional;/* * Created by

34、Administrator */RunWith(SpringRunner.class)SpringBootTestpublic class CompanyServiceTest Autowired CompanyService companyService; Transactional Test public void testGetOne() Company company = companyService.getOne(2L); System.out.println("company=" + company); Assert.assertEquals(company.g

35、etAge(), new Integer(56); 跟一般的Junit測試類似,也是在方法上點右鍵運行即可。這里加Transactional是因為jpa的懶加載,加上它防止session提前關(guān)閉。使用Mock測試controller的方法import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.autoconfigure.web.servlet.Au

36、toConfigureMockMvc;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import ;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import org.springframework.test.web.servlet.result.MockMvcResultMatchers;impor

37、t ;import static .*;/* * Created by Administrator */RunWith(SpringRunner.class)SpringBootTestAutoConfigureMockMvcpublic class CompanyControllerTest Autowired private MockMvc mvc; Test public void list() throws Exception mvc.perform(MockMvcRequestBuilders.get("/company/list") .andExpect(Moc

38、kMvcResultMatchers.status().isOk() .andExpect(MockMvcResultMatchers.content().string("kkk"); 注意這里增加了AutoConfigureMockMvc注解。mock會自動發(fā)送http請求,這里是使用get方法請求"/company/list"這個路徑,斷言返回狀態(tài)為200(isOk(),返回值是”kkk”,否則報錯。跳過單元測試整合Mybatis整合mybatis其實就是降數(shù)據(jù)庫連接配置到配置文件,再通過mybatis.mapper-locations=classp

39、ath:mybatis/*.xml屬性指定映射文件的掃描路徑,它就會到映射文件中找到namespace對應的Mapper接口,如:,然后自動創(chuàng)建接口實現(xiàn)類放到spring容器,bean的id就是接口名的首字母小寫,如:創(chuàng)建實體類User.javapackage com.example2.domain;public class User private Long id; private String name; private Integer age; public Long getId() return id; public void setId(Long id) this.id = id;

40、public String getName() return name; public void setName(String name) = name; public Integer getAge() return age; public void setAge(Integer age) this.age = age; 創(chuàng)建UserMapper.javaimport com.example2.domain.User;import org.apache.ibatis.annotations.Mapper;import ;/* * Created by Administrat

41、or on 2017/12/8. */public interface UserMapper List<User> getAll(); User getOne(Long id); void insert(User user); void update(User user); void delete(Long id);如果主類上的MapperScan沒有掃描到,這里可以加上Mapper讓其掃描到。創(chuàng)建映射文件User.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE map

42、per PUBLIC "-//DTD Mapper 3.0/EN" "/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.example2.mapper.UserMapper" > <select id="getAll" resultType="user" > SELECT id, name, age FROM users </select> <

43、select id="getOne" parameterType="long" resultType="user" > SELECT id, name, age FROM users WHERE id = #id </select> <insert id="insert" parameterType="user" > INSERT INTO users (name,age) VALUES (#name, #age) </insert> <updat

44、e id="update" parameterType="user" > UPDATE users <set> <if test="name != null">name = #name,</if> <if test="age != null">age = #age,</if> </set> WHERE id = #id </update> <delete id="delete" parameterTy

45、pe="long" > DELETE FROM users WHERE id =#id </delete></mapper>配置文件pertiesmybatis.type-aliases-package= = spring.datasource.url = jdbc:mysql:/localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8 = root = 123456mybatis.mapper-locations=classpath:my

46、batis/*.xml創(chuàng)建UserController.javapackage com.example2;import ;import com.example2.domain.User;import com.example2.mapper.UserMapper;import org.springframework.beans.factory.annotation.Autowired;import .*;/* * Created by Administrator on 2017/12/5. */RestControllerRequestMapping("user")public class UserController Autowired protected UserMapper userMapper; RequestMapping("list") public String list(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論