Spring Data Jpa 進行原生Sql 分頁和條件查詢
因為業務的原因今天寫了一個原生的Spring Data jpa的分頁查詢 :
1 .進行封裝自己PageQuery:
public class PageQuery {
public Integer getPage() {
return page - 1;
}
public void setPage(Integer page) {
this.page = page;
}
public Integer getSize() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
@NotNull(message = "引數不允許為空")
private Integer page = 1; // 預設為1
@NotNull(message = "引數不允許為空")
private Integer size = 20;
}
- 進行封裝 PageBean .
import java.util.List;
public class PageBean<T> {
private Long totalCount; // 總記錄數
private List<T> pageData; // 每頁記錄數
public Long getTotalCount() {
return totalCount;
}
public void setTotalCount(Long totalCount) {
this.totalCount = totalCount;
}
public List<T> getPageData() {
return pageData;
}
public void setPageData (List<T> pageData) {
this.pageData = pageData;
}
}
進行封裝自己的查詢引數:這個就不再多說了 。
SpingMVC controller
//所有的終端與車輛關聯的資訊
@RequestMapping("/vehicleAndTerminal.json")
@ResponseBody
public HashMap<String, Object> vehicleAndTerminal(PageQuery pageQuery, Terminal terminal){
return terminalService.vehicleAndTerminal(pageQuery, terminal);
}
- 進行業務層程式碼 :
5.1 注入entityManagerFactory
@Autowired
private LocalContainerEntityManagerFactoryBean entityManagerFactory;
5.2 進行原生的Sql 拼接
// 此處用了原生的sql拼接
// 有Sql注入的風險
@Override
public HashMap<String, Object> vehicleAndTerminal(PageQuery pageQuery, Terminal terminal) {
HashMap<String, Object> map = new HashMap<String, Object>();
String sql = "SELECT * FROM terminal t WHERE t.vSn IS NOT NULL AND t.vSn!=''";
Integer page = pageQuery.getPage();
Integer size = pageQuery.getSize();
String vSn = terminal.getvSn();
if (vSn != null) {
sql += "AND t.vSn=" + vSn + " ";
}
String vin = terminal.getVin();
if (vin != null) {
sql += "AND t.vin=" + vin + " ";
}
String num = terminal.getNum();
if (num != null) {
sql += "AND t.num=" + num + " ";
}
String barcode = terminal.getBarcode();
if (barcode != null) {
sql += "AND t.barcode=" + barcode + " ";
}
sql += "LIMIT" + " " + page + "," + size;
EntityManager em = entityManagerFactory.getNativeEntityManagerFactory().createEntityManager();
Query nativeQuery = em.createNativeQuery(sql, Terminal.class);
@SuppressWarnings({ "unused", "unchecked" })
List<Terminal> termins = nativeQuery.getResultList();
if (em != null) {
em.close();
}
map.put("total", termins.size());
map.put("rows", termins);
return map;
}
這樣就實現了動態查詢 ,以及分頁。 上面的程式碼 我自己封裝的PageBean 沒有用上 ,下面的程式碼是改過的
public PageBean<Terminal> vehicleAndTerminal(PageQuery pageQuery, Terminal terminal) {
HashMap<String, Object> map = new HashMap<String, Object>();
String sql = "SELECT * FROM terminal t WHERE t.vSn IS NOT NULL AND t.vSn!=''";
Integer page = pageQuery.getPage();
Integer size = pageQuery.getSize();
String vSn = terminal.getvSn();
if (vSn != null) {
sql += "AND t.vSn=" + vSn + " ";
}
String vin = terminal.getVin();
if (vin != null) {
sql += "AND t.vin=" + vin + " ";
}
String num = terminal.getNum();
if (num != null) {
sql += "AND t.num=" + num + " ";
}
String barcode = terminal.getBarcode();
if (barcode != null) {
sql += "AND t.barcode=" + barcode + " ";
}
sql += "LIMIT" + " " + page + "," + size;
EntityManager em = entityManagerFactory.getNativeEntityManagerFactory().createEntityManager();
Query nativeQuery = em.createNativeQuery(sql, Terminal.class);
@SuppressWarnings({ "unused", "unchecked" })
List<Terminal> termins = nativeQuery.getResultList();
if (em != null) {
em.close();
}
// map.put("total", termins.size());
// map.put("rows", termins);
// return map;
PageBean<Terminal> pageBean = new PageBean<>();
pageBean.setTotalCount((long) termins.size());
pageBean.setPageData(termins);
return pageBean;
}
相關推薦
Spring Data Jpa 進行原生Sql 分頁和條件查詢
因為業務的原因今天寫了一個原生的Spring Data jpa的分頁查詢 : 1 .進行封裝自己PageQuery: public class PageQuery { pub
Spring Data Jpa多表聯合分頁查詢
參考:https://blog.csdn.net/qq_36144258/article/details/80298354 近期一個專案用到Spring Data Jpa,Jpa用來做單表查詢非常的簡單粗暴,可以說不用寫sql,但是涉及到複雜的多表操作,還是要寫sql,這個時候需要用到@Quer
spring data jpa 中@Query註解分頁pageable查詢
持有層程式碼:Repository @Query(value = "select * from user_liveapp where user_Id = :userId ORDER BY ?#{#pageable}", nativeQuery = true) Page&
Spring Data JPA的Pageable物件,實現對已查詢出list的分頁
Pageable物件 但是有一種情況就是,pageable無法對已查詢出資料的list結果進行分頁,這在實際開發中幾乎不可避免,很多複雜業務,出於簡化開發或者考慮實際的原因,不可能通過一個sql查詢實現需求,肯定會對查詢出的list資料進行過濾,而這時pag
spring-data-jpa動態拼接sql語句實現動態的多表條件查詢
** spring-data-jpa 動態拼接sql語句 ** spring-data-jpa對於簡單的資料操作確實使用起來比較方便,但是對於一些比較複雜的動態的多表條件查詢就不是那麼簡單了,對於需要些sql語句並且需要動態的新增條件的時候就得使用jpa的EntityManager來
SpringBoot學習(三)--構建RESTFUL API並用spring-data-jpa進行儲存&&使用IDEA反向生成帶註釋的例項
構造User物件(/domain),如果有資料庫的表可以直接使用IDEA反向生成例項的類。過程如下: 開啟IDEA:View-ToolWindows-Database。新增資料來源,選擇資料庫型別,輸入資料庫的ip。如果不是預設Windows登陸資料庫,則取消勾選然後填入使用者名稱,密碼。
使用spring data 對mongodb實現簡單分頁
//對某一書籍下的所有dxh按訪問量排序並分頁 public List<CKDXH> getPartitionDXHCKCountByBookIdandDes(Integer bookId,Integer start,Integer pagesize){
spring boot JPA Kotlin 使用QueryDsl 分頁查詢
介紹 QueryDsl 是一個針對Java的面向物件查詢的工具,支援的模組有JPA,SQL,Mongodb,JDO,Lucense,集合。 sample List<Person> persons = queryFactory.selectFrom(person)
spring boot jpa 使用原生sql查詢,特此記錄。
嗯哼,2018年7月18號特此記錄,使用java spring boot + jpa 開發後端,進行資料庫增刪改查(使用原生sql)進行。因為是第一次寫,僅僅是為了記錄,方便以後檢視,寫的不好還請見諒。 package com.jony.keer.repository;
MyBatis SQL分頁處理及查詢總數據量
batis ger 分頁 var index add and resultmap ted 查詢數據總數:<select id="selectCount" resultType="java.lang.Integer"> <!-- WAR
SpringBoot第四講擴充套件和封裝Spring Data JPA(一)_自定義Repository和建立自己的BaseRepository
這一講主要介紹Spring Data JPA的封裝。和設計相關的東西都是仁者見仁,智者見智的事情,如果你有更好的封裝方案可以和我交流,互相學習。這一講會講如下一些內容 - 擴充套件Spring Data JPA實現自己的一些特殊方法 - 建立一個自己的Bas
JPA分頁多條件查詢和分頁聯表查詢
一、分頁多條件查詢–重寫Specification的toPredicate方法 Spring Data JPA支援JPA2.0的Criteria查詢,相應的介面是JpaSpecificationExecutor。 Criteria 查詢:是一種型別安全和更面
spring data jpa 裡 Dao層中Repository和JpaSpecificationExecutor的一個小坑
public interface LabelRepository extends Repository<Label, Lon
分頁,條件查詢
分頁查詢 當前頁 字符串 查詢 style ebean SQ lib ice 1 分頁查詢 1.1 分頁核心 設計一個用於封裝當前頁所有分頁相關的數據的PageBean對象,每次訪問根據PageBean對象顯示當前頁面信息 1.2 分頁的實現步驟 1)編寫分頁對象和實體對象
分頁三條件查詢
use click 刪除 UNC index child mage size data $.ajax({ url: ‘http://localhost:8486/WebService.asmx/GetUsert‘, typ
springboot專案,layui與pageHelper整合,列表分頁,條件查詢
一、前端頁面 重點:1、table.render初始化載入資料 2、reload查詢按鈕觸發,資料重新載入
在mybatis中實現oracle分頁和模糊查詢
今天在工作中,遇到一個業務需求,就是需要在oracle裡進行模糊查詢並分頁,SQL語句如下: select m.label,m.building_loc_id,m.shape.minx x,m.shape.miny y from
5.0其他WEB技術——分頁和模糊查詢結合例項
JAVAWEB文章索引點這裡 首先分頁的核心是寫一個PageBean物件,將頁面中要使用到的首頁、上頁、下頁、末頁、頁數、查詢出的內容等等進行一個封裝。然後轉發回到頁面中進行一個顯示。而模糊查詢的核心是對sql語句進行一個拼接,達到模糊匹配需要內容的效果。
springMVC、myBatis的物理分頁和高階查詢
最新專案用到springMVC和mybatis,分頁其實用一個RowBounds可以實現,但是高階查詢不好封裝, 經過反覆測試,總算搞出來了,感覺封裝的不是很好,有待優化和提高! 原理:利用mybatis自定義外掛功能,自定義一個攔截器,攔截需要分頁的sql
在Spring Boot中使用Spring-data-jpa實現分頁查詢(轉)
分頁查詢 log def inpu database ext identity odin btn 在我們平時的工作中,查詢列表在我們的系統中基本隨處可見,那麽我們如何使用jpa進行多條件查詢以及查詢列表分頁呢?下面我將介紹兩種多條件查詢方式。 1、引入起步依賴