- 注意:要使用thymeleaf视图渲染,必须在标签上添加:
xmlns:th="http://www.thymeleaf.org"
1.自动配置原理
- SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
- 每一个自动配置类都根据@Conditional注解按照条件进行生效,生效的配置类会为容器配置很多组件
- 配置类上需要@EnableConfigurationProperties(xxxProperties.class) 和配置文件进行绑定
- xxxProperties.class需要通过@ConfigurationProperties(prefix = “xxx”) 确定从配置文件(application.properties)中取值的规则,若不在配置文件中更改取值,默认取xxxProperties.class的默认属性值
2. 拦截器执行流程
发送请求以后,进入dodispatch,通过handler确定哪个控制器的哪个方法能处理请求
3.原理分析
4.springboot整合mybatis
由于springboot已经自动配置了SqlSessionFactory和SqlSession,所以只需要通过@Mapper将写好的mapper接口导入进来
4.1 配置mapper的实现配置文件位置
- 在application.properties或者application.yml中配置,以application.yml为例:
spring:
datasource:
url: jdbc:mysql://localhost:3306/ssmbuild
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath:mybatis/mapper/BookMapper.xml
configuration:
map-underscore-to-camel-case: true #开启驼峰命映射
type-aliases-package: com.yang.admin.pojo #配置别名
4.2 编写实体类pojo
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
private int bookID;
private String bookName;
private int bookCounts;
private String detail;
}
4.3 编写mapper接口和实现类配置文件(dao层)
注意:mapper接口必须加上@mapper
@Mapper
public interface BookMapper {
public Books queryById(int bookID);
}
- BookMapper.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.yang.admin.mapper.BookMapper">
<!-- public Books queryById(int id);-->
<select id="queryById" resultType="books" parameterType="int">
select * from ssmbuild.books where bookID=#{bookID}
</select>
</mapper>
4.4 编写service层
@Service
public class BooksService {
@Autowired
BookMapper bookMapper;
public Books queryById(int bookID){
return bookMapper.queryById(bookID);
}
}
4.5 编写controller层
@Controller
public class BookController {
@Autowired
BooksService booksService;
@ResponseBody
@GetMapping("/book/{bookID}")
public Books queryBook(@PathVariable int bookID){
return booksService.queryById(bookID);
}
}
4.6 整个项目结构
4.7 最佳实战:
● 引入mybatis-starter
● 配置application.yaml中,指定mapper-location位置即可
● 编写Mapper接口并标注@Mapper注解
● 简单方法直接注解方式
● 复杂方法编写mapper.xml进行绑定映射
● @MapperScan(“com.atguigu.admin.mapper”) 简化,其他的接口就可以不用标注@Mapper注解
5.自动配置
spring-boot-starter-*:官方提供的场景
*-spring-boot-starter:第三方提高的场景
- 所有场景启动器最底层的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.4.RELEASE</version>
<scope>compile</scope>
</dependency>
- 我们需要什么场景,就导入该场景的starter,starter下没有代码,只是导入了所需要的所有依赖,
引入了哪些场景这个场景的自动配置才会开启, SpringBoot所有的自动配置功能都在
spring-boot-autoconfigure 包里面 - 自动配置:
springboot通过
@EnableAutoConfiguration
注解内的@import
从spring-boot-autoconfigure的META-INF/spring.factories加载所有的AutoConfiguration自动配置类,通过@Conditional
按条件注入bean,若有第三方starter,@import
也会从其jar包的META-INF/spring.factories中加载AutoConfiguration自动配置类
- 在自定义starter中导入对应的自动配置包,在自动配置包内配置对应的xxxAutoConfiguration,以及其对应的CconfigurationProperties,这样容器中就导入了这个自动配置类