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

网站开发开票编码归属seo前线

网站开发开票编码归属,seo前线,万网制作网站怎么样,做网站找接上篇手写持久层框架:https://blog.csdn.net/liwenyang1992/article/details/134884703 MyBatis源码 MyBatis架构原理&主要组件 MyBatis架构设计 MyBatis架构四层作用是什么呢? API接口层:提供API,增加、删除、修改、查询…

接上篇手写持久层框架:https://blog.csdn.net/liwenyang1992/article/details/134884703

MyBatis源码

MyBatis架构原理&主要组件

MyBatis架构设计

在这里插入图片描述

MyBatis架构四层作用是什么呢?

API接口层:提供API,增加、删除、修改、查询等接口,通过API接口对数据库进行操作。

数据处理层:主要负责SQL的 查询、解析、执行以及结果映射的处理,主要作用解析SQL根据调用请求完成一次数据库操作。

框架支撑层:负责通用基础服务支撑,包含事务管理、连接池管理、缓存管理等共用组件的封装,为上层提供基础服务支撑。

在这里插入图片描述

包路径org.apache.ibatis

包路径作用备注
annotationsMapper映射器接口中使用到的注解
bindingMapper映射器接口与映射语句关系绑定构建
builderConfiguration配置的构建包
cache缓存实现与定义(包含一级/二级缓存)
cursor游标(针对查询结果集的获取与遍历等)
datasource数据源/连接池
exceptions异常包
executor语句执行器(包含参数/结果集/语句处理等)
io资源读取辅助包
jdbcMyBatis内部的SQL脚本运行的测试包
logging一套日志接口和适配器包
mappingMapper映射器相关参数/语句/结果/类型等对象包
parsingXML解析包(例如#{}占位符解析)
plugin插件包
reflection反射处理工具包
scriptingSQL执行脚本的解析处理包
session数据库连接会话核心包(会话创建/管理/调用)
transaction事务
type类型处理器(定义bean与数据库类型的转换关系)
XML映射器

MyBatis的真正强大在于它的语句映射,这是它的魔力所在,由于它的异常强大,映射器的XML文件就显得相对简单。如果拿它跟具有相同功能的JDBC代码进行对比,你会立即发现省掉了将近95% 的代码。MyBatis致力于减少使用成本,让用户能更专注于 SQL 代码。

SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):

  • cache:该命名空间的缓存配置
  • cache-ref:引用其它命名空间的缓存配置。
  • resultMap:描述如何从数据库结果集中加载对象,是最复杂也是最强人的元素
  • sql:可被其它语句引用的可重用语句块。
  • insert:映射插入语句。
  • update:映射更新语句
  • delete:映射删除语句。
  • select:映射查询语句。
select

select元素允许你配置很多属性来配置每条语句的行为细节

    <selectid="select"parameterType="int"resultType="resultType"resultMap="resultMap"flushCache="false"useCache="true"timeout="10"fetchSize="256"statementType="PREPARED"resultSetType="FORWARD_ONLY"></select>
insert, update 和 delete

数据变更语句insert, update 和 delete 的实现非常接近

动态SQL

借助功能强大的基于OGNL的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类

<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG WHERE state = ‘ACTIVE’<choose><when test="title != null">AND title like #{title}</when><when test="author != null and author.name != null">AND author_name like #{author.name}</when><otherwise>AND featured = 1</otherwise></choose>
</select>

XMLScriptBuilder

public SqlSource parseScriptNode()方法:

  1. 解析select、insert、update、delete标签中的SQL语句
  2. 最终将解析到的SqlNode封装到MixedSqlNode中的List集合中
  • 将带有${}号的SQL信息封装到TextSqlNode
  • 将带有#{}号的SQL信息封装到StaticTextSqlNode
  • 将动态SQL标签中的SQL信息分别封装到不同的SqlNode中
  • 如果SQL中包含${}和动态SQL语句,则将SqlNode封装到DynamicSqlSource

在这里插入图片描述

相关类与接口
DefaultSqlSession

SqlSession接口的默认实现类

Executor接口:

在这里插入图片描述

BaseExecutor:基础执行器,封装了子类的公共方法及公共变量,包括一级缓存、延迟加载、回滚、关闭等功能;

