说明
组长分派我写一个简单的后代管理,实现增删改查即可,鉴于本人水平较差,将不熟练的分页查询记录下来,
方便以后复用。
我用JPA和数据库进行交互,也就是说自己的Repository需要继承 JpaSpecificationExecutor<T>,
继承了之后可以使用JPA自带的findAll()方法
(Page<T> findAll(@Nullable Specification<T> var1, Pageable var2);)。
这个findAll需要传入两个参数,一个是Specification,一个是Pageable 。
这样我们实现的思路就很清晰了,获取这两个参数就可以了。
代码
package cn.wildfirechat.app.pojo;
@Data
public class PagePojo {
private int limit;
private int page;
private String userName;
}
import javax.persistence.*;
import java.io.Serializable;
import java.security.MessageDigest;
import java.util.Base64;
import java.util.Date;
@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;
}
}
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;
@RepositoryRestResource()
public interface UserEntityRepository extends CrudRepository<UserEntity,Integer> ,
JpaSpecificationExecutor<UserEntity> {
}
@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);
}
RestResult showAllUser(int limit,int page,String userName);
@Override
public RestResult showAllUser(int limit,int pageNum,String userName) {
Sort sort = Sort.by(Sort.Direction.ASC, "id");
Pageable pageable = PageMapper.of(pageNum, limit);
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();
predicate.getExpressions().add(criteriaBuilder.equal(root.get("type"), 0));
if(org.apache.commons.lang3.StringUtils.isNotBlank(userName)){
predicate.getExpressions().add(criteriaBuilder.like(root.get("userId"), "%" + userName + "%"));
}
return predicate;
}
};
Page<UserEntity> page = userEntityRepository.findAll(specification, pageable);
PageMapper<UserEntity> pageInfo = new PageMapper<UserEntity>(page.getTotalElements(),page.getContent(),pageNum,limit);
return RestResult.ok(pageInfo);
}