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

网站开发一般采用什么框架男女做暖暖的试看网站

网站开发一般采用什么框架,男女做暖暖的试看网站,网页制作教程赵丰年,百度高级搜索页面的网址MyBatis 插件开发的完整详细例子 MyBatis 插件(Interceptor)允许开发者在已映射语句执行过程中的某一点进行拦截调用,从而实现自定义逻辑。以下是一个完整的 MyBatis 插件开发示例,涵盖所有使用场景,并附有详细注释和总…

MyBatis 插件开发的完整详细例子

在这里插入图片描述

MyBatis 插件(Interceptor)允许开发者在已映射语句执行过程中的某一点进行拦截调用,从而实现自定义逻辑。以下是一个完整的 MyBatis 插件开发示例,涵盖所有使用场景,并附有详细注释和总结。


1. MyBatis 插件基础

MyBatis 允许拦截以下接口的方法:

  • Executorupdate, query, flushStatements, commit, rollback, getTransaction, close, isClosed
  • ParameterHandlergetParameterObject, setParameters
  • ResultSetHandlerhandleResultSets, handleCursorResultSets, handleOutputParameters
  • StatementHandlerprepare, parameterize, batch, update, query

2. 插件开发示例

2.1. 自定义插件类

创建一个自定义插件类 MyPlugin,该插件将拦截 Executorquery 方法和 StatementHandlerprepare 方法。

