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

织梦网站首页怎样做模板网站

织梦网站首页,怎样做模板网站,wordpress plugin 开发,西安排名seo公司专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置之Ⅱ—结果相关配置项说明 Mybatis行为配置之Ⅲ—其他行为配置项说明 Mybatis行为配置之Ⅳ—日志 Mybatis整合Spring详解 Mybatis插件入门 Mybatis专栏代码资源 文章目录 专栏精选引言摘要正文SQL耗时插件分页插件 总结 引言 大家好我是奇迹老李一个专注于分享开发经验和基础教程的博主。欢迎来到我的频道这里汇聚了汇集编程技巧、代码示例和技术教程欢迎广大朋友们点赞评论提出意见重要的是点击关注喔 期待在这里与你共同度过美好的时光️。今天要和大家分享的内容是Mybatis插件。做好准备Let’s go 摘要 在这篇文章中我们将简单介绍Mybatis的插件开发了解插件的基本使用方法我将以计算sql耗时、分页查询两个简单的插件为例带领大家领略Mybatis插件的魅力。准备好开启今天的神奇之旅了吗 正文 Mybatis中也提供了插件的功能虽然叫插件但是实际上是通过拦截器Interceptor实现的。在MyBatis的插件模块中涉及责任链模式和JDK动态代理 –《Mybatis技术内幕徐郡明 编著》 在mybatis项目中通过实现 org.apache.ibatis.plugin.Interceptor接口可以定义一个拦截器重写 intercept()方法来定义拦截器的具体操作。同时通过 org.apache.ibatis.plugin.Intercepts和 org.apache.ibatis.plugin.Signature注解定义需要被拦截的位置类和方法。常见的插件如分库分表、自动分页、数据脱敏、加密解密等等 下面以两个简单的例子说明拦截器的具体实现 SQL耗时插件 Intercepts({Signature(type StatementHandler.class, method query, args {Statement.class, ResultHandler.class}),Signature(type StatementHandler.class, method update, args {Statement.class}),Signature(type StatementHandler.class, method batch, args {Statement.class}) }) public class SqlCostTimeInterceptor implements Interceptor {private static Logger logger LoggerFactory.getLogger(SqlCostTimeInterceptor.class);Overridepublic Object intercept(Invocation invocation) throws Throwable {Object target invocation.getTarget();long startTime System.currentTimeMillis();StatementHandler statementHandler (StatementHandler) target;try {return invocation.proceed();} finally {long costTime System.currentTimeMillis() - startTime;BoundSql boundSql statementHandler.getBoundSql();String sql boundSql.getSql();logger.info(执行 SQL[ {} ]执行耗时[ {} ms], sql, costTime);}}Overridepublic Object plugin(Object target) {return Plugin.wrap(target, this);}Overridepublic void setProperties(Properties properties) {System.out.println(插件配置的信息properties);} }!-- MyBatis全局配置文件mybatis-config.xml -- pluginsplugin interceptorcom.xzg.cd.a88.SqlCostTimeInterceptorproperty namesomeProperty value100//plugin /plugins分页插件 mybatis分页的详细实现思路可参考 MyBatis分页插件PageHelper项目 实现思路如下 拦截 org.apache.ibatis.executor.Executor#query(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler)方法获取到rowBounds参数中的offset和limit获取到 MappedStatement参数中的sql语句并根据上一步中的分页参数重新构建分页sql使用上一步生成的分页sql语句构建新的MappedStatement替换原有 MappedStatement执行查询操作 代码如下 package top.sunyog.mybatis.plugins; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.BoundSql; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.SqlSource; import org.apache.ibatis.plugin.Interceptor; import org.apache.ibatis.plugin.Intercepts; import org.apache.ibatis.plugin.Invocation; import org.apache.ibatis.plugin.Signature; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; import java.util.Properties; Intercepts({Signature(type Executor.class, method query , args {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})}) public class PageHelperInterceptor implements Interceptor { private final int STATEMENT_ARG_INDEX 0; private final int PARAMETER_ARG_INDEX 1; private final int ROWBOUND_ARG_INDEX 2; Override public Object intercept(Invocation invocation) throws Throwable { Object[] args invocation.getArgs(); //获取待查sql MappedStatement ms (MappedStatement) args[STATEMENT_ARG_INDEX]; Object parameter args[PARAMETER_ARG_INDEX]; BoundSql sql ms.getBoundSql(parameter); String sqlStr sql.getSql().trim(); //获取分页内容 RowBounds rowBounds (RowBounds) args[ROWBOUND_ARG_INDEX]; int limit rowBounds.getLimit(); int offset rowBounds.getOffset(); //重新拼接sql StringBuffer buffer new StringBuffer(sqlStr.length() 100); buffer.append(select t.* from (); buffer.append(sqlStr); buffer.append() t limit ).append(offset).append(, ).append(limit); //创建新的statement Configuration config ms.getConfiguration(); BoundSql newBoundSql new BoundSql(config, buffer.toString(), sql.getParameterMappings(), parameter); SqlSource sqlSource o - newBoundSql; //按照原有ms生成新ms MappedStatement.Builder builder new MappedStatement.Builder(config, ms.getId(), sqlSource, ms.getSqlCommandType()); builder.resource(ms.getResource()) .fetchSize(ms.getFetchSize()) .statementType(ms.getStatementType()) .keyGenerator(ms.getKeyGenerator()) .timeout(ms.getTimeout()) .parameterMap(ms.getParameterMap()) .resultMaps(ms.getResultMaps()) .resultSetType(ms.getResultSetType()) .cache(ms.getCache()) .flushCacheRequired(ms.isFlushCacheRequired()) .useCache(ms.isUseCache()); //替换原来的ms args[STATEMENT_ARG_INDEX] builder.build(); //替换原来的rowBound RowBounds newRowBounds new RowBounds(RowBounds.NO_ROW_OFFSET, RowBounds.NO_ROW_LIMIT); args[ROWBOUND_ARG_INDEX] newRowBounds; return invocation.proceed(); } Override public Object plugin(Object target) { return Interceptor.super.plugin(target); } Override public void setProperties(Properties properties) { Interceptor.super.setProperties(properties); } }配置文件中添加插件配置注意mybatis配置文件中标签的顺序 ?xml version1.0 encodingUTF-8 ? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN https://mybatis.org/dtd/mybatis-3-config.dtd configuration properties resourcemysql-env.properties property nametest-key valuetest-value-c/ /properties settings.../settingstypeAliases.../typeAliases typeHandlers.../typeHandlersplugins plugin interceptortop.sunyog.mybatis.plugins.PageHelperInterceptor/ /pluginsenvironments.../environmentsmappers.../mappers /configuration测试代码如下 private void testListPage(){ SqlSession sqlSession MybatisAppContext.getSqlSessionFactory().openSession(); final String statementtop.sunyog.mybatis.mapper.LessonMapper.getDemos; //调用被拦截的方法sqlSession.select(statement, null, new RowBounds(0, 1), new ResultHandler() { Override public void handleResult(ResultContext resultContext) { Object obj resultContext.getResultObject(); System.out.println(obj); } }); sqlSession.close(); }查询打印结果如下数据库中有多条记录 TestDemo{demoId1, demoName测试名称, demoDesc测试备注}在mybatis插件中可以拦截的方法如下 Executor类中的update()、query()、flushStatements()、commit()、rollback()、getTransaction()、close()、isClosed()方法ParameterHandler类中的getParameterObject()、setParameters()方法ResultSetHandler类中的handleResultSets()、handleOu飞putParameters()方法StatementHandler类中的prepare()、parameterize()、batch()、update()、query()方法。 总结 Mybatis中的插件实际上就是一个拦截器Mybatis通过拦截器链来保证每个注册的插件功能都能顺利调用而且Mybatis通过Signature注解为我们提供了丰富的可拦截方法为编写功能丰富的Mybatis扩展创造了条件。当然想要编写优秀的Mybatis插件还需要对Mybatis的实现原理有更加深入的了解。 到本章为止关于Mybatis专栏的基础入门相关知识就介绍完了感谢大家的观看谢谢 联系方式 邮箱qijilaolifoxmail.com ❗版权声明 本文为原创文章版权归作者所有。未经许可禁止转载。更多内容请访问奇迹老李的博客首页
http://www.dnsts.com.cn/news/82319.html

