1. 程式人生 > >mybatis動態條件查詢和翻頁查詢的例子

mybatis動態條件查詢和翻頁查詢的例子

繼續測試動態查詢的語句和翻頁查詢語句。

Test3.java原始碼:

package domain;  
      
import java.io.IOException;  
import java.io.Reader;  
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.io.Resources;  
import org.apache.ibatis.session.SqlSession;  
import org.apache.ibatis.session.SqlSessionFactory;  
import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
import com.springdemo.usermgr.vo.SUser;


      
    public class Test3 {  
        public static void main(String[] args) throws IOException {  
            String resource = "config.xml";  
            Reader reader = Resources.getResourceAsReader(resource);  
            SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);  
            SqlSession session = ssf.openSession(false); //true 為自動提交事務

            try {  
                
                SUser condi=new SUser();
                condi.setUserName("中文名zhou");
                condi.setPwd("y");        //模糊條件
                List<SUser> as=session.selectList("dynamicWhereTest", condi);

                System.out.println("查詢結果:"+as.size());
                Map<String, Object> parms = new HashMap<String, Object>();  
         //       parms.put("pwd", "x");  
                parms.put("stanum", 2); //從第2條紀錄起,查出4條記錄,不含第2條
                parms.put("offset", 4);
                
                List<SUser> as2=session.selectList("dynamicWherePage", parms);
                
                System.out.println("翻頁結果:"+as2.size());
                session.commit(true);
            } catch (Exception e) {
                session.rollback(true);
                e.printStackTrace();  
            } finally {  
                session.close();  
            }  
        }  
    } 

