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 createSpecification(Map searchMap) {

        return new Specification() {

            @Override
            public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
                List predicates = new ArrayList();
                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 searchMap = new HashMap();
searchMap.put("id",1);
searchMap.put("name","zs");
//searchMap:传参
Specification specification = createSpecificationLogin(searchMap);
List list = wUserSitesDao.findAll(specification);

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

//查询条件拼接
private Specification createSpecification(Map searchMap) {
        return new Specification() {
            @Override
            public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
                List predicates = new ArrayList();
                List predicateList = new ArrayList();
                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 searchMap = new HashMap();
searchMap.put("id",1);
searchMap.put("name","zs");
searchMap.put("address",null);
//searchMap:传参
Specification specification = createSpecificationLogin(searchMap);
List list = wUserSitesDao.findAll(specification);

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

 

你可能感兴趣的:(spring)