当前位置: 首页 > news >正文

淘金企业网站建设服务做门图网站

淘金企业网站建设服务,做门图网站,咸阳 网站建设,北京展示型网站建设价格Mybatis 分页查询 1. 直接在 sql 中使用 limit2. 使用 RowBounds3. 使用 Mybatis 提供的拦截器机制3.1 创建一个自定义拦截器类实现 Interceptor3.2 创建分页查询函数 与 sql3.3 编写拦截逻辑3.4 注册 PageInterceptor 到 Mybatis 拦截器链中3.5 测试 准备一个分页查询类 Data… Mybatis 分页查询 1. 直接在 sql 中使用 limit2. 使用 RowBounds3. 使用 Mybatis 提供的拦截器机制3.1 创建一个自定义拦截器类实现 Interceptor3.2 创建分页查询函数 与 sql3.3 编写拦截逻辑3.4 注册 PageInterceptor 到 Mybatis 拦截器链中3.5 测试 准备一个分页查询类 Data public class Page {// 开始下标 由当前页和每页大小计数而来// 这里也可以是当前页在sql中进行开始下标的计算private int size;private int currentPage; }1. 直接在 sql 中使用 limit 创建一个分页查询函数 ListUser selectUserPage(Param(page)Page page, Param(name) String name);编写sql语句 select idselectUserPage resultTypecom.hzy.demo.pojos.Userselect *from user2whereif testname ! null and name ! name like %${name}%/if/whereif testpage ! nulllimit #{page.start},#{page.size}/if/select测试 Testvoid test08() {int currentPage 1; // 当前页int size 2; // 每页大小Page page new Page();page.setSize(size);page.setStart((currentPage-1)*size);// 第一页 不匹配姓名ListUser users userMapper.selectUserPage(page, null);for (User user : users){System.out.println(user);}// 第一页 匹配姓名page.setStart((currentPage-1)*size);users userMapper.selectUserPage(page, s);for (User user : users){System.out.println(user);}// 第三页 不匹配姓名currentPage 3;page.setStart((currentPage-1)*size);users userMapper.selectUserPage(page, null);for (User user : users){System.out.println(user);}}2. 使用 RowBounds RowBounds 是 MyBatis 中用于分页查询的一种简单实现方式它并不涉及数据库分页查询而是在查询结果返回后进行截取。 RowBounds 的构造函数需要传入两个参数 offset偏移量相当于前面的 start limit限制数量相当于前面的 size RowBounds 的实现原理比较简单它适用于一些简单的分页需求但在处理大量数据时可能会导致性能问题因为所有的数据都会被查询出来然后在内存中进行截取。对于更复杂的分页需求可以考虑使用 MyBatis 提供的分页插件或其他更高级的分页方案。 创建查询函数 ListUser selectUserPage(RowBounds rowBounds, Param(name) String name);编写 sql select idselectUserPage resultTypecom.hzy.demo.pojos.Userselect *from user2whereif testname ! null and name ! name like %${name}%/if/where/select测试 Testvoid test09() {int currentPage 1;int size 2;RowBounds rowBounds new RowBounds((currentPage - 1) * size, size);ListUser users userMapper.selectUserPage(rowBounds, null);for (User user : users) {System.out.println(user);}users userMapper.selectUserPage(rowBounds, s);for (User user : users) {System.out.println(user);}}3. 使用 Mybatis 提供的拦截器机制 MyBatis提供了拦截器Interceptor的机制允许用户在执行SQL语句的过程中进行拦截和干预。拦截器是在执行SQL语句前、后或者代替执行SQL语句的过程中插入自定义的逻辑从而可以实现一些额外的功能。 一些常见的分页插件比如 PageHelper 也是基于拦截器实现的这里我们自定义一个拦截器实现分页查询。 3.1 创建一个自定义拦截器类实现 Interceptor public class PageInterceptor implements Interceptor {// 该方法会在真正的SQL语句执行前后被调用可以在这里编写拦截逻辑。Overridepublic Object intercept(Invocation invocation) throws Throwable {return null;}// 用于包装目标对象返回一个代理对象该代理对象会拦截目标对象的方法调用。Overridepublic Object plugin(Object target) {return Interceptor.super.plugin(target);}// 用于设置拦截器的属性这些属性可以在配置拦截器时传递。Overridepublic void setProperties(Properties properties) {Interceptor.super.setProperties(properties);} }注意要引入 Mybatis 提供的 Interceptor 3.2 创建分页查询函数 与 sql 查询函数 ListUser selectUserPage(Param(page) Page page, Param(name) String name);sql select idselectUserPage resultTypecom.hzy.demo.pojos.Userselect *from user2whereif testname ! null and name ! name like %${name}%/if/where/select3.3 编写拦截逻辑 public Object intercept(Invocation invocation) throws Throwable {}Invocation 接口是 MyBatis 中拦截器机制中的一个核心接口用于描述拦截的方法调用。Invocation 接口定义了以下方法 Object getTarget() 获取被拦截的目标对象。在 MyBatis 中通常是获取到某个 StatementHandler、Executor、ParameterHandler 或 ResultSetHandler 等对象。 Method getMethod() 获取被拦截的目标方法。 Object[] getArgs() 获取被拦截方法的参数。 Object proceed() 调用被拦截方法相当于执行原始的方法调用。拦截器可以选择是否调用该方法如果调用会继续执行原始的方法如果不调用可以在拦截器中实现自己的逻辑。 使用 getTarget() 获取目标对象 StatementHandler statementHandler (StatementHandler) invocation.getTarget();StatementHandler 是 MyBatis 中负责处理 SQL 语句的核心接口它定义了对数据库的操作方法。在 MyBatis 的执行过程中StatementHandler 负责创建 PreparedStatement 对象、设置参数、执行 SQL 语句等操作。 可以看到 StatementHandler 对象 里面的 boundSql 对象包含了 sql语句 与 方法参数利用这个就可以实现分页查询。 拦截逻辑 // Intercepts 注解配置表明该拦截器会拦截 StatementHandler 接口的 prepare 方法 Intercepts({Signature(type StatementHandler.class, method prepare, args { Connection.class, Integer.class }) }) public class PageInterceptor implements Interceptor {Overridepublic Object intercept(Invocation invocation) throws Throwable {StatementHandler statementHandler (StatementHandler) invocation.getTarget();BoundSql boundSql statementHandler.getBoundSql();Map parameterObject (Map)boundSql.getParameterObject();Page page (Page) parameterObject.getOrDefault(page,null);if (page ! null){// 获取原始 SQL 语句String originalSql boundSql.getSql();// 修改 SQL 语句StringBuilder sb new StringBuilder();sb.append(originalSql).append( limit ).append(page.getStart()).append(,).append(page.getSize());// 将修改后的 SQL 设置回 BoundSqlMetaObject metaObject SystemMetaObject.forObject(boundSql);metaObject.setValue(sql,sb.toString());}// 继续执行 SQL 语句return invocation.proceed();}Overridepublic Object plugin(Object target) {return Interceptor.super.plugin(target);}Overridepublic void setProperties(Properties properties) {Interceptor.super.setProperties(properties);} } 3.4 注册 PageInterceptor 到 Mybatis 拦截器链中 Configuration public class MyBatisConfig {Beanpublic SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {SqlSessionFactoryBean sessionFactory new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);// 添加自定义拦截器Interceptor[] interceptors new Interceptor[]{new PageInterceptor()};sessionFactory.setPlugins(interceptors);return sessionFactory.getObject();} }3.5 测试 Testvoid test10() {int currentPage 1;int size 4;Page page new Page();page.setSize(size);page.setStart((currentPage-1)*size);ListUser users userMapper.selectUserPage(page, null);for (User user : users){System.out.println(user);} }
http://www.zqtcl.cn/news/810210/

相关文章:

  • 用织梦做的网站是模板的吗外贸展示型模板网站
  • 网站seo的关键词排名怎么做的定制和订制
  • 自适应网站做多大尺寸的四川建设厅电话网站
  • 易语言可以做网站了吗电商平台排名100强
  • 网站代码开发方式影视公司网页设计
  • 如何选择网站定制公司响水专业做网站
  • 海门建网站公司凡客模板wordpress
  • 网站关键字排名php开源cms
  • 手机商城手机网站建设多少钱明水县网站建设
  • 北京网站优化外包做板材外贸一般用哪个网站
  • 北京建设网站有哪些公司药店网站模板
  • 网站欢迎页面怎么做个人简历免费模板下载
  • 宁波外贸网站建设竣工验收报告查询网
  • 内衣网站建设详细方案如何制作企业网站的版式
  • 网站建设是否需要源代码php如何制作网站
  • 自响应式网站是什么意思现货交易平台合法的有几家
  • 网站如何做视频链接地址一个虚拟主机空间挂两个网站
  • seo外贸网站建设常州本地网站
  • 可以做机械设计接单的网站pc网站怎么做自适应
  • 网站建设义乌电子商务做网站实训体会
  • 哪些网站做国际贸易比较好徐州泉山建设局网站
  • 平果县免费网站哪家好新媒体营销
  • 网站制作的页面比例企业为什么建立企业网站
  • 网站开发技术的发展专业的seo网站优化公司
  • 十大ppt模板免费下载网站惠州网络营销
  • 网站建设自优化网站首页
  • 网络营销推广方式包括哪几种湘潭网站seo磐石网络
  • 英文WordPress站点切换为中文优化神马网站关键词排名价格
  • 宁波网站建设免费咨询网站建设服务费怎么做会计分录
  • 工作期间员工花钱做的网站wordpress文章内容乱码