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

做二手手机交易网站佛山seo优化

做二手手机交易网站,佛山seo优化,网络营销专业如何,万州哪里有做网站的一、配置加载阶段​​ ​​1. 读取全局配置(mybatis-config.xml)​​ ​​入口类​​:SqlSessionFactoryBuilder.build()​​关键组件​​: XMLConfigBuilder:解析全局配置文件。Configuration:存储所有配…

一、配置加载阶段​

​1. 读取全局配置(mybatis-config.xml)​
  • ​入口类​​:SqlSessionFactoryBuilder.build()
  • ​关键组件​​:
    • XMLConfigBuilder:解析全局配置文件。
    • Configuration:存储所有配置信息(数据源、映射器、插件等)。
  • ​过程​​:
    • 解析 <environments> 标签,创建 DataSource 和 TransactionFactory
    • 解析 <mappers> 标签,加载 Mapper XML 或接口。
​2. 加载 Mapper 文件(UserMapper.xml)​
  • ​入口类​​:XMLMapperBuilder.parse()
  • ​关键组件​​:
    • MappedStatement:每个 SQL 操作的抽象(包含 SQL 文本、参数映射、结果映射等)。
    • SqlSource:动态 SQL 或静态 SQL 的封装。
  • ​过程​​:
    • 解析 <select|insert|update|delete> 标签,生成 MappedStatement
    • 解析动态 SQL(如 <if><foreach>),生成 SqlNode 语法树。
​二、会话创建阶段​
​1. 创建 SqlSessionFactory​
  • ​实现类​​:DefaultSqlSessionFactory
  • ​作用​​:生产 SqlSession(数据库操作入口)。
​2. 创建 SqlSession​
  • ​核心方法​​:openSession()
  • ​关键组件​​:
    • Executor:执行 SQL 的核心组件(默认实现为 SimpleExecutor)。
    • Transaction:事务管理器(JDBC 或 MANAGED)。

​​三、SQL 解析阶段

​1. Mapper 接口代理​
  • ​入口​​:sqlSession.getMapper(UserMapper.class)
  • ​关键组件​​:
    • MapperProxy:动态代理类,拦截接口方法调用。
    • MapperMethod:将方法调用转换为 SQL 操作(SELECT|INSERT|UPDATE|DELETE)。
​2. 生成 BoundSql​
  • ​关键组件​​:
    • SqlSource:通过 DynamicSqlSource 或 RawSqlSource 解析 SQL。
    • BoundSql:最终可执行的 SQL + 参数映射信息。
  • ​过程​​:
    • 替换 ${} 占位符(直接文本替换)。
    • 解析 #{} 占位符,生成 ? 并记录参数映射关系。
​四、参数处理阶段​
​1. 参数绑定​
  • ​关键组件​​:
    • ParameterHandler(实现类:DefaultParameterHandler)
    • TypeHandler:类型转换处理器(如 StringTypeHandler、DateTypeHandler)。
  • ​过程​​:
    • 根据 MappedStatement 中的参数映射(ParameterMapping)解析参数。
    • 使用 TypeHandler 将 Java 对象转换为 JDBC 类型。
    • 通过 PreparedStatement.setXXX() 设置参数。
​2. 动态 SQL 处理​
  • ​示例​​:
<select id="findUsers"> SELECT * FROM users <where> <if test="name != null">AND name = #{name}</if> <if test="age > 18">AND age = #{age}</if> </where> 
</select>
  • ​解析器​​:XMLScriptBuilder 将 <if> 转换为 IfSqlNode
  • ​执行逻辑​​:运行时根据参数值动态拼接 SQL。
​五、SQL 执行阶段​
​1. 执行器(Executor)工作流程​
  • ​核心类​​:BaseExecutor → SimpleExecutor(默认)
  • ​流程​​:
    • 检查一级缓存(LocalCache)是否存在结果。
    • 未命中缓存时,创建 StatementHandler
    • 调用 StatementHandler.prepare() 创建 Statement 对象。
    • 执行 StatementHandler.query() 或 update()
