基于SpringBoot的Web开发流程 静态资源的导入 SpringBoot项目中的静态资源有两种访问方式
通过webjars访问 首先引入相关依赖
1 2 3 4 5 6 7 8 9 10 <dependency > <groupId > org.webjars</groupId > <artifactId > webjars-locator-core</artifactId > </dependency > <dependency > <groupId > org.webjars</groupId > <artifactId > jquery</artifactId > <version > 3.3.1</version > </dependency >
根据webjars路径访问静态资源,快速访问:http://localhost:8080/webjars/jquery/jquery.js
通过根目录访问 根目录访问静态资源会通过resources下的三个路径
resources:放在resources目录下的resources目录中
public:放在resources下的public目录中
static:放在resources下的static目录中
三个路径的优先级:resources>static(默认资源路径)>public
首页与图标定制 首页设置只需要在三个resources下的静态资源路径中存档index.html即可
图标定制需要将favicon.ico文件存放在static资源路径下
Thymeleaf模板引擎 模板引擎的概念 模板引擎可以让(网站)程序实现界面与数据分离,业务代码与逻辑代码的分离,这就大大提升了开发效率,良好的设计也使得代码重用变得更加容易。模板引擎不只是可以让你实现代码分离(业务逻辑代码和用户界面代码),也可以实现数据分离(动态数据与静态数据),还可以实现代码单元共享(代码重用),甚至是多语言、动态页面与静态页面自动均衡(SDE)等等与用户界面可能没有关系的功能。
Thymeleaf模板引擎特性
Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。这是由于它支持 html 原型,然后在 html 标签里增加额外的属性来达到模板+数据的展示方式。浏览器解释 html 时会忽略未定义的标签属性,所以 thymeleaf 的模板可以静态地运行;当有数据返回到页面时,Thymeleaf 标签会动态地替换掉静态内容,使页面动态显示。
Thymeleaf 开箱即用的特性。
Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能。
Thymeleaf使用
引入相关依赖
1 2 3 4 <dependency > <groupId > org.springframework.boot</groupId > <artifactId > spring-boot-starter-thymeleaf</artifactId > </dependency >
在templates文件夹下创建测试页面(必须在该文件夹下才能自动解析)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <!DOCTYPE html > <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
1 2 3 4 5 6 7 8 9 @Controller public class HelloController { @RequestMapping("/test") public String test (Model model) { model.addAttribute("msg" ,"Ywrby" ); return "test" ; } }
测试页面访问
可以看到页面成功展示并且传入的值被前端成功取出
Thymeleaf基本语法
th:text:文本替换;
th:utext:支持html的文本替换。
th:value:属性赋值
th:each:遍历循环元素
th:if:判断条件,类似的还有th:unless,th:switch,th:case
th:insert:代码块引入,类似的还有th:replace,th:include,常用于公共代码块提取的场景
th:fragment:定义代码块,方便被th:insert引用
th:object:声明变量,一般和*{}一起配合使用,达到偷懒的效果。
th:attr:设置标签属性,多个属性可以用逗号分隔
SpringBoot整合SpringMVC拦截器 根据SpringBoot官方文档的说明,SpringBoot已经实现了对SpringMVC基本的配置,如果我你们需要进行MVC的一些自定义配置(拦截器,格式化器,视图控制器,消息转换器等等),可以通过实现一个配置类,该配置类实现接口WebMvcConfigurer,并且天界@Configuration注解表明自身是一个配置类
如果需要自定义HandlerMapping,HandlerAdapter,ExcceptionResolver等组件,可以通过创建一个WebMvcRegistrationsAdapter实例,来提供以上组件
如果我们需要完全自定义SpringMVC,不保留SpringBoot所提供的一切默认特征,可以通过自定义类并且添加@Coonfiguration和@EnableWebMvc两个注解来实现
步骤一:编写拦截器 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @Slf4j 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方法正在执行" ); } }
步骤二:配置日志记录级别(不必须,只是上文使用了日志框架,效果更直观) 1 2 3 4 5 logging: level: cn.ywrby: debug org.springframework: info
步骤三:实现配置类,复写添加拦截器方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 @Configuration public class MvcConfig implements WebMvcConfigurer { @Bean public TestInterceptor testInterceptor () { return new TestInterceptor(); } @Override public void addInterceptors (InterceptorRegistry registry) { registry.addInterceptor(testInterceptor()).addPathPatterns("/*" ); } }
SpringBoot整合事务和连接池 整合JDBC和事务 由于SpringBoot的开箱即用的概念,对于JDBC的整合也是十分简单的
首先还是在pom.xml中添加数据库驱动的依赖以及JDBC的启动器依赖
1 2 3 4 5 6 7 8 9 10 11 <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下配置即可
1 2 3 4 5 6 7 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
编写数据库操作 1 2 3 4 5 6 7 8 9 10 11 12 13 @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; } }
测试执行情况 1 2 3 4 5 6 7 8 9 10 11 12 13 @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启动器依赖 SpringBoot官方并没有提供MyBatis的启动器,但是MyBatis自己实现了启动器,只需要引入依赖即可
1 2 3 4 5 6 <dependency > <groupId > org.mybatis.spring.boot</groupId > <artifactId > mybatis-spring-boot-starter</artifactId > <version > 2.1.4</version > </dependency >
在pom.xml中配置mybatis相关信息 注意:这里的type-aliases-package不是配置mapper所在的路径,而是实体类所在的路径,mybatis会自动帮我们将该类下的实体类按照类名创建为别名
1 2 3 4 5 6 7 8 mybatis: type-aliases-package: cn.ywrby.domain mapper-locations: classpath:cn.ywrby.mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
编写mapper层接口 1 2 3 4 public interface UserMapper { public List<User> findAll () ; }
在启动器前利用注解扫描mapper层路径 1 2 3 4 5 6 7 8 9 10 @MapperScan("cn.ywrby.mapper") @SpringBootApplication public class SpringBootTestApplication { public static void main (String[] args) { SpringApplication.run(SpringBootTestApplication.class, args); } }
测试mybatis 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @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); } } }