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

专业网站建设多少钱淘宝美工培训推荐

专业网站建设多少钱,淘宝美工培训推荐,西部数码网站管理助手搭建织梦,专业建设规划及实施方案MappedStatement-封装一次sql映射语句的所有配置信息 MappedStatement: 是 MyBatis 框架中核心类 核心功能:封装一次 SQL 映射语句(SQL Statement)的所有配置信息 ​ 使用了内部静态类 Builder 来实现构建者模式, 保证…

MappedStatement-封装一次sql映射语句的所有配置信息

  • MappedStatement: 是 MyBatis 框架中核心类

核心功能:封装一次 SQL 映射语句(SQL Statement)的所有配置信息

​ 使用了内部静态类 Builder 来实现构建者模式, 保证 MappedStatement 的不可变性和构造过程的灵活性

作用
MappedStatement : 代表 MyBatis 中一个具体的映射语句配置,包含了执行 SQL 所需的所有信息

MappedStatement.Builder 是用于构建 MappedStatement 实例的构造器,避免构造参数过多,代码易读且易扩展。

public static class Builder {private MappedStatement mappedStatement = new MappedStatement();public Builder(Configuration configuration, String id, SqlSource sqlSource, SqlCommandType sqlCommandType) {// 必填参数初始化及默认值赋值}// 各种 setter 风格的方法链,方便链式调用public Builder resource(String resource) { ... }public Builder fetchSize(Integer fetchSize) { ... }// ... 省略public MappedStatement build() {// 校验必须字段非空// 包装不可变的 List 等return mappedStatement;}
}

主要字段说明

字段名类型作用描述
resourceString映射语句来源资源(一般为 XML 路径)
configurationConfigurationMyBatis 全局配置对象
idString映射语句唯一标识(namespace + id)
fetchSizeInteger批量获取结果集大小
timeoutInteger执行超时时间
statementTypeStatementTypeSQL 语句类型(STATEMENT, PREPARED, CALLABLE)
resultSetTypeResultSetType结果集类型(FORWARD_ONLY 等)
sqlSourceSqlSourceSQL 语句提供者,负责动态 SQL 解析
cacheCache缓存策略
parameterMapParameterMap参数映射
resultMapsList<ResultMap>结果映射列表
flushCacheRequiredboolean是否需要刷新缓存
useCacheboolean是否使用二级缓存
resultOrderedboolean结果是否有序
sqlCommandTypeSqlCommandTypeSQL 类型(SELECT, INSERT, UPDATE, DELETE)
keyGeneratorKeyGenerator主键生成器
keyPropertiesString[]主键属性列表
keyColumnsString[]主键列列表
hasNestedResultMapsboolean是否存在嵌套的结果映射
databaseIdString数据库标识,支持多数据库映射
statementLogLog语句执行日志
langLanguageDriver语言驱动,处理不同脚本语言(XML、注解等)
resultSetsString[]多结果集名称

Builder 中常用方法详解

  • parameterMap(ParameterMap parameterMap):指定参数映射。
  • resultMaps(List<ResultMap> resultMaps):指定结果映射,并根据结果映射判断是否有嵌套结果映射。
  • keyGenerator(KeyGenerator keyGenerator):指定主键生成策略,默认根据配置和 SQL 类型确定。
  • keyProperty(String keyProperty) / keyColumn(String keyColumn):指定主键对应的属性名和列名。
  • lang(LanguageDriver driver):指定语言驱动,如 XML 语言驱动。
  • build():构造最终的不可变 MappedStatement 实例。

关键方法

