分享一篇,別人寫的不錯的!https://www.cnblogs.com/qianzf/p/9564141.html
先從官網文檔來看,
官網雖然只是這麼講也木有錯,在這裏我要講下的 就是Spring data系列這個方法幾乎是通用的,
比如你看下面的mgdb
下面主要講下,使用條件查詢和@Query寫 JPQL查詢。
先把繼承的接口方法列出來!
//查詢所有
1.public List<User> findAll(){}
//條件查詢+分頁
2.public Page<User> findSearch(Map whereMap, int page, int size){
Specification<User> specification = createSpecification(whereMap);//createSpecification(Map whereMap);//構建多條件,但是隻是基於本User類的屬性
PageRequest pageRequest = PageRequest.of(page-1, size);
return userDao.findAll(specification, pageRequest);
}
3.public List<User> findSearch(Map whereMap) {}//一樣的調用了createSpecification方法構建查詢條件,
4.public void add(User user) {}//增加
5. public void update(User user) {userDao.save(user);}//修改
6.public void deleteById(String id) {}
常規的CRUD我知道的只有這些了,外加一個單表條件方法!
//查詢User,單表,多條件
private Specification<User> createSpecification(Map searchMap) {
return new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> predicateList = new ArrayList<Predicate>();
// ID
if (searchMap.get("id")!=null && !"".equals(searchMap.get("id"))) {
predicateList.add(cb.like(root.get("id").as(String.class), "%"+(String)searchMap.get("id")+"%"));
}
// 手機號碼
if (searchMap.get("mobile")!=null && !"".equals(searchMap.get("mobile"))) {
predicateList.add(cb.like(root.get("mobile").as(String.class), "%"+(String)searchMap.get("mobile")+"%"));
}
// 密碼
if (searchMap.get("password")!=null && !"".equals(searchMap.get("password"))) {
predicateList.add(cb.like(root.get("password").as(String.class), "%"+(String)searchMap.get("password")+"%"));
}
// 暱稱
if (searchMap.get("nickname")!=null && !"".equals(searchMap.get("nickname"))) {
predicateList.add(cb.like(root.get("nickname").as(String.class), "%"+(String)searchMap.get("nickname")+"%"));
}
// 性別
if (searchMap.get("sex")!=null && !"".equals(searchMap.get("sex"))) {
predicateList.add(cb.like(root.get("sex").as(String.class), "%"+(String)searchMap.get("sex")+"%"));
}
// 頭像
if (searchMap.get("avatar")!=null && !"".equals(searchMap.get("avatar"))) {
predicateList.add(cb.like(root.get("avatar").as(String.class), "%"+(String)searchMap.get("avatar")+"%"));
}
return cb.and( predicateList.toArray(new Predicate[predicateList.size()]));
}
};
}
//多表多條件
private Specification<User> createSpecification(Map searchMap) {
return new Specification<User>() {
@Override
68 public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
69 List<Predicate> list = new ArrayList<>();
70 //根據userId 查詢user
71 if (StringUtils.isNotBlank(params.getUserId())) {
72 list.add(cb.equal(root.get("userId").as(String.class), params.getUserId()));
73 }
74 //根據userName 模糊查詢user
75 if (StringUtils.isNotBlank(params.getUserName())) {
76 list.add(cb.like(root.get("userName").as(String.class), "%" + params.getUserName() + "%"));
77 }
78 //根據gender 查詢user
79 if (StringUtils.isNotBlank(params.getGender())) {
80 list.add(cb.equal(root.get("gender").as(String.class), params.getGender()));
81 }
82 //根據age>? 查詢user
83 if (StringUtils.isNotBlank(params.getAge())) {
84 list.add(cb.gt(root.get("age").as(Integer.class), Integer.valueOf(params.getAge())));
85 }
86 //根據gradeName 查詢user
87 if (StringUtils.isNotBlank(params.getGradeName())) {
88 Join<Grade, User> join = root.join("grade", JoinType.LEFT);
89 list.add(cb.equal(join.get("gradeName"), params.getGradeName()));
90 }
91 //根據schoolName 查詢user
92 if (StringUtils.isNotBlank(params.getSchoolName())) {
93 Join<School, User> join = root.join("grade", JoinType.LEFT);
94 list.add(cb.equal(join.get("school").get("schoolName"), params.getSchoolName()));
95 }
96 Predicate[] pre = new Predicate[list.size()];
97 criteriaQuery.where(list.toArray(pre));
98 return cb.and(list.toArray(pre));
99 }
100 }
}
使用以下方式在Dao接口層寫修改
@Modifying //告訴程序是刪除修改的操作
@Query(value = "update tb_user set fanscount=fanscount+? where id=?", nativeQuery = true)
public void updatef(int x, String friendid);
//按順序寫參數,要注意的就是修改的值需要一個+號
也可以不加如下
@Modifying
@Query(value = "UPDATE tb SET islike=? WHERE userid = ? AND friendid = ?", nativeQuery = true)
public void update(String islike, String userid, String friendid);
@Query(value = "SELECT * FROM tb_problem WHERE id IN (SELECT problemid FROM tb_pl WHERE labelid=?) ORDER BY replytime DESC", nativeQuery = true) //不加@Modifying註解就是查詢
public Page<Problem> newList(String labelid, Pageable pageable);//pageable這個是分頁對象,也可以加
Sort sort = new Sort(Sort.Direction.ASC,"id");//sort 這個對象丟進去就能排序
暫時只想到這麼多!