系统介绍及项目结构
实体类设计
本次项目po包中主要有五个实体类:
1、 在主建Id上需要加注释:@Id和@GeneratedValue(strategy = GenerationType.AUTO)才会自动增长
2、 在需要重新设置表字段名的属性上加注释@Column(name = “字段名”)即可。
3、 在类名上添加注释:@Entity和@Table(name = “t_user”),t_user是表名
举例:Tag.java
package com.zhongruan.entity;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "t_tag")
public class Tag {
@Id
@GeneratedValue
private Long id;//标签id
private String name;//标签名
@ManyToMany(mappedBy = "tags")
private List<News> newsList = new ArrayList<>();
public Tag() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<News> getNewsList() {
return newsList;
}
public void setNewsList(List<News> newsList) {
this.newsList = newsList;
}
@Override
public String toString() {
return "Tag{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
通过定义类里的元素和构造函数进行实体类的设计。所有controller文件写好后,在application.yml文件中添加配置:
//自动创建数据库表
jpa:
hibernate:
ddl-auto: update
show-sql: true//在控制台显示sql语句
运行项目,可以发现数据库中已经自动生成表。
过滤器与拦截器
一般的项目系统中都会有过滤器和拦截器。
过滤器
过滤器是为了区分用户和非用户,避免直接跳过登录步骤打开页面。流程图:
首先在项目中新建一个filter
再对web.xml进行配置
<filter>
<filter-name>loginfilter</filter-name>
<filter-class>com.zhongruan.filter.LoginFilter</filter-class>
</filter>
<!-- 过滤器的映射 -->
<filter-mapping>
<filter-name>loginfilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
之后就可以在具体类中进行过滤器的实现。
拦截器
这个方面讲的主要是一个后端的校验。在新增功能时,需要对新增的信息进行判断,如果与数据库中的数据有重复,则是不能新增成功的。
代码:
public String update(@RequestParam long id, Type type, BindingResult result, RedirectAttributes attributes) {
// 修改后名称是否存在
Type t1 = typeService.getTypeByName(type.getName());
if (t1 != null) {
result.rejectValue("name", "nameError", "不能添加重复的类");
}
if (result.hasErrors()) {
return "admin/types-input";
}
Type t2 = typeService.updateType(id, type);
if (t2 == null) {
attributes.addFlashAttribute("message", "更新失败");
} else {
attributes.addFlashAttribute("message", "更新成功");
}
return "redirect:/admin/types";
}
拦截结果: