Spring Boot
1 SpringBoot约定大于配置
1.1SpringBoot优点
1为基于Spring的开发提供更快的入门体验
2开箱即用,没有代码生成
3提供一些大型项目中的肺功能性特性,如嵌入式服务、安全、指标、健康检测、外部配置等等
4SpringBoot不是对Spring功能上的增强,而是提供了一中快速使用Spring的方法
1.2 SpringBoot的核心功能
1起步依赖
将具备某种功能的坐标打包到一起,并一共一些默认的功能。
2自动配置
SpringBoot的自动配置是一个运行时的过程,考虑众多因素,才决定Spring配置该应用哪个,不该用哪个,该过程是Spring自动完成的。
2SpringBoot快速入门
2.1创建maven工程
使用idea创建一个maven项目
SpringBoot要求,项目要继承SpringBoot的起步依赖spring-boot-starter-parent
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
</parent>
SpringBoot要集成SpringMVC进行Controller的开发,所以项目要导入web的启动依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2.2SpringBoot热部署
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
3SpringBoot原理分析
3.1大概就是写了一堆默认配置
4修改默认配置
4.1新建application.properties(优先)
#服务器端口修改
server.port=80
#应用名称
erver.servlet.context-path=/demo
4.2或者application.yml或application.yaml
Yml易读,多语言通用,类似json文件
#普通数据的配置
name: 汤哥哥的战斗机
#对象的配置
person:
name: zhangsan
age: 18
addr: beijing
server:
port: 8080
#行内对象配置
school: {name: jydiyizhongxue,addr: jiangyou}
#配置数据、集合(普通字符串)
city:
- beijing
- tianjin
- chongqing
- shanghai
country: [china, american, japan, korea]
#配置数据、集合(对象数据)
student:
- name: tom
age: 18
addr: beijing
- name: lucy
age: 17
addr: tianjin
students: [{name: tom, age: 18, addr: beijing},{name: lucy, age: 17, addr: tianjin}]
#map配置
map:
key1: value1
key2: value2
4.3项目中读取yml
4.3.1SPEL读取
@Controller
public class Quick2Controller {
@Value("${name}")
private String name;
@Value("${person.addr}")
private String addr;
@RequestMapping("/quick2")
@ResponseBody
public String quick2(){
//获得配置文件中的信息
return "name="+name+",addr="+addr;
}
}
4.3.2get&set读取
@Controller
@ConfigurationProperties(prefix = "person")
public class Quick3Controller {
private String name;
private String addr;
private Integer age;
@RequestMapping("/quick3")
@ResponseBody
public String quick2() {
//获得配置文件中的信息
return "name=" + name + ",addr=" + addr;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
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;
}
}
5整合MyBatis
5.1加入起步依赖
<!-- mybatis起步依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- mysql连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
5.2配置properties
#数据库连接信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
#配置MyBatis信息
#Spring继承Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=com.tang.springboot_mybatis.domain
#加载Mybatis映射文件
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
就OK了
6整合Junit单元测试
6.1添加起步依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
6.2编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootMybatisApplication.class)
public class MybatisTest {
@Autowired
private UserMapper userMapper;
@Test
public void test(){
List<User> users = userMapper.queryUserList();
System.out.println(users);
}
}
运行OK
7整合JPA+redis
7.1导入起步依赖
<!-- JPA起步依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--jdk9需要导入如下坐标-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
7.2配置properties
#SpringData JPA信息
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
#redis配置
spring.redis.host=localhost
spring.redis.port=6379
7.3JPA代码
import com.tang.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface UserRepository extends JpaRepository<User, Long> {
public List<User> findAll();
}
7.4RedIS代码
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tang.domain.User;
import com.tang.repository.UserRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootJpaApplication.class)
public class RedisTest {
@Autowired
private RedisTemplate<String, String> redisTemplate;
@Autowired
private UserRepository userRepository;
@Test
public void test() throws JsonProcessingException {
//1.从redis中获得数据 数据的形式json
String userlistJson = redisTemplate.boundValueOps("user.findAll").get();
//2.判断redis中是否存在数据
if (null == userlistJson) {
//3.不存在数据 从数据库中查询
List<User> all = userRepository.findAll();
//4.将查询出的数据存储到redis缓存中
//4.1先将List集合转换成json格式的字符串 使用Jackson进行转换
ObjectMapper objectMapper = new ObjectMapper();
userlistJson = objectMapper.writeValueAsString(all);
redisTemplate.boundValueOps("user.findAll").set(userlistJson);
System.out.println("=====从数据库中获得=====");
}else{
System.out.println("=====从redis缓存中获取=====");
}
//4.将返回的数据打印到控制台
System.out.println(userlistJson);
}
}
8 JPA规范
更具条件查询 findBy
9 进阶1:使用@Valid表单验证
10 进阶2:使用AOP处理请求
11 进阶3:统一异常处理
12 进阶4:单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class xxxTest {
}