修改SUser.xml,增加翻頁查詢和動態條件查詢

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC   
    "-//mybatis.org//DTD Mapper 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="com.springdemo.usermgr.vo.SUserMapper">  
    <select id="selectSUser" parameterType="int" resultType="SUser">  
        select * from Suser where id = #{id}  
   </select>
    <select id="getSUser" parameterType="String" resultType="SUser">  
        select * from Suser where username = #{name}  
   </select>
     <insert id="insertSUser" parameterType="SUser">
      <selectKey resultType="int" keyProperty="id">
      SELECT LAST_INSERT_ID()
      </selectKey>
      insert into
      suser(userName,pwd,signUpTime)values(#{userName},#{pwd},#{signUpTime})
    </insert>    
    <select id="dynamicWhereTest

" parameterType="SUser" resultType="SUser">  
        select * from Suser   
        <where>  
            <if test="userName != null">  
                userName = #{userName}  
            </if>  
            <if test="pwd != null">  
                and pwd LIKE CONCAT('%', CONCAT(#{pwd}, '%'))
            </if>  

        </where>  
    </select>  
    <select id="dynamicWherePage
" parameterType="java.util.Map" resultType="SUser">  
        select * from Suser   
        <where>  
            <if test="pwd != null">  
                and pwd LIKE CONCAT('%', CONCAT(#{pwd}, '%'))
            </if>  

        </where>  
        limit #{stanum},#{offset}
    </select>         
</mapper> 

資料庫,suser表記錄也增加一些記錄,便於測試查詢結果:

執行test3,可能的結果為:

查詢結果:3
翻頁結果:4

===============================================================

條件判斷的一點BUG:

<if test="querC != null and querC != ''"> 使用的ONGL表示式,在判斷條件為空值時候一般這麼寫

<if test="querC != null and querC != ''">,沒有問題。

但是在判斷==條件的時候會出問題。

<if test=" querC =='1'">

這種寫法會出錯,在querC=“0”時候,仍然判斷為否。

必須修改寫法為:

<if test='querC =="1"'>

這樣才行。

========================================================

開源翻頁外掛,使用pagehelper5.0.0外掛,資料庫為mysql5.0,匯入jar包pagehelper-5.0.0.jar,jsqlparser-0.9.5.jar:

https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

spring MVC 配置:

    <!-- myBatis檔案 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
<!--          <property name="configLocation" value="classpath:config/mapper/configuration.xml"/>  -->
        <!-- 自動掃描entity目錄, 省掉Configuration.xml裡的手工配置 -->
        <property name="mapperLocations" value="classpath:mybat/*.xml"/>
        <property name="typeAliasesPackage" value="com.squgrc.vo"/>
     <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageInterceptor">
                <!-- 這裡的幾個配置主要演示如何使用,如果不理解,一定要去掉下面的配置 -->
                <property name="properties">
                    <value>
                        helperDialect=mysql
                        reasonable=true
                        supportMethodsArguments=true
                        params=count=countSql
                        autoRuntimeDialect=true
                    </value>
                </property>
            </bean>
        </array>
    </property>       
    </bean>

java程式碼部分:

service層:

    public PageInfo selectList(String card_id,String realname,String phone,String credittype,String srcInfo,Integer pageNumber,Integer pageSize){
        
        Map<String, String> map = new HashMap<String, String>();
        map.put("name", realname);
        map.put("idcard", card_id);
        map.put("phone", phone);
        map.put("status", credittype); //名單型別,0-白名單,1-灰名單,2-黑名單,
        map.put("type", srcInfo); //0-手動倒入,1-系統匯入
        

        PageHelper.startPage(pageNumber, pageSize);
        List<UserStatusVo> sVoList= impCreditTypelogMap.selectList(map);
        PageInfo page = new PageInfo(sVoList);

        formatImpCredit(sVoList); //將資料格式化輸出

        return page;
    }

ctrl層:

    @RequestMapping("getList.do")
    @ResponseBody
    public HashMap<String, Object> getImpCreditList(String card_id, String realname, String phone, String credittype,
            String srcInfo,Integer pageNumber,Integer pageSize) {

        HashMap<String, Object> retTable = new HashMap<String, Object>();

        PageInfo pageRet = impCreditService.selectList(card_id, realname, phone, credittype, srcInfo,pageNumber,pageSize);

        retTable.put("RespDesc", "成功!");
        retTable.put("RespCode", "000");
        //retTable.put("RetList", list);
        retTable.put("rows", pageRet.getList());
        retTable.put("total",pageRet.getTotal());
        return retTable;
    }

注意:mybati的sql語句不要太複雜,不要包含limit等已經存在翻頁查詢語句。只有第一條sql語句會被外掛翻譯並且加上翻頁條件。

相關推薦

mybatis動態條件查詢查詢例子

繼續測試動態查詢的語句和翻頁查詢語句。 Test3.java原始碼: package domain;          import java.io.IOException;   import java.io.Reader;   import java.util.H

Oracle子查詢相關內容(包含TOP-N查詢查詢)

職位 oracle子查詢 員工 having 信息 不同 group 最大 mount 本節介紹Oracle子查詢的相關內容: 實例用到的數據為oracle中scott用戶下的emp員工表,dept部門表,數據如下: 一、子查詢 1、概念:嵌入在一個查詢中的另一個

Java操作MongoDB模糊查詢查詢

模糊查詢條件:1、完全匹配Pattern pattern = Pattern.compile("^name$", Pattern.CASE_INSENSITIVE);2、右匹配Pattern pattern = Pattern.compile("^.*name$", P

微服務架構實戰篇(三):Spring boot2.0 + Mybatis + PageHelper實現增刪改查查詢功能

簡介 該專案主要利用Spring boot2.0 +Mybatis + PageHelper實現增刪改查和分頁查詢功能,快速搭建一套和資料庫互動的專案。 小工具一枚,歡迎使用和Star支援,如使用過程中碰到問題,可以提出Issue,我會盡力完善該Starter 版本基礎

laravel 條件查詢限制 查詢

  //查詢10條資料 \DB::table('users')     -> where('id', '>=', $id)     -> orderBy('id','desc')     -> ta

java操作mongdb多條件複合查詢(包括模糊查詢按時間段查詢),分

最近學了下mongdb,在這兒先和大家分享一下java操作mongdb的多條件查詢,包括模糊查詢,完全匹配查詢和按時間段查詢,以及分頁。 MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。他支援的資料結構非常鬆散,

mybatis學習之多表關聯查詢resultmap的常用標籤屬性 查詢

對映方式一: resultType和resultMap都可以用但要注意欄位的名稱和pojo屬性的名稱;如果pojo屬性不夠可 採用繼承和新增屬性的方式去實現對映; resultMap:在多表查詢的時候,查詢到多條資料,需要把資料封裝到pojo中,再把pojo放到list

mybatis pagehelp分 Springmvc+Mybatis+pagehelper5.1.2+bootstrap table分查詢

1.修改Mybatis配置檔案 <!-- MyBatis配置 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

JPA分條件查詢聯表查詢

一、分頁多條件查詢–重寫Specification的toPredicate方法 Spring Data JPA支援JPA2.0的Criteria查詢,相應的介面是JpaSpecificationExecutor。 Criteria 查詢:是一種型別安全和更面

HQL(動態查詢,分查詢)

分頁查詢 div set 回話 from ber tor string onf 動態查詢 Session session; Transaction tx;@Before public void mybefor() { //1構建配置對象COnfigurat

Solr遊標查詢提高效率

ppm 所有 println 52.0 1.0 extc pos sca stat 使用cursorMark深分頁 1、Solr4.7+ 2、start=0(一直等於0),rows=6(需要返回的記錄條目) 3、第一次請求cursorMark=*,下一次請求用上次請求返回的

【SSH網上商城專案實戰05】完成資料庫的級聯查詢

  轉自:https://blog.csdn.net/eson_15/article/details/51320212 上一節我們完成了EasyUI選單的實現。這一節我們主要來寫一下CategoryServiceImpl實現類,完成資料庫的級聯查詢。一般專案從後往前做,先做se

在 spring-mybatis配置檔案中新增分查詢功能

先將包匯入 然後在resource下面新建mybatisConfig.xml檔案,內容如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//myb

Mybatis-plus之RowBounds實現分查詢

物理分頁和邏輯分頁 物理分頁:直接從資料庫中拿出我們需要的資料,例如在Mysql中使用limit。 邏輯分頁:從資料庫中拿出所有符合要求的資料,然後再從這些資料中拿到我們需要的分頁資料。 優缺點 物理分頁每次都要訪問資料庫,邏輯分頁只訪問一次。 物理分頁佔用記憶體少,邏輯分頁相對較多。 物理分頁資

laravel+vue+element-UI模糊查詢

laravel+vue+element進行不重新整理查詢和分頁 <el-select v-model="search.site_node_id" filterable placeholder="請選擇"> <el-option

JPA Predicate 處理條件in的分查詢

Pageable pageable = PageRequest.of(pageQueryDto.getPage() - 1, pageQueryDto.getSize(), Sort.Direction

MyBatis程式碼例項系列-10:MyBatis通過PageHelper外掛實現分查詢

本章主要記錄MyBatis通過PageHelper外掛實現分頁查詢,涉及到的技術點有: - com.github.pagehelper:開源的MyBatis分頁外掛 1.SQL drop table apple; create table `a

mongodb java增刪該查模糊、排序查詢

package mongodb; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.regex.Pattern; import com.mong

提高spark sql查詢效能的想法

一般每一頁的資料量比較小,1000條以內。大概的想法就是把要查詢的資料先一次性查出來快取在記憶體中,之後翻頁查詢的時候直接取結果就行了,這樣只是第一次查的比較慢,後面從記憶體中直接取資料就非常快了。但是這又帶來一個問題,如果結果集太大,比如有100w行資料,而且有很多列,這樣就會佔用大量記憶體,使執