spring data jpa 标准查询的项目代码结构

对于标准查询方法的构造,我们有四种方式构造:


1. 在实体层(domain layer)公共类(BaseEntity<T>)构造,第一选择;

2. 在实体层(domain layer)具体类构造,第三选择;

3. 在数据层(dao layer)公共自定义接口(BaseCustomDao<T>)及其实现类(BaseDaoCustomImpl<T>)构造,第二选择;

4. 在数据层(dao layer)具体自定义接口构造,第四选择;


1、3运用泛型,可举例说明:

1. 在实体层(domain layer)公共类(BaseEntity<T>)构造

BaseEntity.java

@MappedSuperclass 
public abstract class BaseEntity<T> implements Serializable{
	private static final long serialVersionUID = 1L;
	
	protected Long id;	
        ......
        
	/** 状态标记 : 0正常,1删除,2停用 */
	protected Validated validated;
	
	......
	
	/**
	 * 覆盖toString方法,目的显示所有JavaBean的属性值,省略写很多的getXxx的方法
	 */
	public String toString() {
		return ToStringBuilder.reflectionToString(this,
				ToStringStyle.MULTI_LINE_STYLE);
	}
	
	public Specification<T> validatedSetEqual(final Validated... validated) {
           return new Specification<T>() {
               @Override
               public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                   return cb.and(root.get("validated").in((Object[]) validated));
               }
           };
        }
        
        /**
	 * 根据正常状态标记validated ENABLE,来筛选记录
	 * @param validated
	 * @return
	 */
	public Specification<T> enable() {
          return new Specification<T>() {
            @Override
            public Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                return cb.equal(root.get("validated"), Validated.ENABLE);
            }
        };
    }
       
        public Specification<T> buildSpec(Map<String, Object> searchParams) {
		// TODO Auto-generated method stub
		return null;
	}
        
}

   调用,如:

@Entity
@Table(name = "users")
public class User extends BaseEntity<User> {
    ......
}


3. 在数据层(dao layer)公共自定义接口(BaseCustomDao<T>)及其实现类(BaseDaoCustomImpl<T>)构造,如:

public interface BaseCustomDao<T> {
	 Specification<T> buildSpec(Map<String, Object> searchParams);
}


public class BaseCustomDaoImpl<T> implements BaseCustomDao<T> {
	@Override
	public Specification<T> buildSpec(Map<String, Object> searchParams) {
		// TODO Auto-generated method stub
		return null;
	}
}


   调用,如:

   

public interface UserDao extends JpaRepository<JXUser, Long>, JpaSpecificationExecutor<JXUser>, BaseCustomDao<JXUser> {
    ......
}



你可能感兴趣的:(jpa,specification)