package com.chehaha.common.data.service;
import java.io.Serializable;
import java.util.List;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import com.chehaha.common.data.pojo.Criterion;
import com.chehaha.common.data.pojo.DataMode;
public interface ICrudService {
<T> T get(Serializable id,Class<T> clazz);
<T> T findOne(List<Criterion> criteria, Class<T> clazz);
<T> T save(T entity,Class<T> clazz);
<T> T save(T entity);
<T> T saveGeneric(T entity,Class<?> clazz);
<T> void delete(T entity, Class<T> clazz);
<T> void delete(T entity);
<T> List<T> getAll(Class<T> clazz);
<T> List<T> getAll(Class<T> clazz, Sort sort);
<T> List<T> getAll(Class<T> clazz,DataMode mode);
<T> List<T> getAll(Class<T> clazz,DataMode mode, Sort sort);
<T> List<T> getGenericAll(Class<?> clazz);
<T> List<T> getGenericAll(Class<?> clazz,DataMode mode);
<T> List<T> find(Class<T> clazz, List<Criterion> criteria);
<T> List<T> find(Class<T> clazz, List<Criterion> criteria, DataMode mode);
<T> List<T> find(Class<T> clazz, List<Criterion> criteria, Sort sort);
<T> List<T> find(Class<T> clazz, List<Criterion> criteria, Sort sort,DataMode mode);
<T> List<T> findGeneric(Class<?> clazz, List<Criterion> criteria);
<T> List<T> findGeneric(Class<?> clazz, List<Criterion> criteria,DataMode mode);
<T> Page<T> getAllByPage(Class<T> clazz,Pageable page);
<T> Page<T> getGenericAllByPage(Class<?> clazz,Pageable page);
<T> Page<T> findByPage(Class<T> clazz, List<Criterion> criteria,Pageable page);
<T> Page<T> findByPage(Class<T> clazz, List<Criterion> criteria,Pageable page,DataMode mode);
<T> Page<T> findGenericByPage(Class<?> clazz, List<Criterion> criteria,Pageable page);
<T> Page<T> findGenericByPage(Class<?> clazz, List<Criterion> criteria,Pageable page,DataMode mode);
// <T> List<T> search(Class<T> clazz,Predicate predicate);
}
-----------------------------------------------------------------------------
1.参数设定2.值设定3.builder匹配方法选择。这里用表达式来区分
package com.chehaha.common.data.pojo;
import java.io.Serializable;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class Criterion implements Serializable {
private static final long serialVersionUID = 815285616955434414L;
private final static String regex = "\\|";
private String property;
private Expression expression;
private Object value;
public static Criterion instance(String key,Object value){
Criterion c = new Criterion();
String[] keys = key.split(regex);
c.setExpression(keys.length == 1 ? Expression.Equal : Expression.set(keys[1]));
c.setProperty(keys[0]);
switch(c.getExpression()){
case Between:
Map<String,Object> data = (Map<String,Object>)value;
String type = data.get("type").toString();
if("date".equals(type)){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
DateRangeCriterion o = new DateRangeCriterion();
try {
o.setBegin(sdf.parse(data.get("begin").toString()));
o.setEnd(sdf.parse(data.get("end").toString()));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
c.setValue(o);
}else if("int".equals(type)){
IntegerRangeCriterion o = new IntegerRangeCriterion();
o.setBegin(Integer.parseInt(data.get("begin").toString()) );
o.setEnd(Integer.parseInt(data.get("end").toString()));
c.setValue(o);
}else if("long".equals(type)){
LongRangeCriterion o = new LongRangeCriterion();
o.setBegin(Long.parseLong(data.get("begin").toString()) );
o.setEnd(Long.parseLong(data.get("end").toString()));
c.setValue(o);
}else if("float".equals(type)){
FloatRangeCriterion o = new FloatRangeCriterion();
o.setBegin(Float.parseFloat(data.get("begin").toString()) );
o.setEnd(Float.parseFloat(data.get("end").toString()));
c.setValue(o);
}else{
DoubleRangeCriterion o = new DoubleRangeCriterion();
o.setBegin(Double.parseDouble(data.get("begin").toString()) );
o.setEnd(Double.parseDouble(data.get("end").toString()));
c.setValue(o);
}
break;
case In:
if(value instanceof String){
c.setValue(Arrays.asList(value.toString().split(",")));
}else if(value instanceof List){
c.setValue(value);
}
break;
default:
c.setValue(value);

本文档介绍了JPA在SpringBoot中的应用,包括多数据源配置、EntityManageFactory管理和EntityManage接口。重点讲解了三种使用方式:1)直接用entitymanage操作;2)封装到自定义JpaRepository接口;3)使用SimpleJpaRepository。通过实例展示了Criterion参数对象和Specification的使用,以实现复杂的查询条件。
最低0.47元/天 解锁文章

906

被折叠的 条评论
为什么被折叠?



