tensquare项目:
- 导入相关的依赖
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.0.1.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
- 可以用专业的代码生成工具生成代码
- 生成以后在dao层进行相关的查询操作
package com.tensquare.recruit.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import com.tensquare.recruit.pojo.Recruit;
import java.util.List;
public interface RecruitDao extends JpaRepository<Recruit,String>,JpaSpecificationExecutor<Recruit>{
public List<Recruit> findTop4ByStateOrderByCreatetime(String state);
public List<Recruit> findTopBy12StateNotOrderByCreatetimeDesc(String state);
}
package com.tensquare.service;
import com.tensquare.dao.LabelDao;
import com.tensquare.pojo.Label;
import org.hibernate.loader.custom.Return;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import util.IdWorker;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class LabelService {
@Autowired
private LabelDao labelDao;
@Autowired
private IdWorker idWorker;
public List<Label> findAll(){
System.out.println(labelDao.findAll());
return labelDao.findAll();
}
public Label findById(String id){
return labelDao.findById(id).get();
}
public void addLabel(Label label){
label.setId(idWorker.nextId()+"");
labelDao.save(label);
}
public void update(Label label){
labelDao.save(label);
}
public void deleteById(String id){
labelDao.deleteById(id);
}
public Specification<Label> createSpecification(Map searchMap){
return new Specification<Label>(){
@Override
public Predicate toPredicate(Root<Label> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicateList=new ArrayList<>();
if(searchMap.get("labelname")!=null&&!"".equals(searchMap.get("labelname"))){
predicateList.add(criteriaBuilder.like(root.get("labelname").as(String.class),"%"+searchMap.get("labelname")+"%"));
}
if(searchMap.get("state")!=null&&!"".equals(searchMap.get("state"))){
predicateList.add(criteriaBuilder.equal(root.get("state").as(String.class),searchMap.get("state")));
}
if(searchMap.get("recommend")!=null&&!"".equals(searchMap.get("recommend"))){
predicateList.add(criteriaBuilder.equal(root.get("recommend").as(String.class),searchMap.get("recommend")));
}
return criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()]));
}
};
}
public List<Label> findSearch(Map searchMap){
return labelDao.findAll(createSpecification(searchMap));
}
public Page<Label> findSearch(Map searchMap, int page, int size){
Specification<Label> specification = createSpecification(searchMap);
PageRequest pageRequest= PageRequest.of(page-1, size);
return labelDao.findAll(specification,pageRequest);
}
}
- 实现了这两个接口JpaRepository<Recruit,String>,JpaSpecificationExecutor
- 这个是特殊的条件的查询,需要遵循相关的规范。
- 可以看到相关的分页查询的封装和特殊条件查询的封装。