}
//根据id查询
public T findById(ID id) {
Optional optional = baseDAO.findById(id);
if(optional.isPresent()) {
return optional.get();
}
return null;
}
//保存方法
@Transactional
public void save(T entity) {
baseDAO.save(entity);
}
//根据实体类删除
public void delete(T entity) {
baseDAO.delete(entity);
}
//根据id查询
@Transactional
public void deleteById(ID id) {
baseDAO.deleteById(id);
}
//排序查询所有
public List findAll(Sort sort){
return baseDAO.findAll(sort);
}
//动态条件查询
public List findAll(Specification spec){
return baseDAO.findAll(spec);
}
//分页查询
public Page findAll(Pageable pageable){
return baseDAO.findAll(pageable);
}
//动态条件分页查询
public Page findAll(Specification spec, Pageable pageable){
return baseDAO.findAll(spec,pageable);
}
//动态条件排序查询
public List findAll(Specification spec, Sort sort){
return baseDAO.findAll(spec,sort);
}
}
最后就是控制器的封装了,控制器需要先通过反射机制的工具类GenericsUtils,找到对应的实体类。之后封装一下常用的方法。不同于上面两个类的是,他有三个泛型接口,除了实体类和ID的类型外,他还有一个BaseForm类,BaseForm为公共的Form类,该类中就一个id和一个查询条件。因为这里写数据保存方法的数据接收是很使用的Form接收的,使用Form里边的ID是判断是修改还是新增方法(修改和新增用的一个方法,用id是否为null区分),BaseForm类代码如下。
public class BaseForm {
private ID id;
private String search;
public ID getId() {
return id;
}
public void setId(ID id) {
this.id = id;
}
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
}
其中search字段是BootstrapTable查询传递参数的属性名,所以写在了公共的Form类中,不需要的可以删除不要。
公共的CommonController控制器代码如下(主要包了数据显示,新增修改页面的跳转,和数据查询和删除的方法)。
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
-
公共Controller
-
@param