说明
组长分派我写一个简单的后代管理,实现增删改查即可,鉴于本人水平较差,将不熟练的分页查询记录下来,
方便以后复用。
我用JPA和数据库进行交互,也就是说自己的Repository需要继承 JpaSpecificationExecutor<T>,
继承了之后可以使用JPA自带的findAll()方法
(Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);)。
这个findAll需要传入两个参数,一个是Specification,一个是Pageable 。
这样我们实现的思路就很清晰了,获取这两个参数就可以了。
代码
//我定义的定义的实体类,PagePojo,获取前端传来的分页参数;UserEntity,对应数据库字段的实体类
package cn.wildfirechat.app.pojo;
/**
* 分页VO
* @since 2021/11/24
*/
@Data
public class PagePojo {
private int limit;
private int page;
private String userName;
}
//实体类 UserEntity
import javax.persistence.*;
import java.io.Serializable;
import java.security.MessageDigest;
import java.util.Base64;
import java.util.Date;
/**
* wfchat数据库的t_user表
* * @since 2021/11/6
*/
@Entity
@Table(name = "t_user")
public class UserEntity implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "_uid")
private String userId;
@Column(name = "_name")
private String name;
@Column(name = "_passwd_md5")
private String password;
@Column(name = "_display_name")
private String displayName;
@Column(name = "_portrait")
private String portrait;
@Column(name = "_gender")
private int gender;
@Column(name = "_mobile")
private String mobile;
@Column(name = "_email")
private String email;
@Column(name = "_address")
private String address;
@Column(name = "_company")
private String company;
@Column(name = "_social")
private String social;
@Column(name = "_extra")
private String extra;
@Column(name = "_type")
private int type;
@Column(name = "_dt")
private int dt;
@Column(name = "_createTime")
private java.util.Date createTime;
@Column(name = "_deleted")
private int deleted;
public UserEntity() {
}
public UserEntity(Integer id,String userId, String name, String password,
String displayName, String portrait, int gender, String mobile,
String email, String address, String company, String social,
String extra, int type) {
this.id = id;
this.userId = userId;
this.name = name;
this.password = password;
this.displayName = displayName;
this.portrait = portrait;
this.gender = gender;
this.mobile = mobile;
this.email = email;
this.address = address;
this.company = company;
this.social = social;
this.extra = extra;
this.type = type;
}
public String getUserId() {
return userId;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
String passwdMd5 = Base64.getEncoder()
.encodeToString(md5.digest(password.getBytes("utf-8")));
this.password = passwdMd5;
} catch (Exception e)
{
System.out.println("密码加密失败!");
}
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getPortrait() {
return portrait;
}
public void setPortrait(String portrait) {
this.portrait = portrait;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getCompany() {
return company;
}
public void setCompany(String company) {
this.company = company;
}
public String getSocial() {
return social;
}
public void setSocial(String social) {
this.social = social;
}
public String getExtra() {
return extra;
}
public void setExtra(String extra) {
this.extra = extra;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getDt() {
return dt;
}
public void setDt(int dt) {
this.dt = dt;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public int getDeleted() {
return deleted;
}
public void setDeleted(int deleted) {
this.deleted = deleted;
}
}
//UserEntityRepository的代码
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import java.util.List;
/**
* @Data 2021/11/6
*/
@RepositoryRestResource()
public interface UserEntityRepository extends CrudRepository<UserEntity,Integer> ,
JpaSpecificationExecutor<UserEntity> {
}
//controller层代码
/*展示用户*/
@PostMapping(value = "show_all_user",produces = "application/json;charset=UTF-8")
public Object showAllUser(@RequestBody PagePojo pagePojo){
int limit = pagePojo.getLimit();
int page = pagePojo.getPage();
String userName = pagePojo.getUserName();
return mService.showAllUser(limit,page,userName);
}
//service层代码
RestResult showAllUser(int limit,int page,String userName);
//serviceImp层代码
/*展示全部用户*/
@Override
public RestResult showAllUser(int limit,int pageNum,String userName) {
//排序
Sort sort = Sort.by(Sort.Direction.ASC, "id");
//查询
//新建pageable
Pageable pageable = PageMapper.of(pageNum, limit);
//新建Specification查询构造器
Specification<UserEntity> specification = new Specification<UserEntity>() {
private static final long serialVersionUID = 1L;
@Override
public Predicate toPredicate(Root<UserEntity> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
Predicate predicate = criteriaBuilder.conjunction();
/*
*如果是查询全部的用户,可以不用写限制条件,直接Override就可以了,
*如果有限制条件,还需要写下面的限制条件
*/
//type是表t_user的字段名,这是在查询中加了限定条件,限制了查出的数据type只能是0
predicate.getExpressions().add(criteriaBuilder.equal(root.get("type"), 0));
//判断前端传来的userName是否为空
if(org.apache.commons.lang3.StringUtils.isNotBlank(userName)){
//userId是表t_user的的字段名,
//如果userName不为空,进行模糊查询,模糊查询的字段为userName
predicate.getExpressions().add(criteriaBuilder.like(root.get("userId"), "%" + userName + "%"));
}
return predicate;
}
};
//将specification和pageable两个参数传入page中
Page<UserEntity> page = userEntityRepository.findAll(specification, pageable);
//pageMapper中需要的参数,page的长度,page的内容(用户的集合),页码,条数
PageMapper<UserEntity> pageInfo = new PageMapper<UserEntity>(page.getTotalElements(),page.getContent(),pageNum,limit);
//我直接把查询到的用户传给了前端
return RestResult.ok(pageInfo);
}
版权声明:本文为qq_45563512原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。