  • 根据参数对象,从 sqlSource 解析出最终 SQL 和参数映射。
  • 如果没有参数映射,则使用默认参数映射重构。
  • 进一步检查参数映射中是否有嵌套结果映射,标记 hasNestedResultMaps
public BoundSql getBoundSql(Object parameterObject) {BoundSql boundSql = sqlSource.getBoundSql(parameterObject);List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();if (parameterMappings == null || parameterMappings.isEmpty()) {boundSql = new BoundSql(configuration, boundSql.getSql(), parameterMap.getParameterMappings(), parameterObject);}// 检查参数映射中是否包含嵌套结果映射(解决 issue #30)for (ParameterMapping pm : boundSql.getParameterMappings()) {String rmId = pm.getResultMapId();if (rmId != null) {ResultMap rm = configuration.getResultMap(rmId);if (rm != null) {hasNestedResultMaps |= rm.hasNestedResultMaps();}}}return boundSql;
}

此方法不能用的原因

在用 MyBatis-Plus + MybatisInterceptor 链机制,而你注册的是 原始 MyBatis 插件机制

MyBatis-Plus 3.4.0+ 默认只支持 InnerInterceptor

注册的是 MyBatis 原生的插件(实现了 org.apache.ibatis.plugin.Interceptor),
而 MyBatis-Plus 的默认插件执行链不包含原生 Interceptor,必须你通过手动注册。

你可以从日志中看到这些被拦截的类是:

复制编辑
plugin target: class com.baomidou.mybatisplus.core.MybatisParameterHandler

这是 MyBatis-Plus 定制过的执行器链条(它使用了自己的 InterceptorChain)。

故整体变动改为实现 InnerInterceptor

@Override
public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds,ResultHandler resultHandler, BoundSql boundSql) {// 判断是否跳过if (MerchantIsolationContext.isSkipped()) {return;}try {String originalSql = boundSql.getSql().toLowerCase(Locale.ROOT);log.info("===> into MerchantIsolationInnerInterceptor, msId = {}, SQL = {}", ms.getId(), originalSql);if (!originalSql.contains("from") || originalSql.contains(MerchantCenterConstant.FIELD_MERCHANT_ID)) {return;}Class<?> doClass = extractDoClass(ms);if (CheckUtil.isEmpty(doClass)) {log.warn("Unable to extract DO class, skipping merchant_id injection");return;}if (!hasMerchantId(doClass)) {return;}if (isMultiTable(originalSql)) {log.warn("Multi-table SQL detected, skipping merchant_id injection: {}", originalSql);return;}Long merchantId = extractMerchantId(parameter);if (CheckUtil.isEmpty(merchantId)) {throw BaseIllegalArgumentException.newException(BaseIllegalArgumentException.BASE_ILLEGAL_ARGUMENT,"No merchant_id provided and no skip claim");}String modifiedSql = appendMerchantCondition(boundSql.getSql(), merchantId);log.info("SQL injection merchant_id completed: {}", modifiedSql);// 替换 SQL(MyBatis-Plus 特殊处理)ReflectUtil.setFieldValue(boundSql, "sql", modifiedSql);} catch (Exception e) {log.error("MerchantIsolationInnerInterceptor Error: {}", e.getMessage(), e);}
}
http://www.dtddedu.com/news/123.html

相关文章:

  • 专门做设计的网站有哪些优化搜索点击次数的方法
  • 网站用图片做背景图片小程序开发
  • 网站恶意刷seo搜索引擎优化技术教程
  • 做视频点播网站要多少带宽百度上如何发广告
  • 广东企业网站建设公司什么是网络推广员
  • 招生网站制作网页设计的流程
  • 做公司网站客户群体怎么找品牌营销策划
  • 苏州外贸网站设计知乎推广公司
  • 有哪些好的响应式网站百度上的广告多少钱一个月
  • 广州 网站 建设 制作上海app网络推广公司
  • 微信版网站开发百度浏览器打开
  • 响应式企业展示型网站模板百度网站排名查询工具
  • 如何查询一个网站是那家公司做的电商网课
  • 网站开发毕业周记亚马逊提升关键词排名的方法
  • 网站门户是什么意思一键优化清理手机
  • 专门做离异相亲的网站简易的旅游网页制作
  • 网站专业销售团队介绍百度竞价推广登录
  • 重庆网站建设必选承越怎么在百度发布自己的文章
  • 网站建设入门基础seo优化招聘
  • 找it工作有什么好的招聘网站网络开发
  • 提供商城网站正规网站优化公司
  • 网上那个网站做席子批发网站关键词优化系统
  • 小米手机的网站架构自媒体培训
  • ip做网站域名宁波seo网络优化公司
  • iframe网站如何做统计网络宣传的方法渠道
  • 做网站北京警察找上门广告联盟下载app
  • 焦作建网站网站优化策划书
  • 长沙网站制作建设搜索引擎优化特点
  • 丽江网站建设 莱芜国家市场监督管理总局官网
  • 网站建设设计问卷网站排名怎么做上去