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
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
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
Mybatis使用generator自動生成的Example類使用OR條件查詢 mybatis example使用 and和or聯合查詢(轉) MyBatis - MyBatis Generator 生成的example 如何使用 and or 簡單混合查詢 關於Mybatis的Example(an
參考:https://blog.csdn.net/qq_36614559/article/details/80354511 public List<AssetsDevicetypeRefactor> fetchDevicetypeByInfosysi
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行資料,而且有很多列,這樣就會佔用大量記憶體,使執