SpringBoot项目中的静态资源有两种访问方式
首先引入相关依赖
<dependency><!--Webjars版本定位工具(前端)-->
<groupId>org.webjars</groupId>
<artifactId>webjars-locator-core</artifactId>
</dependency>
<dependency><!--Jquery组件(前端)-->
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.3.1</version>
</dependency>
根据webjars路径访问静态资源,快速访问:http://localhost:8080/webjars/jquery/jquery.js
根目录访问静态资源会通过resources下的三个路径
三个路径的优先级:resources>static(默认资源路径)>public
首页设置只需要在三个resources下的静态资源路径中存档index.html即可
图标定制需要将favicon.ico文件存放在static资源路径下
模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这就大大提升了开发效率,良好的设计也使得代码重用变得更加容易。模板引擎不只是可以让你实现代码分离(业务逻辑代码和用户界面代码),也可以实现数据分离(动态数据与静态数据),还可以实现代码单元共享(代码重用),甚至是多语言、动态页面与静态页面自动均衡(SDE)等等与用户界面可能没有关系的功能。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!DOCTYPE html>
<!--引入thymeleaf命名空间-->
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Test页面</h1>
<!--从后端取出对应的值-->
<div th:text="${msg}"></div>
</body>
</html>
@Controller
public class HelloController {
@RequestMapping("/test")
public String test(Model model){
model.addAttribute("msg","Ywrby");
return "test";
}
}
可以看到页面成功展示并且传入的值被前端成功取出
根据SpringBoot官方文档的说明,SpringBoot已经实现了对SpringMVC基本的配置,如果我你们需要进行MVC的一些自定义配置(拦截器,格式化器,视图控制器,消息转换器等等),可以通过实现一个配置类,该配置类实现接口WebMvcConfigurer,并且天界@Configuration注解表明自身是一个配置类
如果需要自定义HandlerMapping,HandlerAdapter,ExcceptionResolver等组件,可以通过创建一个WebMvcRegistrationsAdapter实例,来提供以上组件
如果我们需要完全自定义SpringMVC,不保留SpringBoot所提供的一切默认特征,可以通过自定义类并且添加@Coonfiguration和@EnableWebMvc两个注解来实现
/**
* 测试拦截器,测试SpringMVC配置类是否生效
*/
@Slf4j //java日志框架
public class TestInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//每当经过前置拦截器,都已日志情况输出方法执行情况
log.debug("当前TestInterceptor类的preHandle方法正在执行");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
log.debug("当前TestInterceptor类的postHandle方法正在执行");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
log.debug("当前TestInterceptor类的afterCompletion方法正在执行");
}
}
# 配置日志记录级别
logging:
level:
cn.ywrby: debug
org.springframework: info
// 标识该类为配置类
@Configuration
public class MvcConfig implements WebMvcConfigurer { //继承WebMvcConfigurer以实现对SpringMVC组件的控制
//在SpringMVC容器中注册拦截器
@Bean //使用在方法上,标注将该方法返回值存储到Spring容器中
public TestInterceptor testInterceptor(){
return new TestInterceptor();
}
//将拦截器添加到SpringMVC拦截器链中,复写该方法
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(testInterceptor()).addPathPatterns("/*");
}
}
由于SpringBoot的开箱即用的概念,对于JDBC的整合也是十分简单的
首先还是在pom.xml中添加数据库驱动的依赖以及JDBC的启动器依赖
<!--jdbc启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
只需要在核心配置文件application.yml下配置即可
spring:
# 配置数据库连接池
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://cdb-cd3ybvc6.cd.tencentcdb.com:10056/test
data-username: root
data-password: renboyu010214
@Component("userDao")
public class UserDaoImpl implements UserDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public List<User> findAll() {
//执行数据库查询操作,获取所有用户信息并封装到集合中
List<User> userList = jdbcTemplate.query("select * from sys_user", new BeanPropertyRowMapper<User>(User.class));
return userList;
}
}
@SpringBootTest
class SpringBootTestApplicationTests {
@Autowired
private UserDaoImpl userDao;
@Test
void contextLoads() {
List<User> users = userDao.findAll();
for(User user:users){
System.out.println(user);
}
}
}
SpringBoot官方并没有提供MyBatis的启动器,但是MyBatis自己实现了启动器,只需要引入依赖即可
<!--配置MyBatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
注意:这里的type-aliases-package不是配置mapper所在的路径,而是实体类所在的路径,mybatis会自动帮我们将该类下的实体类按照类名创建为别名
mybatis:
# 配置实体类别名 包路径
type-aliases-package: cn.ywrby.domain
# 配置映射文件路径
mapper-locations: classpath:cn.ywrby.mapper/*.xml
# 配置日志文件
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
//用户数据访问层
public interface UserMapper {
public List<User> findAll() ;
}
// 扫描该包下所有mybatis业务mapper接口,传入参数是接口所在包路径
@MapperScan("cn.ywrby.mapper")
// @SpringBootApplication注解表明该类是一个SpringBoot应用
@SpringBootApplication
public class SpringBootTestApplication {
public static void main(String[] args) {
//run方法 启动SpringBoot应用
SpringApplication.run(SpringBootTestApplication.class, args);
}
}
@SpringBootTest
class SpringBootTestApplicationTests {
@Autowired(required = false)
private UserMapper userMapper;
@Test
void contextLoads() {
List<User> users = userMapper.findAll();
for(User user:users){
System.out.println(user);
}
}
}