1. 程式人生 > >mybatis分頁條件查詢動態sql

mybatis分頁條件查詢動態sql

http://blog.csdn.net/future_it_daniel/article/details/51810489

MyBatis中實現動態的SQL語句,分頁以及mybatis的常用的配置

原創 2016年07月02日 11:49:11

1.動態SQL:在SQL語句中加入流程控制。比如加入ifforeach等。
 重點掌握if語句:

 案例1

  1. <update id="updateItem" parameterType="com.gxa.bj.modle.UserInfo">  
  2.        update UserInfo set   
  3.        <if
     test="userName!=null">  
  4.            userName=#{userName},  
  5.        </if>  
  6.        <if test="userPwd!=null">  
  7.            userPwd=#{userPwd},  
  8.        </if>  
  9.        <if test="userEmail!=null">  
  10.            userEmail=#{userEmail},  
  11.        </if>  
  12.        userId=#{userId} where userId=#{userId}         
  13.  </update>  

實現列:

  1. UserInfo u=new UserInfo();  
  2.    u.setUserId(7);  
  3.    u.setUserName("李大名");  
  4.    u.setUserPwd("123");  
  5.    u.setUserEmail("[email protected]");  
  6.    userMapper.updateItem(u);  
  7.    sqlSessin.commit();     
  8.    System.out.println("修改成功");  

案列2:

  1. <select id="getList"
     resultType="com.gxa.bj.modle.UserInfo" parameterType="com.gxa.bj.modle.UserInfo">  
  2.         select * from UserInfo where 1=1
  3.         <if test="userName!=null">  
  4.             and userName like #{userName}  
  5.         </if>  
  6.         <if test="userId>0">  
  7.             and userId=#{userId}  
  8.         </if>  
  9.         <if test="userPwd!=null and userPwd!=''">  
  10.             and userPwd like #{userName}  
  11.         </if>  
  12.  </select>  

實現列:

  1. u.setUserName("小白");  
  2.    List<UserInfo> list= userMapper.getList(u);  
  3.    for(UserInfo u1:list){  
  4.     System.out.println("使用者資訊:"+u1.getUserPwd());  
  5.    }  

2.分頁的實現?

分頁的時候考慮的問題:

分頁的大小,分頁的索引。

比如:分頁的大小為10,分頁的起始索引為1(索引從1開始)

第一頁:110.    起始行號: (頁的索引-1*分頁大小+1

                   結束行號: 頁的索引*分頁大小

實現方案:

1)比如針對UserInfo的實體物件做分頁處理,那麼先建立一個分頁的實體類,該類繼承自UserInfo package com.gxa.bj.modle

  1. package com.gxa.bj.modle;  
  2. publicclass UserInfoPage extends UserInfo{   
  3. privateint pageIndex;//分頁的索引
  4.      privateint pageSize;//分頁的大小
  5. privateint startNum;//分頁起始行
  6.      privateint endNum;//分頁結束行
  7. publicint getPageIndex() {  
  8. return pageIndex;  
  9. }  
  10. publicvoid setPageIndex(int pageIndex) {  
  11. this.pageIndex = pageIndex;  
  12. }  
  13. publicint getPageSize() {  
  14. return pageSize;  
  15. }  
  16. publicvoid setPageSize(int pageSize) {  
  17. this.pageSize = pageSize;  
  18. }  
  19. publicint getStartNum() {  
  20. return startNum;  
  21. }  
  22. publicvoid setStartNum(int startNum) {  
  23. this.startNum = startNum;  
  24. }  
  25. publicint getEndNum() {  
  26. return endNum;  
  27. }  
  28. publicvoid setEndNum(int endNum) {  
  29. this.endNum = endNum;  
  30. }   
  31. }  

2)在介面只陪你過定義一個方法:

  1. public List<UserInfo> getListByPage(UserInfoPage upage);  

3)在Mapper檔案中編寫SQL語句:

  1. <select id="getListByPage" resultType="com.gxa.bj.modle.UserInfoPage" parameterType="com.gxa.bj.modle.UserInfoPage">  
  2.         select u.*  
  3.         From(select rownum as num, userinfo.*  
  4.               from userinfo  
  5.               <where>  
  6.                       <if test="userName!=null">  
  7.                           and userName like #{userName}  
  8.                       </if>  
  9.                       <if test="userId>0">  
  10.                           and userId=#{userId}  
  11.                       </if>  
  12.                       <if test="userPwd!=null and userPwd!=''">  
  13.                           and userPwd like #{userName}  
  14.                       </if>  
  15.               </where>  
  16.               ) u where u.num between #{startNum}and#{endNum}  
  17.  </select>  


4)測試程式碼:

  1. UserInfoPage u1= new UserInfoPage();  
  2.    u1.setUserName("userName");  
  3.    u1.setPageIndex(2);//查詢第幾頁
  4.       u1.setPageSize(2);//分佈每頁的條數
  5.       int startNum=(u1.getPageIndex()-1)*u1.getPageSize()+1;  
  6.       int endNum=u1.getPageIndex()*u1.getPageSize();  
  7.       u1.setStartNum(startNum);  
  8.       u1.setEndNum(endNum);  
  9.       List<UserInfo> list=userMapper.getListByPage(u1);  
  10.       for(UserInfo t :list){  
  11.     System.out.println("id:"+t.getUserId());  
  12.     }  