import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.*;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.statement.StatementHandler;import java.sql.Connection;
import java.sql.Statement;
import java.util.Properties;@Intercepts({@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})
})
public class MyPlugin implements Interceptor {@Overridepublic Object intercept(Invocation invocation) throws Throwable {// 获取被拦截方法的参数Object[] args = invocation.getArgs();// 拦截 Executor.query 方法if (invocation.getTarget() instanceof Executor) {MappedStatement ms = (MappedStatement) args[0];Object parameter = args[1];RowBounds rowBounds = (RowBounds) args[2];ResultHandler resultHandler = (ResultHandler) args[3];BoundSql boundSql = ms.getBoundSql(parameter);String sql = boundSql.getSql();System.out.println("Executing SQL: " + sql);// 执行原方法return invocation.proceed();}// 拦截 StatementHandler.prepare 方法if (invocation.getTarget() instanceof StatementHandler) {StatementHandler statementHandler = (StatementHandler) invocation.getTarget();Connection connection = (Connection) args[0];Integer integer = (Integer) args[1];// 获取原始 SQLBoundSql boundSql = statementHandler.getBoundSql();String originalSql = boundSql.getSql();System.out.println("Original SQL: " + originalSql);// 修改 SQL(例如添加注释)String newSql = "/* MyPlugin */ " + originalSql;BoundSql newBoundSql = new BoundSql(boundSql.getMappedStatement().getConfiguration(),newSql,boundSql.getParameterMappings(),boundSql.getParameterObject());MetaObject metaObject = SystemMetaObject.forObject(statementHandler);metaObject.setValue("delegate.boundSql", newBoundSql);// 执行原方法return invocation.proceed();}return invocation.proceed();}@Overridepublic Object plugin(Object target) {// 使用 Plugin.wrap 包装目标对象return Plugin.wrap(target, this);}@Overridepublic void setProperties(Properties properties) {// 设置插件属性(可选)}
}
2.2. 配置插件

mybatis-config.xml 中配置自定义插件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 配置插件 --><plugins><plugin interceptor="com.example.plugin.MyPlugin"><!-- 可以设置插件属性 --><!-- <property name="propertyName" value="propertyValue"/> --></plugin></plugins><!-- 其他配置... -->
</configuration>
2.3. 测试插件

编写测试代码来验证插件的功能:

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.Reader;public class PluginTest {public static void main(String[] args) throws Exception {// 读取 MyBatis 配置文件Reader reader = Resources.getResourceAsReader("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);try (SqlSession session = sqlSessionFactory.openSession()) {UserMapper mapper = session.getMapper(UserMapper.class);// 执行查询操作,触发插件拦截User user = mapper.selectUserById(1L);System.out.println("User: " + user.getName());}}
}

3. 核心使用场景

3.1. 日志记录

Executorqueryupdate 方法中添加日志记录,便于调试和监控。

3.2. SQL 修改

StatementHandlerprepare 方法中修改 SQL 语句,例如添加统一的注释或进行性能优化。

3.3. 参数处理

ParameterHandlersetParameters 方法中对参数进行预处理,如加密、格式化等。

3.4. 结果集处理

ResultSetHandlerhandleResultSets 方法中对结果集进行后处理,如数据脱敏、缓存等。


4. 表格整理总结

场景拦截接口及方法具体应用示例代码片段
日志记录Executor.query, Executor.update在执行 SQL 前后记录日志System.out.println("Executing SQL: " + sql);
SQL 修改StatementHandler.prepare修改或优化 SQL 语句String newSql = "/* MyPlugin */ " + originalSql;
参数处理ParameterHandler.setParameters对参数进行预处理(如加密)preparedStatement.setString(1, encrypt(parameter));
结果集处理ResultSetHandler.handleResultSets对查询结果进行后处理(如脱敏)resultList.forEach(item -> item.setEmail(maskEmail(item.getEmail())));
性能监控Executor.query, Executor.update记录 SQL 执行时间long startTime = System.currentTimeMillis(); ... long endTime = ...
分页支持StatementHandler.parameterize动态添加分页参数preparedStatement.setInt(1, offset); preparedStatement.setInt(2, limit);

5. 最佳实践建议

  1. 理解底层行为:在重写方法时,需理解其底层行为,避免破坏 MyBatis 的核心功能。
  2. 谨慎修改 SQL:修改 SQL 时要确保语法正确,避免引入潜在的 SQL 注入风险。
  3. 合理使用属性:通过 setProperties 方法为插件设置属性,增强灵活性。
  4. 单元测试:编写单元测试验证插件功能,确保其在各种场景下的稳定性。
  5. 文档记录:详细记录插件的使用方法和注意事项,便于团队成员理解和维护。

通过以上示例和总结,可以全面掌握 MyBatis 插件的开发和应用场景。


文章转载自:

http://HfiTWAut.kymrs.cn
http://AfaCd9mU.kymrs.cn
http://ZRu1cTyf.kymrs.cn
http://xfipbruI.kymrs.cn
http://EHY55v9r.kymrs.cn
http://P7ydduvr.kymrs.cn
http://DoRxvixB.kymrs.cn
http://yRYXVRET.kymrs.cn
http://ufkJ9mqr.kymrs.cn
http://QWaTwx0w.kymrs.cn
http://ucwegMmL.kymrs.cn
http://99EaUwu7.kymrs.cn
http://hL1UcN3D.kymrs.cn
http://aUFJYyb8.kymrs.cn
http://JfBJlNow.kymrs.cn
http://Wdj1gYTt.kymrs.cn
http://Ot5DQSeN.kymrs.cn
http://cZWJCIdu.kymrs.cn
http://ji0UtTIE.kymrs.cn
http://7jK9yRFG.kymrs.cn
http://5IyiekSI.kymrs.cn
http://o9vA0YHR.kymrs.cn
http://thRMGE4W.kymrs.cn
http://ujU3Amxh.kymrs.cn
http://G86a8NKk.kymrs.cn
http://lFy3zRMH.kymrs.cn
http://WkZHdsAg.kymrs.cn
http://WBIa5wRz.kymrs.cn
http://iMbFLCk2.kymrs.cn
http://3wM7Calk.kymrs.cn
http://www.dtcms.com/wzjs/692888.html

相关文章:

  • 完全自定义纯代码打造你的wordpress站点侧边栏编程做网站容易还是做软件
  • 有哪些免费做简历的网站app模板素材下载免费
  • 海南营销网站建设手机app与手机网站的区别
  • 网站增加关键字天津建设网站安全员考试查询
  • 网站出租建设做洗衣液的企业网站
  • 兰州网站推广丰涵网站建设
  • 江西数据平台网站建设wordpress数据库版本
  • 小说网站建设之前需求分析wordpress aike主题
  • thinkphp购物网站开发视频建设通官网app下载
  • 门户网站建设经验总结报告个人承包工程合同范本
  • 一个企业网站的建设流程网站怎么做充值系统下载
  • 网站开发需要哪些软件开源低代码平台
  • 景安网站品牌建设不足的原因
  • dw网站建设框架大小设定代备案域名30元
  • p2p贷款网站制作东莞城乡住房建设厅网站
  • win7怎么做网站服务器做公司网站需要什么程序
  • 做烘焙的网站美容北京公司网站建设
  • 精美ppt模板免费下载网站做网站应该了解什么软件
  • 网站优化托管方案文库网络营销与直播电商专业就业方向
  • 怎么用dw软件做网站wordpress ios版
  • 网站轮播动态图如何做上海知名网站开发公司
  • 有关网站建设的书网站设计网站项目流程图
  • 哈尔滨网页网站制作天津做网架公司
  • 上海集团网站建设价格网页设计师女生工资
  • 自己服务器建设网站国际最新军事新闻
  • 有哪个网站是成都中科大旗做的如何提交网站地图
  • 哪个网站做免费小程序网站建设属于办公费吗
  • 网站空间购买800福建工程建设中心网站
  • 无法连接到wordpress站点网站设计 网站推广 网站优化
  • 朔州网站建设优化淘宝店铺头像logo制作