相关文章:

  • 网站建设唐山网页设计培训包就业
  • 八里河风景区网站建设内容摘要苏州保洁公司招聘
  • 南充网站建设价格成都网站建设 小兵
  • 课程介绍网站建设ppt模板阿里网站年费怎么做分录
  • 广西城乡和建设厅网站首页淘客推广网站怎么做
  • 西安空调销售网站建设嘉定论坛网站建设
  • 自己做的网站设定背景图像内网建设网站
  • 郑州知名做网站公司有哪些购物网站每个模块主要功能
  • 中网可信网站权威数据库营销网站建设免费
  • 营销网站建设的原则个人链接怎么制作
  • 狼人最新网站百度推广客户端手机版
  • 青州网站建设推广h5网站有哪些
  • 国外视频模板网站e项目公司crm系统管理
  • 网站推广服务合同中国建筑集团有限公司电话
  • 网站建设公司业务培训苏州关键词网站排名
  • 网上做任务的网站有哪些内容asp提高网站安全性的措施
  • 网站建设 毕业设计大兴网站建设服务公司
  • 网站默认首页怎么设置如何网站做淘客
  • 商城网站建设腾讯体育网站推广seo系统
  • 网站建设管理维护制度郑州短视频代运营公司
  • 网站架构的建设跨境电商展会2023
  • 怎么兼职做网站wordpress 百度统计插件
  • 外贸企业论坛网站建设义乌公司做网站
  • 网站地图html农林牧渔行业网站建设
  • 做网站可以不用框架吗室内设计资料网站
  • 建设银行河北分行招聘网站wordpress 去掉头部栏目
  • php网站开发实例视频钱网站制作
  • 大港做网站天元建设集团有限公司申请破产了吗
  • iis网站视频无法播放国家职业资格证书网站
  • 做电影售票网站的难点做网站 天津