使用 spring jpa開發有段時間了,總體感覺是
開發簡單,但是不夠靈活.
比如是根據某個字段查詢,直接寫findby欄位 名稱的語法就可以了,相比mybatis還需要寫乙個 example物件,然後建立 criteria, 這樣省去了很多時間.
但是不夠靈活,比如聯表查詢.
在查詢時,通常需要同時根據多個屬性進行查詢,且查詢的條件也格式各樣(大於某個值、在某個範圍等等),spring data jpa 為此提供了一些表達條件查詢的關鍵字,大致如下:
and --- 等價於 sql 中的 and 關鍵字,比如 findbyusernameandpassword(string user, striang pwd);
or --- 等價於 sql 中的 or 關鍵字,比如 findbyusernameoraddress(string user, string addr);
between --- 等價於 sql 中的 between 關鍵字,比如 findbysalarybetween(int max, int min);
lessthan --- 等價於 sql 中的 "<",比如 findbysalarylessthan(int max);
greaterthan --- 等價於 sql 中的">",比如 findbysalarygreaterthan(int min);
isnull --- 等價於 sql 中的 "is null",比如 findbyusernameisnull();
isnotnull --- 等價於 sql 中的 "is not null",比如 findbyusernameisnotnull();
notnull --- 與 isnotnull 等價;
like --- 等價於 sql 中的 "like",比如 findbyusernamelike(string user);
notlike --- 等價於 sql 中的 "not like",比如 findbyusernamenotlike(string user);
orderby --- 等價於 sql 中的 "order by",比如 findbyusernameorderbysalaryasc(string user);
not --- 等價於 sql 中的 "! =",比如 findbyusernamenot(string user);
in --- 等價於 sql 中的 "in",比如 findbyusernamein(collectionuserlist) ,方法的引數可以是 collection 型別,也可以是陣列或者不定長引數;
notin --- 等價於 sql 中的 "not in",比如 findbyusernamenotin(collectionuserlist) ,方法的引數可以是 collection 型別,也可以是陣列或者不定長引數;
原生sql的支援:
直接貼**:
public inte***ce reguserdao extends pagingandsortingrepository, jpaspecificationexecutor
分頁支援:
mapsearchparams = new hashmap();
searchparams.put("eq_jobname",jobname);
pageable page = pageutils.buildpagerequest(pagenumber, pagesize, sorttype,"count");
specificationspecification = pageutils.buildspecification(searchparams,commonfriend.class);
pagepagecommonfriend = commonfrienddao.findall(specification, page);
public class pageutils else if ("asc".equals(sorttype))
return new pagerequest(pagenumber - 1, pagesize, sort);
}/**
* 建立動態查詢條件組合.
*/public static specification buildspecification(mapsearchparams,class cls)
}
SpringJPA常見問題
原因懶載入引起 配置openentitymanagerinviewfilter在web.xml中 web.xml org.springframework.web.context.contextloaderlistener contextconfiglocation dispatchservlet o...
springjpa(五)QueryDsl查詢細
這邊介紹個簡便方法,使用projections。首先我們還是以學校和學生表作為例子。這邊我們先建乙個studentdto public class studentdto public void setid long id public string getname public void setna...
SpringJPA 直接實現count
剛開始使用jpa時,基本都依賴 query sql 註解通過原生sql來實現 根據編號統計條數 方法一 query select count t from followerinfo t where investuserid invuserid integer findfollowernumberby...