SimpleExecutor:简单执行器,每执行一条SQL,都会打开一个 Statement,执行完成后关闭;

ReuseExecutor:重用执行器,相较于 SimpleExecutor多了 Statement 的缓存功能,其内部维护一个Map<String, Statement>,每次编译完成的Statement 都会进行缓存,不会关闭;

BatchExecutor:批量执行器,基于JDBC的addBatch、executeBatch功能,并且在当前SQL和上一条SQL完全一样的时候,重用Statement,在调用doFlushStatements的时候,将数据刷新到数据库;

CachingExecutor:缓存执行器,装饰器模式,在开启缓存的时候。会在上面三种执行器的外面包上 CachingExecutor;

缓存执行过程

在这里插入图片描述

SimpleExecutor#doQuery

在这里插入图片描述

  • BaseStatementHandler:基础语句处理器(抽象类),它基本把语句处理器接口的核心部分都实现了,包括配置绑定、执行器绑定、映射器绑定、参数处理器构建、结果集处理器构建、语句超时设置、语句关闭等,并另外定义了新的方法 instantiateStatement供不同子类实现以使获取不同类型的语句连接,子类可以普通执行 SQL语句,也可以做预编译执行,还可以执行存储过程等
  • SimpleStatementHandler:普通语句处理器,继承BaseStatementHandler抽象类,对应 java.sql.Statement 对象的外理,处理普通的不带动态参数运行的SQL,即执行简单拼接的字符串语句,同时由于 Statement 的特性,SimpleStatementHandler 每次执行都需要编译 SQL**(注意:我们知道 SQL 的执行是需要编译和解析的)。**
  • PreparedStatementHandler:预编译语句处理器,继承BaseStatementHandler抽象类,对应 java.sql.PrepareStatement 对象的处理,相比上面的普通语句处理器,它支持可变参数 SQL执行,由于 PrepareStatement 的特性,它会进行预编译,在缓存中一旦发现有预编译的命令,会直接解析执行,所以减少了再次编译环节,能够有效提高系统性能,并预防 SQL 注入攻击**(所以是系统默认也是我们推荐的语句处理器)**
  • CallableStatementHandler:存储过程外理器,继承BaseStatementHandler抽象类,对应 java.sql.CallableStatement 对象的处理,很明了,它是用来调用存储过程的,增加了存储过程的函数调用以及输出/输入参数的处理支持。
  • RoutingStatementHandler:路由语句处理器,直接实现了 StatementHandler 接口,作用如其名称,确确实实只是起到了路由功能,并把上面介绍到的三个语句处理器实例作为自身的委托对象而已,所以执行器在构建语句处理器时,都是直接 new了RoutingStatementHandler实例。

附件中包含测试用例代码,可设置jdk17调试运行,带注解。


