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

延安网站制作怎么把wordpress后台设置成中文

延安网站制作,怎么把wordpress后台设置成中文,免费站推广网站在线,佛山教育平台网站建设MyBatis的自定义插件 前置知识 MyBatis 可以拦截的四大组件 Executor - 执行器StatementHandler - SQL 语句构造器ParameterHandler - 参数处理器ResultSetHandler - 结果集处理器 自定义 MyBatis 插件 /*** 打印 sql 执行的时间插件*/ Intercepts(// 指定拦截器拦截的对象…MyBatis的自定义插件 前置知识 MyBatis 可以拦截的四大组件 Executor - 执行器StatementHandler - SQL 语句构造器ParameterHandler - 参数处理器ResultSetHandler - 结果集处理器 自定义 MyBatis 插件 /*** 打印 sql 执行的时间插件*/ Intercepts(// 指定拦截器拦截的对象、方法和参数类型{Signature(type StatementHandler.class, method update, args {Statement.class}),Signature(type StatementHandler.class, method query, args {Statement.class, ResultHandler.class}),Signature(type StatementHandler.class, method batch, args {Statement.class})} ) // 注册到 Spring 容器不是 Spring 环境的话可以用 mybatis 的 config 配置进去 Component public class SqlExecuteTimePrintMybatisPlugin implements Interceptor {protected Logger logger LoggerFactory.getLogger(SqlExecuteTimePrintMybatisPlugin.class);Overridepublic Object intercept(Invocation invocation) throws Throwable {// 获取代理对象StatementHandler statementHandler (StatementHandler) invocation.getTarget();// 获取执行 sqlBoundSql boundSql statementHandler.getBoundSql();// 此处简单处理一下只打印参数替换前的 sql目的是演示自定义插件String sql boundSql.getSql();long start System.currentTimeMillis();try {return invocation.proceed();} finally {logger.info(sql - {}, takes time - {}, sql, System.currentTimeMillis() - start);}} }效果如下 2023-10-14 17:18:39.297 INFO 25972 --- [p-nio-80-exec-1] c.y.m.c.SqlExecuteTimePrintMybatisPlugin : sql - SELECT * FROM INFO WHERE id ? , takes time - 57 2023-10-14 17:18:39.324 INFO 25972 --- [p-nio-80-exec-1] c.y.m.c.SqlExecuteTimePrintMybatisPlugin : sql - SELECT id, info_id, extend_info FROM INFO_DETAIL WHERE info_id ?, takes time - 4源码解析 创建四大对象的代码如下 public class Configuration {public ParameterHandler newParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql) {ParameterHandler parameterHandler mappedStatement.getLang().createParameterHandler(mappedStatement, parameterObject, boundSql);// 此处增加拦截器责任链parameterHandler (ParameterHandler) interceptorChain.pluginAll(parameterHandler);return parameterHandler;}public ResultSetHandler newResultSetHandler(Executor executor, MappedStatement mappedStatement, RowBounds rowBounds, ParameterHandler parameterHandler,ResultHandler resultHandler, BoundSql boundSql) {ResultSetHandler resultSetHandler new DefaultResultSetHandler(executor, mappedStatement, parameterHandler, resultHandler, boundSql, rowBounds);// 此处增加拦截器责任链resultSetHandler (ResultSetHandler) interceptorChain.pluginAll(resultSetHandler);return resultSetHandler;}public StatementHandler newStatementHandler(Executor executor, MappedStatement mappedStatement, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {StatementHandler statementHandler new RoutingStatementHandler(executor, mappedStatement, parameterObject, rowBounds, resultHandler, boundSql);// 此处增加拦截器责任链statementHandler (StatementHandler) interceptorChain.pluginAll(statementHandler);return statementHandler;}public Executor newExecutor(Transaction transaction) {return newExecutor(transaction, defaultExecutorType);}public Executor newExecutor(Transaction transaction, ExecutorType executorType) {executorType executorType null ? defaultExecutorType : executorType;executorType executorType null ? ExecutorType.SIMPLE : executorType;Executor executor;if (ExecutorType.BATCH executorType) {executor new BatchExecutor(this, transaction);} else if (ExecutorType.REUSE executorType) {executor new ReuseExecutor(this, transaction);} else {executor new SimpleExecutor(this, transaction);}if (cacheEnabled) {executor new CachingExecutor(executor);}// 此处增加拦截器责任链executor (Executor) interceptorChain.pluginAll(executor);return executor;} }首先在创建 Executor、StatementHandler、ParameterHandler、ResultSetHandler 四个对象时将插件plugins注入 调用 InterceptorChain.pluginAll() 方法将插件增加到责任链并返回代理后的 target 包装对象InterceptorChain 保存了所有的拦截器Interceptors 最终在执行的时候调用的其实是 JDK 动态代理的对象执行 MyBatis 中 InvocationHandler 的实现 org.apache.ibatis.plugin.Plugin 的 invoke 方法 public class InterceptorChain {private final ListInterceptor interceptors new ArrayList();public Object pluginAll(Object target) {for (Interceptor interceptor : interceptors) {target interceptor.plugin(target);}return target;} }public interface Interceptor {// 拦截器增强方法Object intercept(Invocation invocation) throws Throwable;// 包装原来的对象default Object plugin(Object target) {return Plugin.wrap(target, this);}default void setProperties(Properties properties) {// NOP}}public class Plugin implements InvocationHandler {private final Object target;private final Interceptor interceptor;private final MapClass?, SetMethod signatureMap;private Plugin(Object target, Interceptor interceptor, MapClass?, SetMethod signatureMap) {this.target target;this.interceptor interceptor;this.signatureMap signatureMap;}public static Object wrap(Object target, Interceptor interceptor) {MapClass?, SetMethod signatureMap getSignatureMap(interceptor);Class? type target.getClass();Class?[] interfaces getAllInterfaces(type, signatureMap);if (interfaces.length 0) {// jdk 动态代理return Proxy.newProxyInstance(type.getClassLoader(),interfaces,new Plugin(target, interceptor, signatureMap));}return target;}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {try {// 获取插件中生命要增强的方法SetMethod methods signatureMap.get(method.getDeclaringClass());// 如果命中该方法就使用执行插件中增强的方法if (methods ! null methods.contains(method)) {return interceptor.intercept(new Invocation(target, method, args));}// 没有命中就不对方法进行增强return method.invoke(target, args);} catch (Exception e) {throw ExceptionUtil.unwrapThrowable(e);}}... }备注 不明白的需要去看下 JDK 动态代理实现原理概括的来讲就是 Proxy#newProxyInstance 时通过字节码增强的方法生成一个实现了跟被代理类相同接口并继承了 java.lang.reflect.Proxy 的类并返回其实例调用这个代理类的方法时实际上调用的是 Proxy.InvocationHandler.invoke(this, method, new Object[]{args}) 方法
http://wiki.neutronadmin.com/news/277762/

相关文章:

  • 郑州网站建设口碑好高新建设网站电话
  • 深圳最好的营销网站建设公司排名上海企业网络营销推广服务
  • 网站 类库二维码生成器微信小程序
  • 制作网站域名需要多少钱在线logo设计免费
  • 岳池县网站建设什么是规划网站
  • 上海网站建设专业公司宁波网络营销公司
  • 百度地图放到网站上网站目标定位概念
  • zencart网站模板下载网站开发四点注意事项
  • 关于网站建设的申请书网站排名方法
  • 遵义市住房和城乡建设局网站整合营销的概念
  • 南昌做网站和微信小程序的公司网站模板 小说
  • 国外ip 网站 百度收录软件商城免费下载安装
  • 医院网站建设技术方案国外看新闻app推荐
  • 网站开发代码说明书绍兴网站建站模板
  • 做网站比较好做网站赚钱吗
  • 学校教务网站的设计与实现大学培训中心网站建设
  • 什么网站排名做的最好建设工程项目管理信息门户网站
  • 电子商务网站建设规划的内容西安官网seo技巧
  • 沈阳市建设局网站广州网站设计公司推荐哪家
  • 公司网站的建站要点dw网站的站点建设
  • 酒仙桥网站建设wordpress 图片加载很慢
  • 品牌网站建站贵州建设厅网站备案人员查询
  • 网站是怎么做的上海建站优化
  • 衡水专业做网站环球军事网
  • 网站建设课程心得免费封面设计在线生成软件
  • 苏州网站设计都选苏州聚尚网络用自己的话回答网络营销是什么
  • 搭建网站的软件做一个普通网站多少钱
  • 做百度网站如何收费wordpress 分类过滤
  • 怎样做企业网站建筑人才网官方网站查询
  • 百度怎么做自己的网站手机版网站做一下多少钱