​2. StatementHandler 的类型​

类型

说明

SimpleStatementHandler

处理普通Statement(无参数)

PreparedStatementHandler

处理PreparedStatement(预编译,推荐)

CallableStatementHandler

处理存储过程调用

​3. 执行细节​
  • ​预编译优化​​:
// 生成 PreparedStatement 
Connection conn = session.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
// 设置参数 
parameterHandler.setParameters(ps); 
// 执行查询 
ResultSet rs = ps.executeQuery();

​六、结果映射阶段​
​1. 结果集处理​
  • ​关键组件​​:
    • ResultSetHandler(实现类:DefaultResultSetHandler)
    • ResultMap:定义结果集与 Java 对象的映射规则。
  • ​过程​​:
    • 遍历 ResultSet 的每一行。
    • 根据 ResultMap 创建目标对象(如 User)。
    • 使用 TypeHandler 将数据库字段值填充到对象属性。
​2. 嵌套映射与延迟加载​
  • ​嵌套查询​​:
<resultMap id="userWithOrders" type="User"> <collection property="orders" column="id" select="selectOrdersByUserId"/> 
</resultMap>
  • ​触发时机​​:访问 user.getOrders() 时执行子查询(需开启延迟加载)。

​七、核心组件协作流程图​

​八、高级特性扩展​

​1. 插件机制(Interceptor)​
  • ​拦截点​​:Executor、StatementHandler、ParameterHandler、ResultSetHandler。
  • ​应用场景​​:分页插件、性能监控、SQL 改写。
​2. 二级缓存​
  • ​作用范围​​:Mapper 级别,跨 SqlSession 共享。
  • ​启用条件​​:在 Mapper XML 中添加  标签。
​3. 延迟加载​
  • ​配置​​:在 mybatis-config.xml 中设置:
<settings><setting name="lazyLoadingEnabled" value="true"/>
</settings>

通过理解 MyBatis 的执行原理,可以更好地优化 SQL 性能、定制插件,并快速定位复杂问题(如缓存失效、动态 SQL 错误等)。

http://www.dtcms.com/wzjs/228532.html

相关文章:

  • ui设计师网站七牛云
  • 帝国网站管理系统入门教程站长素材音效
  • 网站目标定位概念网站创建流程
  • 搜狗推广做网站要钱吗成年培训班有哪些
  • 嵌入式开发学什么seo软件定制
  • 平面设计软件哪个好用广州网站seo地址
  • 抚州专业的企业网站建设公司免费友情链接交换平台
  • 新手可以自己学做网站设计吗产品营销策略有哪些
  • 北京两学一做网站搜索引擎有哪些种类
  • wordpress安装地址seo排名课程咨询电话
  • 广州网站设计成功柚米网络销售这个工作到底怎么样
  • wordpress4.8.2下载seo知识分享
  • 中国疫情开放最新消息石家庄百度推广优化排名
  • 做的网站进不去后台大连最好的做网站的公司
  • 国外网站工作室黄页推广2021
  • 嘉兴网站建设网站关键词排名怎么做上去
  • 百度小程序怎么做武汉seo首页优化技巧
  • 成都图纸设计公司常用的seo工具
  • wordpress wood3主题武威网站seo
  • 怎么做好邯郸网站建设广告主资源哪里找
  • 做网站做什么主题网络营销理论包括哪些
  • 张家港快速网站建设北京seo公司司
  • 重庆网站推广运营公司seo基础培训教程
  • 金华专业网站制作二级域名查询入口
  • 手表网站模板北京搜索排名优化
  • 企业网站访问对象有哪些免费域名申请的方法
  • python开发做网站seo营销是什么意思
  • 用花生壳做网站速度可以吗西安网站seo哪家公司好
  • 移动端开发用什么编程语言关键词优化seo公司
  • 怎样建网站 需要营销方式和营销策略