当前位置:首页 » 编程语言 » 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进行分页查询。
如果有帮助到你,请点击采纳。
我解答的大部分是软件开发新人遇到的问题,如果有兴趣可以关注我。

热点内容
ins海外服务器ip填什么 发布:2025-05-12 06:16:50 浏览:49
歪歪脚本 发布:2025-05-12 06:07:37 浏览:671
linux多ip 发布:2025-05-12 05:58:31 浏览:90
手机无线路由器怎么设置密码 发布:2025-05-12 05:18:28 浏览:816
渝人解压密码 发布:2025-05-12 05:18:12 浏览:769
备份网站数据库备份 发布:2025-05-12 05:04:35 浏览:53
转移的存储卡 发布:2025-05-12 04:51:18 浏览:467
c语言大数相加 发布:2025-05-12 04:51:13 浏览:589
安卓内存大小有什么影响 发布:2025-05-12 04:41:36 浏览:51
以下c语言常量错误的是 发布:2025-05-12 04:40:39 浏览:808