package com.boying.common;
|
|
import com.boying.common.util.StringUtil;
|
import org.springframework.data.domain.Page;
|
import org.springframework.data.domain.Pageable;
|
import org.springframework.data.jpa.domain.Specification;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.persistence.criteria.CriteriaBuilder;
|
import javax.persistence.criteria.CriteriaQuery;
|
import javax.persistence.criteria.Predicate;
|
import javax.persistence.criteria.Root;
|
import java.io.Serializable;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
public abstract class BaseService <T, ID extends Serializable>{
|
|
protected BaseDao<T, ID> baseDao;
|
|
protected abstract void setBaseDao(BaseDao<T, ID> baseDao);
|
|
@Transactional(readOnly = false)
|
public void save(T t) {
|
this.baseDao.save(t);
|
}
|
|
@Transactional(readOnly = false)
|
public void delete(ID id) {
|
this.baseDao.deleteById(id);
|
}
|
|
public T findById(ID id) {
|
return this.baseDao.getOne(id);
|
}
|
|
public List<T> findAll() {
|
return this.baseDao.findAll();
|
}
|
|
public long count(Specification specification) {
|
return this.baseDao.count(specification);
|
}
|
|
public long count(Object... paramValues) {
|
Specification<T> specification = new Specification<T>() {
|
@Override
|
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
List<Predicate> list = new ArrayList<Predicate>();
|
for(int i=0;i<paramValues.length;i++){
|
String name = paramValues[i].toString();
|
Object obj = paramValues[i+1];
|
if(obj==null){
|
list.add(cb.isNull(root.get(name)));
|
}else{
|
list.add(cb.equal(root.get(name).as(obj.getClass()), obj));
|
}
|
i++;
|
}
|
Predicate[] arr = new Predicate[list.size()];
|
cq.where(list.toArray(arr));
|
return null;
|
}
|
};
|
return this.baseDao.count(specification);
|
}
|
|
public List<T> findAll(Specification specification) {
|
return this.baseDao.findAll(specification);
|
}
|
|
public List<T> findAll(Object... paramValues) {
|
Specification<T> specification = new Specification<T>() {
|
@Override
|
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
List<Predicate> list = new ArrayList<Predicate>();
|
for(int i=0;i<paramValues.length;i++){
|
String name = paramValues[i].toString();
|
Object obj = paramValues[i+1];
|
if(obj==null){
|
list.add(cb.isNull(root.get(name)));
|
}else{
|
list.add(cb.equal(root.get(name).as(obj.getClass()), obj));
|
}
|
i++;
|
}
|
Predicate[] arr = new Predicate[list.size()];
|
cq.where(list.toArray(arr));
|
return null;
|
}
|
};
|
return this.baseDao.findAll(specification);
|
}
|
|
|
public Page<T> findPage(Pageable pageable) {
|
Page<T> all = this.baseDao.findAll(pageable);
|
return all;
|
}
|
|
public Page<T> findPage(Pageable pageable, Specification specification) {
|
Page<T> all = this.baseDao.findAll(specification,pageable);
|
return all;
|
}
|
|
public Page<T> findPage(Pageable pageable,Object... paramValues) {
|
Specification<T> specification = new Specification<T>() {
|
@Override
|
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
List<Predicate> list = new ArrayList<Predicate>();
|
for(int i=0;i<paramValues.length;i++){
|
String name = paramValues[i].toString();
|
Object obj = paramValues[i+1];
|
//list.add(cb.equal(root.get(name).as(obj.getClass()), obj));
|
if(obj==null){
|
list.add(cb.isNull(root.get(name)));
|
}else{
|
list.add(cb.equal(root.get(name).as(obj.getClass()), obj));
|
}
|
i++;
|
}
|
Predicate[] arr = new Predicate[list.size()];
|
cq.where(list.toArray(arr));
|
return null;
|
}
|
};
|
Page<T> all = this.baseDao.findAll(specification,pageable);
|
return all;
|
}
|
|
public Page<T> findPageHaveLike(Pageable pageable,int likeNum,Object... paramValues) {
|
Specification<T> specification = new Specification<T>() {
|
@Override
|
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
List<Predicate> list = new ArrayList<Predicate>();
|
for(int i=0;i<paramValues.length;i++){
|
String name = paramValues[i].toString();
|
Object obj = paramValues[i+1];
|
if(i<(likeNum*2)){
|
if (obj!=null) {
|
if(!StringUtil.isNullOrEmpty(obj.toString()))
|
list.add(cb.like(root.get(name).as(String.class), "%"+obj.toString()+"%"));
|
}
|
}else{
|
if(obj==null){
|
list.add(cb.isNull(root.get(name)));
|
}else{
|
list.add(cb.equal(root.get(name).as(obj.getClass()), obj));
|
}
|
//list.add(cb.equal(root.get(name).as(obj.getClass()), obj));
|
}
|
i++;
|
}
|
Predicate[] arr = new Predicate[list.size()];
|
cq.where(list.toArray(arr));
|
return null;
|
}
|
};
|
Page<T> all = this.baseDao.findAll(specification,pageable);
|
return all;
|
}
|
|
|
public List<T> findAllByLike(int likeNum,Object...paramValues){
|
Specification<T> specification = new Specification<T>() {
|
@Override
|
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
|
List<Predicate> list = new ArrayList<Predicate>();
|
for(int i=0;i<paramValues.length;i++){
|
String name = paramValues[i].toString();
|
Object obj = paramValues[i+1];
|
if(i<(likeNum*2)){
|
if (obj!=null) {
|
if(!StringUtil.isNullOrEmpty(obj.toString()))
|
list.add(cb.like(root.get(name).as(String.class), "%"+obj.toString()+"%"));
|
}
|
}else{
|
if(obj==null){
|
list.add(cb.isNull(root.get(name)));
|
}else{
|
list.add(cb.equal(root.get(name).as(obj.getClass()), obj));
|
}
|
}
|
i++;
|
}
|
Predicate[] arr = new Predicate[list.size()];
|
cq.where(list.toArray(arr));
|
return null;
|
}
|
};
|
return this.baseDao.findAll(specification);
|
}
|
}
|