当前位置: 首页 > 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.hkea.cn/news/14535944/

相关文章:

  • 成都网站推广公司小羚羊网站怎么建设
  • 中山蓝图科技网站建设芜湖做网站建设公司
  • 网站建设 招聘粤健康app下载
  • 长春企业网站设计贵州百度竞价网页设计
  • asp网站图片万网做网站给网站源码
  • 公司付网站会员费科目怎么做私募基金网站建设要求
  • 银川网站建设效果最新做做网站
  • 外贸网站建设 佛山做片头 网站
  • 网站怎么做外链接地址自己制作游戏的软件
  • jsp网站开发工资域名访问网站下
  • 在哪可以建一个网站网站建设感悟
  • 个人备案网站可以做商城展示开发公司网站
  • 电子商务网站建设与管理笔试设计公司介绍模板
  • 湘icp备 网站建设 农业 湖南wordpress邮箱验证失败
  • 为什么百度没有收录我的网站完全免费建站系统
  • 网站模板设计德语网站域名
  • 重庆点优建设网站公司南通网站建设推广
  • 电子商务网站设计与建设外贸公司推广方案
  • 聊天室网站开发如何做电商新手入门
  • wordpress添加文章封面贵阳网站搜索优化
  • 爱站网能不能挖掘关键词wordpress 五分钟
  • 谷歌官方网站首页长沙从寒网络科技有限公司
  • 泰安招聘信息最新招聘2023沈阳网站优化
  • 电商购物网站开发打游戏一天赚200元
  • 网站建设需求怎么提网站建设地图素材
  • asp.net mvc 做网站红酒营销 网站建设
  • 做360网站快速排名软件制作公司网页价钱
  • 连云港建设网站公司网站建设服务费的税收分类
  • 青岛 制作网站 大点的公司东莞专业网站建设服务
  • 北京海岸设计公司网站运输公司网站模板