當前位置:首頁 » 編程語言 » mybatissql分頁

mybatissql分頁

發布時間: 2022-05-14 08:03:26

1. oracle下mybatis一對多的映射關系怎麼分頁

mybatis的物理分頁:mybatis-paginator
github上有一個專門針對mybatis的物理分頁開源項目:mybatis-paginator,兼容目前絕大多數主流資料庫,十分好用,下面是使用步驟:
環境:struts2 + spring + mybatis
一、pom.xml中添加依賴項
View Code

二、mybatis映射文件中按常規寫sql語句
View Code
如果使用mybatis-spring來整合mybatis,sqlSessionFactory參考下面修改(主要是載入分頁插件)
View Code

三、服務層基類
View Code

四、具體的服務層子類調用
View Code
服務層就處理完了,接下來看Action層

五、Action基類
View Code
註:約定分頁時,url類似 /xxx.action?pageIndex=N

六、具體的Action子類調用
View Code

七、前端頁面
View Code
解釋:jquery的分頁插件,網上一搜索一大堆,我用的是jquery.simplePagination,pageIndex、pageIndex、{pageSize}...包括list,這些屬性都是後台Action中的model屬性

後記:
github上還有另一款mybatis的分頁插件:Mybatis-PageHelper 也十分好用,使用說明參考:http://git.oschina.net/free/Mybatis_PageHelper/blob/master/wikis/HowToUse.markdown
使用示例:
View Code
mybatis-config.xml中的配置:
View Code

2. mybatis分頁查詢怎麼做

一、內存分頁,使用RowBounds類,但這種方式不推薦,基本不用,所以此方式集成省略。

二、自定義實現,代碼量比較少,簡單,比較靈活。以下為具體的集成步驟:

1、在User.xml中加入select節點,並組裝分頁SQ

3. MyBatis怎樣實現MySQL動態分頁

