Springboot BaseRepository

    技术2023-10-16  76

    Springboot repository的基类

    package cn.sp_lube.twmgrr.module.exce; import cn.sp_lube.twmgrr.pojo.ParamEn; import cn.sp_lube.twmgrr.pojo.Tree; import cn.sp_lube.twmgrr.repository.impltools.Enm; import cn.sp_lube.twmgrr.utils.CombineBeans; import cn.sp_lube.twmgrr.utils.Ct; import org.apache.commons.lang3.ObjectUtils; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Transactional public interface BaseRepository <E,ID extends Serializable> { @Resource BaseMapper<E, ID> mapper(); default E beforeSave(E entity){ if (ObjectUtils.anyNotNull ( entity )){ return mapper ().save(entity); } return null; } int reviseInfo(E entity); default Integer delete(ID id) { if (mapper ().existsById(id)) { return mapper().deleteByIdIs( (Integer) id ); } return 0; } default Page<E> findByAll(ParamEn pe){ Pageable pageable = PageRequest.of ( pe.getPageNo (), pe.getPageSize () ); Page<E> page; String name = pe.getV1 (); int cid = pe.getV2 (); boolean v1 = Enm.NON_EMPTY.epNotNull ( name ); boolean v2 = Enm.NON_EMPTY.epNum ( cid ); if (v1 && !v2) { page = this.attributeLike ( Ct.lc ( name ), pageable ); } else if (!v1 && v2) { page = this.attributeLs ( cid, pageable ); } else if (v1 && v2) { page = this.attributeLikeAndLs ( cid, Ct.lc ( name ), pageable ); } else { page = this.attributeNotNULL(pageable); } return page; } Page<E> attributeLike(String n, Pageable pageable ); Page<E> attributeLs(int id, Pageable pageable); Page<E> attributeLikeAndLs(int id, String n, Pageable pageable); Page<E> attributeNotNULL(Pageable pageable); default List<Tree> tree(){ // get product category table all data List<E> list = findByPid(0); // get parent id 0 data of List<Tree> pt0 = new ArrayList<> ( ); // for get two list.forEach ( n->{ // Tree pte = new Tree (n.getId (),n.getName (),n.getIcon ()); Tree tree = CombineBeans.combineSydCoreTree (n); List<E> p0 = findByPid(tree.getKey ()); if (p0.size () <= 0 || p0 == null){ pt0.add ( tree ); return; // 跳出当前循环,继续下一轮 } List<Tree> pt2 = new ArrayList<> ( ); for ( E n2 : p0 ) { Tree tr2 = CombineBeans.combineSydCoreTree (n2); List<E> p1 = findByPid ( tr2.getKey () ); if (p1 == null || p1.size () <= 0) { pt2.add ( tr2 ); continue; } tr2.setChildren ( p1.stream ().map ( CombineBeans::combineSydCoreTree ).collect ( Collectors.toList () ) ); pt2.add ( tr2 ); } tree.setChildren ( pt2 ); pt0.add ( tree ); } ); return pt0; } default List<E> findByPid(int id){ return null; } }

    局限性很大。 重构了一下 findAll(), 原来全部在实现类中做,现在写到了基类。方便很多,但是局限性又大了。麻烦。以后再修改吧。


    Processed: 0.016, SQL: 12