本篇内容介绍了“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。