您好,登錄后才能下訂單哦!
本篇內容介紹了“Spring Boot的概念和功能介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Spring Boot的目的就是對spring的缺點進行改善和優化,基于約定、優于配置的思想使得開發人員不必在配置和業務邏輯之間進行思維切換,全身心投入到業務邏輯的代碼編寫當中,從而大大提高開發效率,縮短項目周期。
基于spring的開發提供更快捷的入門體驗
開箱即用,沒有代碼生成,也無需XML配置。可以通過修改默認配置來滿足特定需求
提供了一些大型項目中的常見的非功能型特性,入嵌入式服務器、安全、指標、健全監測、外部配置等
Spring Boot不是對spring功能上的增強,而是提供了一種快速使用spring的方式
起步依賴
本質上是一個Maven項目對象模型(Project Object Model,POM),定義了對其它庫的傳遞依賴,這些東西加在一起,即可支持某項能。 簡單地說,就是將具備某些功能的坐標打包到一起,并提供一些默認的功能。
自動配置
本質上是應用程序啟動的過程中,考慮了眾多因素,才決定spring配置應該用哪一個,該過程是spring自動完成的。
springboot的起步依賴
和web的啟動依賴
<!--1 springboot項目都要繼承springboot的起步依賴--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <!--2 SpringBoot要集成SpringMVC進行Controller的開發,所以項目要導入web的啟步依賴--> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
要通過springboot的引導類啟動springboot項目才可以在瀏覽器進行訪問。
package com.wsc; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * springboot的引導類,程序的入口 */ @SpringBootApplication public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class); } }
在springboot的引導類MySpringBootApplication的同級包或者子包中創建controller
package com.wsc.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * springmvc的控制器 */ @Controller public class QuickStartController { @RequestMapping("/quick") @ResponseBody public String quickStart(){ return "spring boot 啟動了。。。"; } }
啟動引導類,然后在瀏覽器中訪問http://localhost:8080/quick
測試成功后顯示如下 |
---|
idea創建maven工程-->選擇Spring Initializr-->點擊next-->修改Project Matadata的參數-->next--> 選擇對應依賴以及springboot的版本-->next檢查項目名-->finish
@SpringBootApplication:標注該類為SpringBoot的啟動類,該注解具備多種功能
SpringApplication.run(MySpringBootApplication.class) 代表運行SpringBoot的啟動類,參數為SpringBoot 啟動類的字節碼對象
在idea中設置springboot的熱部署,使得我們在開發程序的過程中,如果修改了類、頁面等資源,不用重啟服務器,代碼也能生效。
在 pom.xml 中添加如下配置 即可
<!--熱部署配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>
注意:IDEA進行SpringBoot熱部署失敗原因 出現這種情況,并不是熱部署配置問題,其根本原因是因為Intellij IEDA默認情況下不會自動編譯,需要對IDEA進 行自動編譯的設置,如下:
首先進入file->setting
然后 Shift+Ctrl+Alt+/,選擇Registry
起步依賴:點開起步依賴的jar包,查看源碼解析,里面有許多的jar包的依賴
自動配置:查看@SpringBootApplication的源碼,里面整合了許多spring的配置
springboot是基于約定的,所有有很多配置都有默認值,但如果想使用自己的配置替換默認配置的話,就可以使用application.properties
或者application.yml(application.yaml)
進行配置。
springboot默認會從Resources目錄下加載application.properties或application.yml(application.yaml)文件
#修改服務器的端口號 server.port=8081 #修改web應用的名稱 server.servlet.context-path=/demo
#普通數據的配置 name: zhansan #對象的配置 person: name: lisi age: 18 addr: beijing #行內對象的配置 #person: {name: zhansan,age: 18,addr: beijing} #配置數組、collection集合(普通字符串) city: - beijing - tianjiang - shanghai - shenzhen city2: [beijing,tianjing,shanhai,shenzhen] #配置數組、collection集合(對象數據) student: - name: zhansan age: 12 addr: beijing -name: lisi age: 13 addr: shenzhen student2: [{name: zhangsan,age: 12,addr: beijing},{name: lisi,age: 14,addr: shenzhen}] #配置map集合 map: key1: value1 key2: value2 server: port: 8082
如何從配置文件中拿出屬性的值注入到配置類中對應的成員上。
@Controller public class QuickController2 { @Value("${name}") //直接在成員上添加@Value注解,無需get、set方法 private String name; @Value("${person.addr}") private String addr; @RequestMapping("/quick2") @ResponseBody public String quick2(){ return "name:"+name+",addr:"+addr; } }
@Controller @ConfigurationProperties(prefix = "person")//在配置類上添加@ConfigurationProperties public class QuickController3 { private String name; private String addr; //必須添加屬性對應的get、set方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } @RequestMapping("/quick3") @ResponseBody public String quick3(){ return "name:"+name+",addr:"+addr; } }
在pom.xml中添加web功能的起步依賴即可,底層傳遞了springmvc的依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
springboot并沒有增強spring的功能,只是提供了一種快速使用spring的方式
springboot的父工程的起步依賴,已經整合了spring,并對spring的配置進行了默認配置優化
整合步驟如下:
<!--mybatis的起步依賴--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
<!-- MySQL連接驅動 不用添加版本 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
#DB Configuration: spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useSSL=false spring.datasource.username=root spring.datasource.password=root
在test數據庫中創建user表
-- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `username` VARCHAR(50) DEFAULT NULL, `password` VARCHAR(50) DEFAULT NULL, `name` VARCHAR(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '張三'); INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');
package com.wsc.domain; import org.springframework.web.bind.annotation.InitBinder; public class User { private Integer id; private String username; private String password; private String name; //getter setter..... @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", name='" + name + '\'' + '}'; } }
package com.wsc.mapper; import com.wsc.domain.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper //@Mapper標記該類是一個mybatis的mapper接口,可以被spring boot自動掃描到spring上下文中 public interface UserMapper { public List<User> queryUserList(); }
在src-->main-->resources下創建目錄mapper-->在mapper下創建UserMapper.xml,其內容如下
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.itheima.mapper.UserMapper"> <select id="queryUserList" resultType="user"> select * from user </select> </mapper>
目的是將springboot 和 mybatis 產生關聯
#spring集成Mybatis環境 #pojo別名掃描包 mybatis.type-aliases-package=com.itheima.domain #加載Mybatis映射文件 mybatis.mapper-locations=classpath:mapper/*Mapper.xml
package com.wsc.controller; import java.util.List; @Controller public class MybatisController { @Autowired private UserMapper userMapper;//userMapper編譯期會報錯,因為項目沒有運行無法自動生成mapper @RequestMapping("/query") @ResponseBody public List<User> queryUserList(){ return userMapper.queryUserList(); } @RequestMapping("/test") @ResponseBody public String testMybatis(){ return "集成mybatis框架"; } }
訪問瀏覽器 http://localhost:8080/query |
---|
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
package com.wsc; import com.wsc.domain.User; import com.wsc.mapper.UserMapper; import java.util.List; /** * springbooot單元測試 */ @RunWith(SpringRunner.class) //用誰運行springboot的引導類 @SpringBootTest(classes = SpringbootMybatisApplication.class)//測試引導類的字節碼 public class MybatisTest { @Autowired private UserMapper userMapper; @Test public void testQueryUserList() { List<User> users = userMapper.queryUserList(); System.out.println(users); } }
<!-- springBoot JPA的起步依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
<!-- MySQL連接驅動 不用添加版本 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
#DB Configuration: spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useSSL=false spring.datasource.username=root spring.datasource.password=root
在test數據庫中創建user表
-- Table structure for `user` -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `username` VARCHAR(50) DEFAULT NULL, `password` VARCHAR(50) DEFAULT NULL, `name` VARCHAR(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '張三'); INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');
package com.wsc.domain; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id//主鍵 @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } //get set 方法..... @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", name='" + name + '\'' + '}'; } }
package com.wsc.repository; import com.wsc.domain.User; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; /** * 等價于mapper 和dao */ public interface UserRepository extends JpaRepository<User,Long> { public List<User> findAll(); }
#springboot集成springdata jpa #JPA Configuration: spring.jpa.database=MySQL spring.jpa.show-sql=true spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
package com.wsc; @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringbootDataJpaApplication.class) public class SpringDataJpaTest { @Autowired private UserRepository userRepository; @Test public void testFindAll() { List<User> all = userRepository.findAll(); System.out.println(all); } }
控制臺輸出: |
---|
注意:jdk9要手動導入依賴
<!--jdk9需要導入如下坐標--> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.0</version> </dependency>
<!-- 添加redis的起步依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
#Redis spring.redis.host=127.0.0.1 spring.redis.port=6379
注入RedisTemplate測試redis操作
package com.wsc; @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringbootDataJpaApplication.class) public class RedisTest { @Autowired private UserRepository userRepository; @Autowired private RedisTemplate<String, String> redisTemplate; @Test public void test() throws JsonProcessingException { //1.從redis中查詢 String userListJson = redisTemplate.boundValueOps("user.findAll").get(); //2.若redis中沒有,從數據庫中查詢 if (null==userListJson){ //3.從數據庫中查詢 List<User> all = userRepository.findAll(); //4.將list對象序列化為json字符串 jackson解析引擎 ObjectMapper objectMapper = new ObjectMapper(); userListJson = objectMapper.writeValueAsString(all); //5.將json字符串存入redis redisTemplate.boundValueOps("user.findAll").set(userListJson); System.out.println("===從數據庫中查詢==="); }else { System.out.println("===從redis中查詢==="); } System.out.println(userListJson); } }
“Spring Boot的概念和功能介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。