日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis四种分页方式

發(fā)布時(shí)間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis四种分页方式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.數(shù)組分頁(yè)

查詢出全部數(shù)據(jù),然后再list中截取需要的部分。

mybatis接口

List<Student> queryStudentsByArray();

xml配置文件

<select id="queryStudentsByArray" resultMap="studentmapper">select * from student</select>

service

接口 List<Student> queryStudentsByArray(int currPage, int pageSize); 實(shí)現(xiàn)接口@Overridepublic List<Student> queryStudentsByArray(int currPage, int pageSize) {//查詢?nèi)繑?shù)據(jù)List<Student> students = studentMapper.queryStudentsByArray();//從第幾條數(shù)據(jù)開始int firstIndex = (currPage - 1) * pageSize;//到第幾條數(shù)據(jù)結(jié)束int lastIndex = currPage * pageSize;return students.subList(firstIndex, lastIndex); //直接在list中截取}

controller

@ResponseBody@RequestMapping("/student/array/{currPage}/{pageSize}")public List<Student> getStudentByArray(@PathVariable("currPage") int currPage, @PathVariable("pageSize") int pageSize) {List<Student> student = StuServiceIml.queryStudentsByArray(currPage, pageSize);return student;}

2.sql分頁(yè)

mybatis接口

List<Student> queryStudentsBySql(Map<String,Object> data);

xml文件

<select id="queryStudentsBySql" parameterType="map" resultMap="studentmapper">select * from student limit #{currIndex} , #{pageSize} </select>

service

接口 List<Student> queryStudentsBySql(int currPage, int pageSize); 實(shí)現(xiàn)類 public List<Student> queryStudentsBySql(int currPage, int pageSize) {Map<String, Object> data = new HashedMap();data.put("currIndex", (currPage-1)*pageSize);data.put("pageSize", pageSize);return studentMapper.queryStudentsBySql(data);}

3.攔截器分頁(yè)

創(chuàng)建攔截器,攔截mybatis接口方法id以ByPage結(jié)束的語句

package com.autumn.interceptor; ? import org.apache.ibatis.executor.Executor; import org.apache.ibatis.executor.parameter.ParameterHandler; import org.apache.ibatis.executor.resultset.ResultSetHandler; import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.plugin.*; import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.reflection.SystemMetaObject; ? import java.sql.Connection; import java.util.Map; import java.util.Properties; ? /*** @Intercepts 說明是一個(gè)攔截器* @Signature 攔截器的簽名* type 攔截的類型 四大對(duì)象之一( Executor,ResultSetHandler,ParameterHandler,StatementHandler)* method 攔截的方法* args 參數(shù),高版本需要加個(gè)Integer.class參數(shù),不然會(huì)報(bào)錯(cuò)*/ @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class})}) public class MyPageInterceptor implements Interceptor { ?//每頁(yè)顯示的條目數(shù)private int pageSize;//當(dāng)前現(xiàn)實(shí)的頁(yè)數(shù)private int currPage;//數(shù)據(jù)庫(kù)類型private String dbType; ? ?@Overridepublic Object intercept(Invocation invocation) throws Throwable {//獲取StatementHandler,默認(rèn)是RoutingStatementHandlerStatementHandler statementHandler = (StatementHandler) invocation.getTarget();//獲取statementHandler包裝類MetaObject MetaObjectHandler = SystemMetaObject.forObject(statementHandler); ?//分離代理對(duì)象鏈while (MetaObjectHandler.hasGetter("h")) {Object obj = MetaObjectHandler.getValue("h");MetaObjectHandler = SystemMetaObject.forObject(obj);} ?while (MetaObjectHandler.hasGetter("target")) {Object obj = MetaObjectHandler.getValue("target");MetaObjectHandler = SystemMetaObject.forObject(obj);} ?//獲取連接對(duì)象//Connection connection = (Connection) invocation.getArgs()[0]; ? ?//object.getValue("delegate"); 獲取StatementHandler的實(shí)現(xiàn)類 ?//獲取查詢接口映射的相關(guān)信息MappedStatement mappedStatement = (MappedStatement) MetaObjectHandler.getValue("delegate.mappedStatement");String mapId = mappedStatement.getId(); ?//statementHandler.getBoundSql().getParameterObject(); ?//攔截以.ByPage結(jié)尾的請(qǐng)求,分頁(yè)功能的統(tǒng)一實(shí)現(xiàn)if (mapId.matches(".+ByPage$")) {//獲取進(jìn)行數(shù)據(jù)庫(kù)操作時(shí)管理參數(shù)的handlerParameterHandler parameterHandler = (ParameterHandler) MetaObjectHandler.getValue("delegate.parameterHandler");//獲取請(qǐng)求時(shí)的參數(shù)Map<String, Object> paraObject = (Map<String, Object>) parameterHandler.getParameterObject();//也可以這樣獲取//paraObject = (Map<String, Object>) statementHandler.getBoundSql().getParameterObject(); ?//參數(shù)名稱和在service中設(shè)置到map中的名稱一致currPage = (int) paraObject.get("currPage");pageSize = (int) paraObject.get("pageSize"); ?String sql = (String) MetaObjectHandler.getValue("delegate.boundSql.sql");//也可以通過statementHandler直接獲取//sql = statementHandler.getBoundSql().getSql(); ?//構(gòu)建分頁(yè)功能的sql語句String limitSql;sql = sql.trim();limitSql = sql + " limit " + (currPage - 1) * pageSize + "," + pageSize; ?//將構(gòu)建完成的分頁(yè)sql語句賦值個(gè)體'delegate.boundSql.sql',偷天換日MetaObjectHandler.setValue("delegate.boundSql.sql", limitSql);}//調(diào)用原對(duì)象的方法,進(jìn)入責(zé)任鏈的下一級(jí)return invocation.proceed();} ? ?//獲取代理對(duì)象@Overridepublic Object plugin(Object o) {//生成object對(duì)象的動(dòng)態(tài)代理對(duì)象return Plugin.wrap(o, this);} ?//設(shè)置代理對(duì)象的參數(shù)@Overridepublic void setProperties(Properties properties) {//如果項(xiàng)目中分頁(yè)的pageSize是統(tǒng)一的,也可以在這里統(tǒng)一配置和獲取,這樣就不用每次請(qǐng)求都傳遞pageSize參數(shù)了。參數(shù)是在配置攔截器時(shí)配置的。String limit1 = properties.getProperty("limit", "10");this.pageSize = Integer.valueOf(limit1);this.dbType = properties.getProperty("dbType", "mysql");} }

配置文件SqlMapConfig.xml

<configuration><plugins><plugin interceptor="com.autumn.interceptor.MyPageInterceptor"><property name="limit" value="10"/><property name="dbType" value="mysql"/></plugin></plugins></configuration>

mybatis配置

<!--接口--> List<AccountExt> getAllBookByPage(@Param("currPage")Integer pageNo,@Param("pageSize")Integer pageSize); <!--xml配置文件--><sql id="getAllBooksql" >acc.id, acc.cateCode, cate_name, user_id,u.name as user_name, money, remark, time</sql><select id="getAllBook" resultType="com.autumn.pojo.AccountExt" >select<include refid="getAllBooksql" />from account as acc</select>

service

public List<AccountExt> getAllBookByPage(String pageNo,String pageSize) {return accountMapper.getAllBookByPage(Integer.parseInt(pageNo),Integer.parseInt(pageSize));}

controller

@RequestMapping("/getAllBook")@ResponseBodypublic Page getAllBook(String pageNo,String pageSize,HttpServletRequest request,HttpServletResponse response){pageNo=pageNo==null?"1":pageNo; //當(dāng)前頁(yè)碼pageSize=pageSize==null?"5":pageSize; //頁(yè)面大小//獲取當(dāng)前頁(yè)數(shù)據(jù)List<AccountExt> list = bookService.getAllBookByPage(pageNo,pageSize);//獲取總數(shù)據(jù)大小int totals = bookService.getAllBook();//封裝返回結(jié)果Page page = new Page();page.setTotal(totals+"");page.setRows(list);return page;}

Page實(shí)體類

package com.autumn.pojo;import java.util.List;/*** Created by Autumn on 2018/6/21.*/ public class Page {private String pageNo = null;private String pageSize = null;private String total = null;private List rows = null;public String getTotal() {return total;}public void setTotal(String total) {this.total = total;}public List getRows() {return rows;}public void setRows(List rows) {this.rows = rows;}public String getPageNo() {return pageNo;}public void setPageNo(String pageNo) {this.pageNo = pageNo;}public String getPageSize() {return pageSize;}public void setPageSize(String pageSize) {this.pageSize = pageSize;}}

4.RowBounds分頁(yè)

數(shù)據(jù)量小時(shí),RowBounds不失為一種好辦法。但是數(shù)據(jù)量大時(shí),實(shí)現(xiàn)攔截器就很有必要了。

mybatis接口加入RowBounds參數(shù)

public List<UserBean> queryUsersByPage(String userName, RowBounds rowBounds);

service

@Override@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.SUPPORTS)public List<RoleBean> queryRolesByPage(String roleName, int start, int limit) {return roleDao.queryRolesByPage(roleName, new RowBounds(start, limit));}

總結(jié)

以上是生活随笔為你收集整理的Mybatis四种分页方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久视频这里只有精品 | 午夜精品福利影院 | 影院色原网站 | 日本网站免费 | 日韩69| 在线观看特色大片免费网站 | 久久久久久av无码免费网站下载 | 高清国产视频 | hitomi一区二区三区精品 | 韩国女主播裸体摇奶 | 五月天激情四射 | www五月婷婷 | 欧美中文字幕 | 日本va视频| 色999日韩 | 欧美国产一区二区三区 | 国产又粗又大又硬 | 影音先锋人妻啪啪av资源网站 | 超碰在线| 欧美丰满熟妇xxxxx | 在线播放黄色av | 日韩电影在线观看中文字幕 | 久久三| 欧美成人视 | 最新国产网址 | 久草综合在线观看 | 午夜视频福利在线 | 超碰95在线 | 91亚洲精品久久久蜜桃网站 | 成人视屏在线观看 | 日韩一本在线 | 91欧美激情一区二区三区 | 青青草原av在线 | 欧美日韩五月天 | 午夜激情网 | 久久久久久亚洲av毛片大全 | 99热欧美 | 日本午夜影视 | 青青超碰 | 狠狠干在线观看 | 在线免费观看亚洲 | 少妇无码一区二区三区免费 | 在线看黄色网 | 国产一级在线免费观看 | 国产aa视频 | 国产男男gay | 8x8x国产精品一区二区 | 亚洲黄色在线观看视频 | 日本japanese丰满白浆 | 中文字幕 自拍 | 18视频在线观看网站 | 超碰caoprom | 在线视频午夜 | 午夜理伦三级理论 | 四虎影院在线视频 | 国产日韩欧美成人 | 亚洲欧美激情另类校园 | 国内精品福利视频 | 欧美性在线视频 | xxxxxx国产| 快色污| av美女在线 | 福利社91 | 黄色不雅视频 | 狠狠干男人的天堂 | 香蕉视频黄在线观看 | 国产精品偷伦视频免费看 | 色播视频在线播放 | 网站久久 | 神马午夜91| 亚洲精品乱码久久久久久蜜桃不卡 | 精品蜜桃一区二区三区 | 蜜桃精品一区二区 | 午夜簧片 | 久久久久久久久久一区二区 | 性按摩玩人妻hd中文字幕 | 巨胸大乳www视频免费观看 | 中文字幕乱码av | 精品亚洲乱码一区二区 | 好姑娘在线观看高清完整版电影 | 亚洲欧美日韩精品久久 | 久久免费在线观看视频 | 午夜在线视频免费观看 | 99热3 | 国产精品美女久久久免费 | 女同vk | 日韩在线一区视频 | 欧洲色综合 | a√国产| 精品久久久久久中文字幕人妻最新 | 国产精品96 | www.xxx.国产| 久久久久在线观看 | 免费一级特黄毛大片 | 免费看h网站 | 伊人久久香 | 一级a性色生活片久久毛片 爱爱高潮视频 | aaaaaaa毛片| 美女光屁股视频 |