針對上述思路,首先在 demo.mybatis.model下面新建一個名為PagenateArgs的分頁參數實體類與一個名為SortDirectionEnum的枚舉 類,裡麵包含當前頁面索引pageIndex, 當前頁展示業務記錄數pageSize, pageStart屬性表示從第幾條開始,(pageStart=pageIndex*pageSize)因為limit關鍵詞用法是表示【limit 起始條數(不包含),取幾條】,orderFieldStr排序欄位,orderDirectionStr 排序方向,所以具體創建如下:
package david.mybatis.model;/* * 分頁參數實體類 */public class PagenateArgs { private int pageIndex; private int pageSize; private int pageStart; private String orderFieldStr; private String orderDirectionStr; public PagenateArgs() { // TODO Auto-generated constructor stub } public PagenateArgs(int pageIndex, int pageSize, String orderFieldStr, String orderDirectionStr) { this.pageIndex = pageIndex; this.pageSize = pageSize; this.orderFieldStr = orderFieldStr; this.orderDirectionStr = orderDirectionStr; pageStart = pageIndex * pageSize; } public int getPageIndex() { return pageIndex; } public int getPageStart() { return pageStart; } public int getPageSize() { return pageSize; } public String orderFieldStr() { return orderFieldStr; } public String getOrderDirectionStr() { return orderDirectionStr; }}

package david.mybatis.model;/* * 排序枚舉 */public enum SortDirectionEnum { /* * 升序 */ ASC, /* * 降序 */ DESC}
完成上面的步驟以後在IVisitorOperation介面類中繼續添加一個方法public List<Visitor> getListByPagenate(PagenateArgs args),這次的分頁其實也就是在這個的基礎上稍加改動即可,IVisitorOperation介面類 改動後如下所示:
package david.mybatis.demo;import java.util.List;import david.mybatis.model.PagenateArgs;import david.mybatis.model.Visitor;import david.mybatis.model.VisitorWithRn;public interface IVisitorOperation { /* * 基礎查詢 */ public Visitor basicQuery(int id); /* * 添加訪問者 */ public int add(Visitor visitor); /* * 刪除訪問者 */ public int delete(int id); /* * 更新訪問者 */ public int update(Visitor visitor); /* * 查詢訪問者 */ public Visitor query(int id); /* * 查詢List */ public List<Visitor> getList(); /* * 分頁查詢List */ public List<Visitor> getListByPagenate(PagenateArgs args); }
接下來改動VisitorMapper.xml配置文件了,新增一個<select>節點id與參數類型參照前幾章的方式配置好,如下此處新增的id就為getListByPagenate,配置好以後如下
<?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="david.mybatis.demo.IVisitorOperation"> <!-- useGeneratedKeys="true"代表是否使用自增長序列, keyProperty="Id"指定自增長列是哪一列, parameterType="Visitor"指定IVisitorOperation介面類中定義中所傳的相應類型 --> <insert id="add" parameterType="Visitor" useGeneratedKeys="true" keyProperty="Id"> insert into Visitor (Name, Email, Status, CreateTime) values (#{name}, #{email}, #{status}, #{createTime}) </insert> <delete id="delete" parameterType="int"> delete from Visitor where status>0 and id = #{id} </delete> <update id="update" parameterType="Visitor"> update Visitor set Name = #{name}, Email=#{email}, Status=#{status} where id=#{id} and Status>0; </update> <select id="query" parameterType="int" resultType="Visitor"> select Id, Name, Email, Status, CreateTime from visitor where id=#{id} and Status>0 order by Id </select> <select id="basicQuery" parameterType="int" resultType="Visitor"> select * from visitor where id=#{id} and Status>0 order by Id </select> <select id="getList" resultMap="visitorRs"> <include refid="getListSql" /> </select> <sql id="getListSql"> select * from Visitor where status>0 </sql> <!-- 以下為新增部分用來分頁,orderBySql這個提取出來是為了後面有示例復用 --> <resultMap type="Visitor" id="visitorRs"> <id column="Id" property="id" /> <result column="Name" property="name" /> <result column="Email" property="email" /> <result column="Status" property="status" /> <result column="CreateTime" property="createTime" /> </resultMap> <select id="getListByPagenate" parameterType="PagenateArgs" resultType="Visitor"> select * from ( <include refid="getListSql" /> <include refid="orderBySql"/> ) t <!-- #{}表示參數化輸出,${}表示直接輸出不進行任何轉義操作,自己進行轉移 --> <if test="pageStart>-1 and pageSize>-1"> limit #{pageStart}, #{pageSize} </if> </select> <sql id="orderBySql"> order by ${orderFieldStr} ${orderDirectionStr} </sql></mapper>
這裡面的欄位屬性都是針對PagenateArgs參數類中的屬性名,保持一致。
<if test="pageStart>-1 and pageSize>-1"> limit #{pageStart}, #{pageSize}</if>
在DemoRun類中創建測試方法:
/* * 分頁參數 */public static void queryVisitorListWithPagenate(int pageIndex, int pageSize, String orderField, String orderDire) { PagenateArgs args = new PagenateArgs(pageIndex, pageSize, orderField, orderDire); SqlSession session = MybatisUtils.getSqlSession(); IVisitorOperation vOperation = session.getMapper(IVisitorOperation.class); List<Visitor> visitors = vOperation.getListByPagenate(args); for (Visitor visitor : visitors) { System.out.println(visitor); } MybatisUtils.closeSession(session); MybatisUtils.showMessages(CRUD_Enum.List, visitors.size());}
DemoRun.queryVisitorListWithPagenate(0, 100, "id", SortDirectionEnum.DESC.toString());
運行後下測試結果,先按Id倒序排列,查的Visitor表一共有14條記錄,

假設取在第2頁取5條,執行下面也就是6-10條數據,這樣傳參數就行了
DemoRun.queryVisitorListWithPagenate(1, 5, "id", SortDirectionEnum.DESC.toString());

4. MyBatis 邏輯分頁和物理分頁的區別是什麼

邏輯分頁是先查出來,然後利用代碼去取需要的部分;物理分頁是利用sql自帶的limit去實現的,本身查詢出來的數據是就算分頁好的

5. mybatis怎樣實現分頁的

1、親Mybatis是自己寫Sql語句啊,和Hibernate不一樣。
2、如何知道上面的,你還要知道MySql有一個分頁語句叫limit,如:limit(1,10);前面一個參數是起始未知,後面一個是查詢多少個。
3、Oracle的分頁方法是嵌套子查詢,需要用到rownum這個屬性
Sql Server是Top。

分頁例子:
Oracle select * from (select emp.*,rownum rn from emp where rownum<9) where rn>3;
MySql select * from emp limit startIndex,maxNum

6. 用oracle在mybatis中分頁sql怎麼寫

(1)
select *
from (select a.*, rownum rnum
from (select id, data
from t order by id, rowid) a
)
where rnum >= 148 and rnum<=151;

或者

(2)
select *
from (select a.*, rownum rnum
from (select id, data
from t order by id, rowid) a
where rownum <= 151 )
where rnum >= 148;

最近在開發中同事說第(1)種效率不好,而第(2)種在只有唯一值(列)的時間才能正常排序,以前一直用第(1)種,今天同事找到如下的方式,解決了 第(2)種唯一值(列)排序的問題,如下:
(3)
select *
from (select a.*, rownum rnum
from (select id, data
from t order by id, rowid) a
where rownum <= 151 )
where rnum >= 148;

7. 使用Mybatis分頁查詢,資料庫數據隨時插入或更新,這時傳統分頁查詢可能就會查詢到重復數據,怎麼辦

通過主鍵id分頁,而不是直接limit分頁。

8. MyBatis分頁插件的實現原理是什麼

你好,很高興回答你的問題。
mybatis分頁插件是通過在你寫好的sql語句基礎上,拼接生成兩個sql語句實現的。
第一個是以你的sql作為子查詢進行count的語句,用來查詢符合條件是數據總條數。
另一個是在你的sql的基礎上拼接了limit進行分頁查詢。
如果有幫助到你,請點擊採納。
我解答的大部分是軟體開發新人遇到的問題,如果有興趣可以關注我。

熱點內容
為什麼打開的三菱程序不能編譯 發布:2025-05-11 12:16:40 瀏覽:20
ftp定價是怎麼回事 發布:2025-05-11 12:09:18 瀏覽:333
android敏捷開發 發布:2025-05-11 11:56:49 瀏覽:79
腳本pon 發布:2025-05-11 11:52:27 瀏覽:826
ct5推薦哪個配置 發布:2025-05-11 11:47:45 瀏覽:741
領購未上傳發票 發布:2025-05-11 11:43:27 瀏覽:716
查看華為雲伺服器的ip地址 發布:2025-05-11 11:24:44 瀏覽:235
長沙銀行密碼多少 發布:2025-05-11 11:24:38 瀏覽:671
緩存手機視頻合並軟體哪個好 發布:2025-05-11 11:22:30 瀏覽:698
伺服器c盤怎麼清除 發布:2025-05-11 11:16:33 瀏覽:39