实例主要运用thymeleaf与jpa,实现数据的增删改查的功能,并进一步添加了登录功能(实现拦截器与视图解析的基本配置)jpa为我们提供便捷数据库操作,简化开发难度,thymeleaf实现前端数据渲染。
资源地址:https://github.com/zyz-1998/project/tree/master/jpaThymeleafTest
个人博客:https://zyz-1998.github.io
一、实例简介
实体类(domain)定义实体,数据访问层(Dao)实现对数据库的操作,数据服务层(Service)定义各种服务接口,数据服务的实现(serviceImpl)定义数据服务层的具体实现,控制层(Controller)响应请求
配置信息类(configure)实现诸如拦截器、视图解析的配置。
目录结构
部分效果
### 二. Thymeleaf
Thymeleaf是服务器端的一种Java模板引擎
优点:静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调
2.1 导入thymeleaf依赖
<dependency> pId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
2.2 引入命名空间
<html lang="en" xmlns:th="http://www.thymeleaf.org">
2.3 th属性
功能 | 标签 | 功能和jsp对比 | |
---|---|---|---|
1 | Fragment inclusion | th:insert th:replace | include(片段包含) |
2 | Fragment iteration | th:each | c:forEach(遍历) |
3 | Conditional evaluation | th:if th:unless th:switch th:case | c:if(条件判断) |
4 | Local variable definition | th:object th:with | c:set(声明变量) |
5 | General attribute modification | th:attr th:attrprepend th:attrappend | 属性修改支持前面和后面追加内容 |
6 | Specific attribute modification | th:value th:href th:src … | 修改任意属性值 |
7 | Text (tag body modification) | th:text th:utext | 修改标签体内容utext:不转义字符大标题 |
8 | Fragment specification | th:fragment | 声明片段 |
9 | Fragment removal | th:remove | 删除模板片段 |
2.4 标准表达式语法
${…}` 变量表达式,Variable Expressions
@{...}
链接表达式,Link URL Expressions
#{...}
消息表达式,Message Expressions
~{...}
代码块表达式,Fragment Expressions
*{...}
选择变量表达式,Selection Variable Expressions
三. jpa
Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。
Spring Boot Jpa 是 Spring 基于 ORM 框架、Jpa 规范的基础上封装的一套 Jpa 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。让我们解脱了 DAO 层的操作,基本上所有 CRUD 都可以依赖于它来实现
当我们需要定义自己的Repository的时候,我们可以继承JpaRepository,从而获得Spring为我们预先定义的多种基本数据操作方法。
pom.xml导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
application.properties配置
#jdbc
spring.datasource.url=jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8&&serverTimezone=UTC&useSSL=true
spring.datasource.username=root
spring.datasource.password=zyz98
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#jpa
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show.sql=true
#禁用thymeleaf缓存
spring.thymeleaf.cache=false
四. 登录拦截器配置
定义LoginHandlerInterceptor类实现HandlerInterceptor接口方法,preHandle()请求处理前执行操作
public class LoginHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute("loginUser");
if(user!=null)
return true;
request.setAttribute("loginMsg","没权限请先登录");
request.getRequestDispatcher("/login").forward(request,response);
return false;
}
}
在configure层MyConfigure类中添加登录拦截器
@Configuration
public class MyConfigure implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry){
registry.addViewController("/").setViewName("/user/login");
registry.addViewController("/login").setViewName("/user/login");
}
//添加拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/","/login","/userLogin");
}
}
参考链接:
http://www.ityouknow.com/springboot/2017/09/23/spring-boot-jpa-thymeleaf-curd.html