spring data jpa基本增刪改查,複雜動態查詢

1、select

@Query("from User where id = ?1")
User queryByID(Integer id);

@Query(" from User where id = ?1 and name = ?2")
User queryByIDandName(Integer id,String name);

2、delete

@Modifying
@Query("delete from User where id = ?1")
void deleteByID(Integer id);

3、update

@Modifying
@Query("update User set name = :name where id = :id")
void updateByID(@Param("name") String name,@Param("id") Integer id);

4、動態查詢(and、or、like)

//查詢條件拼接
private Specification<User> createSpecification(Map searchMap) {

        return new Specification<User>() {

            @Override
            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                List<Predicate> predicates = new ArrayList<Predicate>();
                if (searchMap.get("id")!=null && !"".equals(searchMap.get("id"))) {
                    predicates.add(cb.equal(root.get("id"),searchMap.get("id")));
                }
                if (searchMap.get("name")!=null && !"".equals(searchMap.get("name"))) {
                    predicates.add(cb.like(root.get("name").as(String.class), "%"+(String)searchMap.get("name")+"%"));
                }

                return cb.and( predicateList.toArray(new Predicate[predicates.size()]));
            }
        };
    }

Map<String,Object> searchMap = new HashMap();
searchMap.put("id",1);
searchMap.put("name","zs");
//searchMap:傳參
Specification<User> specification = createSpecificationLogin(searchMap);
List<User> list = wUserSitesDao.findAll(specification);

sql語句:select * from User  where (name like ?) and id = 1

//查詢條件拼接
private Specification<User> createSpecification(Map searchMap) {
        return new Specification<User>() {
            @Override
            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                List<Predicate> predicates = new ArrayList<Predicate>();
                List<Predicate> predicateList = new ArrayList<Predicate>();
                if (searchMap.get("id")!=null && !"".equals(searchMap.get("id"))) {
                    predicates.add(cb.equal(root.get("id"),searchMap.get("id")));
                }
                if (searchMap.get("name")!=null && !"".equals(searchMap.get("name"))) {
                    predicateList.add(cb.like(root.get("name").as(String.class), "%"+(String)searchMap.get("name")+"%"));
                }
                if (searchMap.get("address")!=null && !"".equals(searchMap.get("address"))) {
                    predicateList.add(cb.isNull(root.get("address").as(String.class)));
                }
                Predicate predicateAnd = cb.and(predicates.toArray(new                             Predicate[predicateList.size()]));
                predicateAnd = cb.and(predicateAnd);
                Predicate predicateOr = cb.or(predicates.toArray(new Predicate[predicates.size()]));
                predicateOr = cb.and(predicateOr);
                return query.where(predicateOr,predicateAnd).getRestriction();
            }
        };
    }

Map<String,Object> searchMap = new HashMap();
searchMap.put("id",1);
searchMap.put("name","zs");
searchMap.put("address",null);
//searchMap:傳參
Specification<User> specification = createSpecificationLogin(searchMap);
List<User> list = wUserSitesDao.findAll(specification);

sql語句: select * from User  where (name like ? or address is null) and id = 1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章