spring-data-jpa 动态条件 分页查询

pom.xml配置

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

数据库连接配置

############################################################
#
# 数据源配置 
#
############################################################
spring.datasource.url=jdbc:mysql://localhost:3306/xxxx
spring.datasource.username=xxxx
spring.datasource.password=xxxx
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.stat-view-servlet.allow=true

实体类user ,省去部分字段及set、get方法

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;

@Entity
@Table(name = "gr_user")
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	
	@NotNull(message="不能为空")
	@Column(name="name")
    private String name;
	
    private String pwd;

    private String nick;
    @Column(name="role_id")
    private String roleId;
    
    @Column(name="depart_id")
    private String departId;

 dao层用UserRepository

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Integer>  {
	 
}

userService层用 UserService 


@Service
@Transactional
public class UserService {

	@Autowired
	private UserRepository userRepository;
    
    	public Page<User> findByPage(User user, Integer pageNum, Integer pageSize){
		Pageable pageAble = new PageRequest(pageNum,pageSize,new Sort(Direction.DESC,"id"));
		Specification<User> spec = new Specification<User>() {
			private static final long serialVersionUID = -594262632507712037L;
			@Override
			public Predicate toPredicate(Root<User> root, CriteriaQuery<?> crite, CriteriaBuilder cb) {
				List<Predicate> pr = new ArrayList<>();
				if( user!= null && user.getName() != null){
					pr.add(cb.like(root.get("name").as(String.class), "%"+user.getName()+"%"));
				  //  pr.add(cb.like(root.<String>get("name"), "%"+user.getName()+"%"));
				}
				return cb.and(pr.toArray(new Predicate[pr.size()]));
			}
		};
		return userRepository.findAll(spec,pageAble);
	}



}

usercontroller

@RestController
@RequestMapping("/user")
public class UserController {
	
	@Autowired
	private UserRepository userRep;
	@Autowired
	private UserService userService;

    @RequestMapping("/page")
	//@RequestBody(required=false)不校验参数为空的
	public Page<User> findByPage(@RequestBody(required=false) User user,
			@RequestParam(required=false) Integer pageNum,
			@RequestParam(required=false) Integer pageSize ){
		if(pageNum == null){
			pageNum = 0;
		}
		if(pageSize == null){
			pageSize = 10;
		}
		return userService.findByPage(user, pageNum, pageSize);
	}



}

 测试 Postman

测试结果

 

猜你喜欢

转载自blog.csdn.net/sinat_38314794/article/details/81083112