Java
2020-12-25 14:19:40 0 举报
AI智能生成
mybatis
作者其他创作
大纲/内容
集合
Collection
List
Vector
LinkedList
ArrayList
Set
SortedSet
TreeSet
HashSet
LinkedHashSet
Map
HashMap
LinkedHashMap
SortedMap(接口)
TreeMap
HashTable
Properties
ConcurrentHashMap
线程安全,1.7使用分段锁 1.8使用CAS+Synchronized
WeakHashMap
java基础
异常(Throwable)
Error(非检查时异常)
VritualMachineError
ThreadDeath
Exception
RunTimeException(非检查时异常)
NullPointException
ClassCastException
ArithmeticException
ArrayIndexOutOfBoundsException
非运行时异常
IOException
SQLException<br>
用户自定义异常
分支主题
分支主题
Spring
事务
数据库事务的特征
原子性、一致性、隔离性、持久性
Mysql数据隔离级别
Read uncommttied 会导致 脏读、不可重复读、幻读<br>
Read committed 会导致 不可重复读、幻读
Repeatable read 会导致 幻读
Serializable 最高隔离级别
事务的传播行为
支持当前事物
PROPAGATION_REQUIRED
如果有事务就支持当前事务,如果没有则开启一个事务
PROPAGATION_SUPPORTS
如果有事务,就支持该事务,没有则已非事务执行
PROPAGATION_MANDATORY
如果有事务,就支持该事务,没有则抛异常
不支持当前事物
PROPAGATION_REQUIRES_NEW
它会开启一个新的事务。如果一个事务已经存在,则先将这个存在的事务挂起。<br>内层事务和外层事务就像两个独立的事务,一旦内层事务提交了,外层事务不能对其回滚
PROPAGATION_NOT_SUPPORTED
总是非事务地执行,并挂起任何存在的事务
PROPAGATION_NEVER
总是非事务地执行,如果存在一个活动事务,则抛出异常。
其他情况
PROPAGATION_NESTED(嵌套事务)
如果一个活动的事务存在,则运行在一个嵌套的事务中
外层事务失败,会回滚内层事务
内层事务的失败并不会引起外层事务的回滚
子主题
mybatis
核心组件
<span style="font-size: inherit;">SqlSessionFactoryBuilder(session工厂的构建器) 根据mybatis的xml配置生成</span>DefaultSqlSessionFactory<br>
Configuration的初始化
Environment
ExecutorType
mapperRegistry
SqlSessionFactory<br>
实现类
DefaultSqlSessionFactory调用opensession方式创建sqlsession
执行器的类型
事务隔离级别
是否自动提交
SqlSessionManager
Sqlsession
DefaultSqlsession
SqlsessionManage
Executor
CachingExecutor
BaseExecutor
SimpleExecutor<br>
ReuseExecutor
BatchExecutor
StatementHandler(mybatis的核心接口)<br> 作用:1.创建Statement对象<br> 2.为SQL 语句绑定实参
BaseStatementHandler 抽象类,主要实现了公共的方法
parameterHandler为sql的参数赋值
resultSetHandler 实现类为DefaultResultSetHandler<br> 作用:1、处理Statement执行后产生的结果集,生成结果列表<br> 2、处理存储过程执行后的输出参数
SimpleStatementHandler 实现类,主要对应JDBC中的Statement接口,用于简单SQL的处理;
PreparedStatementHandler 实现类,主要对应JDBC中的PreparedStatement,处理预编译SQL的接口;
RoutingStatementHandler 直接实现类,上述三个实现类的路由类,没有实际操作,只是负责上面三个StatementHandler的创建及调用。
整体架构
接口层
sqlsession
数据处理层
配置解析,解析mybatis配置信息和mapper.xml
解析工具(BaseBuilder)
XMLConfigBuilder
XMLMapperBuilder
MapperBuilderAssistant
XMLStatementBuilder
子主题
解析器(XPathParser)
Document(Document 对象代表整个 XML 文档,是一棵文档树的根,可为我们提供对文档数据的最初(或最顶层)的访问入口。)<br>
validation(设置解析器在解析文档的时候是否校验文档,在创建DocumentBuilderFactory实例对象时进行设置。)<br>
entityResolver(解析mybatis的xml文档,默认加载文件头联网的xml地址)<br>
XPath(解析xml的语言)<br>
variables(配置参数集合)
mapper节点的解析
parameterMap
resultMap
sql
select|insert|update|delete
参数映射
MapperMethod
SqlCommand(sql命令,包括调用sql的对应接口全类名和sql类型)封装了SQL标签的类型 insert update delete select
MethodSignature一个内部类 封装了方法的参数信息 返回类型信息等
convertArgsToSqlCommandParam(MethodSignature的内部方法,对mapper接口的参数进行<br>解析,如果是多个则包装成map类型)<br>
sql解析
prepareStatement(将参数的值赋值到boundSql中的sql占位符中)
sql执行
ResultSetWrapper rsw = getFirstResultSet(stmt) 调用JDBC 拿到结果集ResultSet 并且封装到ResultSetWrapper中
结果集映射
handleResultSet 根据规则(resultMap)处理,将结果集转化成Object并保存到multipleResults<br> * 核心流程 1.handleRowValues 处理结果集<br> * 2.multipleResults.add 添加结果集到集合中
基础支持层
RoctetMq
异步线程
创建线程池的方式
newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。<br>
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
自定义线程池 ThreadPoolExecutor
参数
核心线程数、最大线程数、最长存活时间、存活时间的单位、阻塞队列、线程工厂、拒绝策略
拒绝策略
AbortPolicy 一直抛出异常
DiscardPolicy 抛弃这个线程
DiscardOldestPolicy 在线程池未关闭的情况下,他是丢弃队列中等待时间最久的任务,然后把当前任务加入到队列中等待执行
CallerRunsPolicy 由调用者线程去执行这个任务
创建线程的几种方式
继承Thread/Thread内部用lamda表达式
实现runnable接口
带返回结果 实现Callable接口 Future是一个接口,是无法生成一个实例的,所以又有了FutureTask。FutureTask实现了RunnableFuture接口,RunnableFuture接口又实现了Runnable接口和Future接口。所以FutureTask既可以被当做Runnable来执行,也可以被当做Future来获取Callable的返回结果。<br>
锁
锁分类
1.乐观锁/悲观锁<br>2.公平锁/非公平锁 <br>3.可重入锁<br>4.独享锁/共享锁<br>5.互斥锁/读写锁<br>6.偏向锁/轻量级锁/重量级锁(锁的状态)<br>7.分段锁(锁的设计)<br>8.自旋锁<br>
死锁的条件
互斥条件:一个资源每次只能被一个进程使用。<br>占有且等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放。<br>不可强行占有:进程已获得的资源,在末使用完之前,不能强行剥夺。<br>循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。<br>
redis
基本数据类型
String
底层使用SDS
List
linkedlist、ziplist
Hash
ziplist、dict
Set
intset(所有的元素都是整数)/dict
SortSet
dict+skipList 数据较少时用zipList
基本数据结构
SDS
链表(linkedlist)
字典(dict)
跳跃表(skipList)
整数集合(intSet)
压缩列表(zipList)
0 条评论
下一页