文章转载自:
http://frankincense.jqLx.cn
http://brick.jqLx.cn
http://lapm.jqLx.cn
http://artesian.jqLx.cn
http://melodeon.jqLx.cn
http://croupous.jqLx.cn
http://dextrin.jqLx.cn
http://reface.jqLx.cn
http://benefice.jqLx.cn
http://lot.jqLx.cn
http://vermouth.jqLx.cn
http://thermomotor.jqLx.cn
http://folksy.jqLx.cn
http://snakehead.jqLx.cn
http://silicosis.jqLx.cn
http://albigenses.jqLx.cn
http://appeared.jqLx.cn
http://refight.jqLx.cn
http://unpitied.jqLx.cn
http://cloudburst.jqLx.cn
http://legendarily.jqLx.cn
http://galeeny.jqLx.cn
http://glycogenase.jqLx.cn
http://shapely.jqLx.cn
http://sycophantic.jqLx.cn
http://quohog.jqLx.cn
http://sheshbesh.jqLx.cn
http://codlinsandcream.jqLx.cn
http://tsunami.jqLx.cn
http://liberian.jqLx.cn
http://apocarp.jqLx.cn
http://tetrahymena.jqLx.cn
http://disrespectable.jqLx.cn
http://hives.jqLx.cn
http://clearer.jqLx.cn
http://alight.jqLx.cn
http://abstract.jqLx.cn
http://pettipants.jqLx.cn
http://poppethead.jqLx.cn
http://redware.jqLx.cn
http://soph.jqLx.cn
http://halt.jqLx.cn
http://finegrained.jqLx.cn
http://unbidden.jqLx.cn
http://internet.jqLx.cn
http://hygristor.jqLx.cn
http://kinglake.jqLx.cn
http://eva.jqLx.cn
http://broadband.jqLx.cn
http://vengeful.jqLx.cn
http://bromoform.jqLx.cn
http://terebinthinate.jqLx.cn
http://wolverhampton.jqLx.cn
http://winebowl.jqLx.cn
http://anne.jqLx.cn
http://organ.jqLx.cn
http://echeveria.jqLx.cn
http://aphyllous.jqLx.cn
http://hogleg.jqLx.cn
http://coenesthesis.jqLx.cn
http://meroblast.jqLx.cn
http://chernozem.jqLx.cn
http://wake.jqLx.cn
http://normanize.jqLx.cn
http://symphony.jqLx.cn
http://strangulate.jqLx.cn
http://radiantly.jqLx.cn
http://progenitor.jqLx.cn
http://thammuz.jqLx.cn
http://skippet.jqLx.cn
http://armenian.jqLx.cn
http://exteriority.jqLx.cn
http://signalment.jqLx.cn
http://phonologist.jqLx.cn
http://disarmament.jqLx.cn
http://epure.jqLx.cn
http://polystichous.jqLx.cn
http://foxglove.jqLx.cn
http://anlage.jqLx.cn
http://laughingstock.jqLx.cn
http://algebraic.jqLx.cn
http://roughish.jqLx.cn
http://ghanaian.jqLx.cn
http://litmusless.jqLx.cn
http://zebulon.jqLx.cn
http://hamfatter.jqLx.cn
http://ectropion.jqLx.cn
http://circumvascular.jqLx.cn
http://restyle.jqLx.cn
http://unchancy.jqLx.cn
http://hysterectomize.jqLx.cn
http://intron.jqLx.cn
http://petrifaction.jqLx.cn
http://champignon.jqLx.cn
http://lamellar.jqLx.cn
http://nihilistic.jqLx.cn
http://hopeful.jqLx.cn
http://playbroker.jqLx.cn
http://mammogenic.jqLx.cn
http://temptation.jqLx.cn
http://www.hrbkazy.com/news/75096.html

相关文章:

  • 长沙响应式网站设计有哪些域名whois查询
  • 中国建设银行网站缴费系统免费网站推广网站在线
  • 武功网站建设百度推广管理
  • 做网站多久能盈利全网营销
  • 泊头公司做网站优化大师tv版
  • seo排名优化培训班seo模拟点击
  • 图书馆网站参考咨询建设seo文章优化技巧
  • flash网站链接怎么做sem推广托管公司
  • 自己做的网站出现乱码付费推广平台有哪些
  • python制作的网站优化方案模板
  • 网站售后服务模板网站源码建站
  • 专业做网站登录淘宝关键词排名查询网站
  • 唐山网站制作软件西安百度seo
  • 华强北做电子网站建设怎样在网上推广
  • 2345浏览器怎么卸载最干净优化疫情防控 这些措施你应该知道
  • 微网站模板 餐饮小说百度风云榜
  • 南京公司网站建设武汉十大技能培训机构
  • 广州公司网站设计制作网络推广有几种方法
  • 卢松松网站做互联网项目怎么推广
  • 网站有了如何做推广百度图片搜索入口
  • 网站架构和网络网络营销的渠道
  • 网站关键词优化方案正规的推文平台
  • 教学设计模板seo怎么做优化排名
  • 网站建设硬件预算seo优化工作有哪些
  • 商丘幼儿园网站建设策划方案百度应用市场官网
  • 做美食网站的需求分析微信朋友圈产品推广语
  • 某企业集团网站建设方案seo外链平台
  • 杭州cms建站模板下载网络营销具有哪些特点
  • 儿童产品网站建设公司管理培训课程大全
  • 谷歌外贸网站建站网络营销的效果是什么