相關推薦

mybatis條件查詢動態sql

http://blog.csdn.net/future_it_daniel/article/details/51810489 MyBatis中實現動態的SQL語句,分頁以及mybatis的常用的配置 原創 2016年07月02日 11:49:11 7223

關於easyUI條件查詢的解決方法

在做專案時,遇到運用easyUI框架,進行條件查詢無法分頁的問題,開始是運用form表單提交的方式,根據不同的條件篩選資料。這樣的方法能實現資料按照所傳條件的查詢,但對查詢得到的資料進行分頁控制不知道怎麼處理。在多方查詢後,找到如下解決辦法:        

MVCEasyUI+jQuery+EF+Ajax實現+條件查詢

Controller程式碼: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using

springboot條件查詢java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.pageh

java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.pagehelper.Page at com.boku.www.service.impl.Projec

mongorepository條件查詢

最近專案有用到mongodb,也是經歷了從不會到滿百度的查資料,對mongodb有了些許的理解,專案裡面總想著偷懶,不想使用template的類去拼寫,就找了spring封裝好的mongorepository進行查詢,大體跟spring-data-jpa差不多,廢話不多說了 進入主題

黑馬十次方專案day02-03之springdatajpa 條件查詢

文章目錄 需求分析 Control層 Service 開啟專案,測試 需求分析 根據十次方api的分頁條件查詢如下 可以看到分頁條件查詢為post請求, 必須傳遞三個引數.

datatables表格外掛實現前後端排序++條件查詢

1、在頁面中引入datatables需要的js及css檔案,定義一個表格 <link rel="stylesheet" href="/script/libs/DataTables/datatables.min.css" type="text/css" />

mybatis的多條件查詢案例(動態sql

近日做系統,由於選擇了mybatis作為後端的ORM,所以在糾結到底用註解annotation的方式好呢,還是使用xml配置的方式。 為此,查詢了很多資料。感覺大部分都在推薦xml配置方式,並且我是誠心的去用annotation的,畢竟想順應時代嘛,結果死活就是找不到。 最

MyBatis中的條件查詢動態sql

  本文將介紹在MyBatis中,與dao對應的sql對映檔案的書寫,用動態sql實現對滿足條件的使用者集合的查詢。   首先,建立一個實體類User; package com.xyfer.pojo; public class User{ private String name;

mybatis查詢sql server--mysql

         在習慣了使用mysql進行資料操作後,突然轉到sql server,雖然說兩者在mybatis中的語法基本相同,很容易替換,但是,這也是最容易出問題的地方,因為往往我們會被這些些微的“不同”坑害。          今天這裡就分享一下mysql和sql s

mybatis查詢,SqlServer 2008 查詢速度很慢

com ima alt 分頁查詢 img bubuko .com nbsp ati 一個業務場景,需要進行union查詢: 查詢速度非常慢,大概要37秒: 直接復制sql在數據庫客戶端執行,速度很快,由此可知是mybatis的原因,在網上搜索,可以配置fetc

mybatis-查詢學習筆記

mybatis-分頁查詢學習筆記 import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import cn.itcast

mybatis查詢需要注意的問題

一般對mybatis的分頁查詢的關鍵程式碼就兩行: #currentPage代表當前頁,pageSize代表每頁的行數 PageHelper.startPage(currentPage, pageSize); #查詢的語句 mapper.select(); 一般程式碼在走到mapper.sel

MyBatis功能的實現(陣列sql、攔截器,RowBounds

前言:學習hibernate & mybatis等持久層框架的時候,不外乎對資料庫的增刪改查操作。而使用最多的當是資料庫的查詢操

MyBatis MySQL limit含運算動態語句

MySQL基本的分頁語句 select * from table limit offset,pageSize 正常情況下是沒問題的,如果offset是動態的 select * from table l

mybatis多表查詢

mybatis分頁多表查詢 我們常遇到一種情況,資料量比較大,如果使用前臺分頁,在前臺如果有許可權,有邏輯判斷,都會大大降低頁面載入的速度,我們需要分頁,單表查詢的網上方法很多,這裡就不贅餘了,多表關聯查詢的分頁需求很多,但是後臺外掛能夠分頁的,Page,PageHelper都是隻支援單表的,多

mybatis 查詢

  <!-- 分頁查詢 -->   <select id="datalistPage" parameterType="page" resultType="pd" useCache="false">     select *

SpringBoot + mybatis 查詢

com.github.pagehelper.PageHelper是一款好用的開源免費的Mybatis第三方分頁外掛。使用的時候,只要簡單配置,就可以在查詢語句之後得到所需的分頁資訊。 1:在 pom.

根據條件查詢動態拼接sql語句

function append_where(&$sql, $has_where) { $sql .= $has_where ? ' AND ' : ' WHERE '; return $sql; } function demo($name = ''

MyBatis的拓展--合併高階查詢

MyBatis分頁的拓展–合併查詢 在網上有很多關於MyBatis攔截器分頁的辦法,可缺少關於合併查詢的方法。本文將講述這一過程的具體實現。 話不多說,直接貼程式碼: applicationContext.xml裡這樣配置: <!--