MyBatis
2017-01-17 11:06:03 0 举报
登录查看完整内容
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 使用MyBatis的优势包括减少代码量、提高开发效率、可移植性强等。MyBatis还提供了丰富的插件机制,可以方便地扩展其功能。总之,MyBatis是一款非常实用的持久层框架,值得在实际项目中使用。
作者其他创作
大纲/内容
x1
开始
x28
计算1
计算
分片集群代理集群
juc多线程
环境变量的接口
io threads
并行 度
超时链接
从activeConnections 集合中移除 pooledConnection对象
journalnode
单点故障
redis分布式集群
node
redis、db 写同步分布式 一致性 C A P
BaseExecutor分析
set a \
场景:1、评论(分页不排序的情况下)2、队列
是
2 IO读取 串行化
selectList(String)
*mapper.xml
activeConnections
PooledConnection:使用动态代理封装了真正的数据库连接池
sqlSession执行SQL
mapperStatements
c2
conn.isValid()
mybatis-config.xml
BeanFactoryPostProcessor
sqlFraments
CA P
setbit qiandao 364 1
Set
0 1 0 0 0 0 0 0
C
keyGenerators
service2
setbit k1 1 1设置字节 第一个1是偏移量 (从左到右算)第二个1是二进制字节只能是0和1
lpush a \
rdb 默认
XMLMapperBuilder
redisitem99
0 1 0 0 0 0 1 0
秒杀
CPU核心
Bean 信息
否
spring源码流程
redis内存持久化:性能下降快、缓存、丢失数据不怕
c2 read io
redis 存储的数据是二进制安全的byte
redis
后置处理器
redis worker 单线程
加载到Configuration配置中
默认
是否有超时连接
data
x5
3、os缓存 刷写 一个buffer
负载均衡
zadd k1 99 aaa
重启之后加载AOF
0 0 0 0 0 0 0 0
读取对应的bean的配置信息,但是发现需要人为的修改 此时可以在此处进行对应的操作
0 1 0 0 0 0 0 1
redis
Reuse会判断缓存是否有statement
Mybatis的Configuration图解
配置类
decr
c2 write io
主从复制集群全量
<select id=\"selectUserPosition1\" resultMap=\"userAndPosition1\
PooledDataSource:一个简单的 同步的 线程安全的数据库连接池
黑盒可靠集群
开启AOF
selectListspan style=\"font-size: inherit;\
PooledDataSource类popConnection()
redis可用性
并发
空闲
用在生成系统当中
paxos论文
mybatis源码分析
setbit k1 1 1
算法传递过半机制
C1
注解
sessionuuidVFS in men 存小文件
get k1 -> A (ASCII码)
afterPropertiesSet()
阻塞等待
x12
index(2)
SqlSessionFactoryBuilder中的public SqlSessionFactory build(Configuration config)
skiplist 跳链
Executor.query
s
type k1 ##查看k1的数据类型 以上五中Object encoding k1 ->ziplist 存储模式达到一个阈值 会改变底层的存储模式如果zadd k1 88 aaaaaaaaaaaaaaaaa其中a内容大于64 就会让存储模式编程skiplist,小与64则是ziplist
conn==null
排行榜有序事件评论+分页(动态)
工厂模式
数据库连接池的回收
InitializingBean
压力
*mapper.java
活跃最大数
<insert id=\"insertForeach4Batch\" useGeneratedKeys=\"true\" keyProperty=\"id\
idleConnections
缓存延迟加载处理
注入org.mybatis.spring.SqlSessionFactoryBean
根据cacheKey查找一级缓存
字符串
有序的:放入顺序有序而非排序栈:同向lpush/lpop队列:lpush/rpopLTRIM k1 0 4 清除0到4之外的区间数组:LINDEX k1 2
主从主备
利用镜像速度领用日志的完整性日志只做增量
8点后追加的记录
在同一个IO里读到的是有序的
不需要同步
ApplicationListener
Environment
Simple每一个请求都会有一个statement
3 计算 串行化
。。。
c1 write io
List链表
是否有效
lpush从左入链表rpush从右入链表LANGE k1 0 -1 取出区间为所有区间lpop k1 从左弹出rpop k1 从右弹出
移除超时连接
是否命中一级缓存
填充mapperStatements
空闲是否已经达到上限
s2D
初始化sqlSessionFactory
活跃连接池是否达到最大值
buildSqlSessionFactory()
内存:快单线程worker io threads连接很多:epoll 多路复用V:五种类型本地方法:计算向数据移动,IO优化串行化/原子性:并行V.S串行
AOF
二进制
fsimageedits.log
实现三个接口
Configuration
填充resultMap
将conn置为null 并进行统计
对象工厂
内置一堆Bean 其中最典型的是FactoryBean为了做扩展,如springcloud的feign
get k1 -> B (ASCII码)
串行
PooledState:用于管理PooledConnection 对象状态的组件,通过两个list分别管理空闲状态的连接资源和活跃的连接资源
redis 5种数据类型
PooledDataSource类pushConnection()
365天长度 某个位置为1 则为签到第三天 签到置为1
score1
worker 单线程
epoll多路复用
setbit qiandao 2 1
selectOne(String)
填充sql元素
getObejct
loadedResources
抽象
强一致性 破坏可用性
1、每操作、完整性
s1D
怎么使用
集合:多 成本:不推荐使用去重、无序场景:随机事件推荐系统:共同好友:交集推荐好友:差集并集
kenel内核
setbit k1 7 0setbit k1 6 1
快照rdb 恢复数据块 丢失多
第365天签到
resultMaps
获取连接
获取空闲连接
Sorted SetZSet
监听器:可以在容器的不同的阶段做不同的事情进行监听 观察者模式
是否有有效连接
同步
BeanPostProcessor
Batch批量处理
XMLConfigBuilder
xmlConfigBuilder.parse();
高并发
查询数据库得到结果ResultSet
XMLStatementBuilder
1 io event
是否有空闲连接
SqlSession查询接口嵌套关系
Mybatis映射器
统计qiandao有多少个是置为1bitcount qiandao 0 -1查看消耗的字节strlen qiandao
<resultMap id=\"BaseResultMap\" type=\"TUser\"> <id column=\"id\" property=\"id\"/> <result column=\"note\" property=\"note\"/></resultMap><resultMap id=\"userAndPosition1\" extends=\"BaseResultMap\" type=\"TUser\"> <association property=\"position\" javaType=\"TPosition\" columnPrefix=\"post_\"/> <id column=\"id\" property=\"id\"/> </association></resultMap>
一致性下降
isSingleton
nil
2、每秒钟os缓冲 刷写 一个buffer丢失 小于一个buffer
xml
hdfs 内存及的持久化
configuration
C2
IOC容器
set k1 helloSTRLEN k1 -->5set k1 heloxxooSTRLEN k1 -->9set k2 99STRLEN k2 -->2set k3 100STRLEN k3 -->3set k4 aSTRLEN k4 -->1APPEND k4 中STRLEN k4 -->4get k4“a\\xe4\\xb8\\xad”
Bitmap实现签到场景
service1
数值
获取sql信息boundSql
cjuc 锁
x19
弱一致性
空闲是否最大
...
Mybatis 数据库连接池getConnection()算法
涉及到的三个关键的类
唤醒所有阻塞的连接
c1
创建新连接
计算2
同步强一致性
结果保存到一级缓存
jdk1.9 Construtor con = class.getConstrutor()Object obj = con.newInstance()
三种执行方式Simple、Reuse、Batch
applicationContext.xml
阻塞线程
conn == null
<sql id=\"Base_Column_List\
BeanDefinitionReader
注册接口的动态代理对象
实例化对象普通对象
BeanFactory
拼装cacheKey
FactoryBean
spring内置对象
skiplist源码有序集合
20200101日期有2的用户登录了setbit 20200101 2 120200101日期有8的用户登录了setbit 20200101 8 120200102日期有2的用户登录了setbit 20200102 2 1查询这两天的活跃用户数bitop or res 20200101 20200102统计 bitcount res 0 -1
混合使用4.x 版本
hset Sean name zzlhset sean age 18keys * -> sean------------------------------------------HGETALL sean->name zzl age 18------------------------------------------hkeys sean->name age------------------------------------------hvals sean-> zzl 18------------------------------------------HINCRBY sean age -1 -> 17
重写方法
容器 工厂 反射
强一致性
Hash
读取map.xml文件的配置
Bitmap实现活跃人数统计
String
mapperRegistry
添加到activeConnections 集合并进行相应的统计
setbit k1 7 1
sadd k1 ooxx xxoo oxox xoxo oxxo xoox ooxx->6----------------------------------------------SMEMBERS k1->ooxx xoxo xoox oxxo xxoo oxox----------------------------------------------SRANDMENBER k1 3 (返回集合 无序)->xoxo oxox xxoo----------------------------------------------SRANDMENBER k1 3ooxx oxox xxoo
将连接池添加到空闲idlesConnections集合中,并唤醒阻塞的线程
AOF: 完整、慢、冗余量(日志文件重复操作比如set key 后delete 一直重复下去,那么有效数据可能就很少,但是日志的话就会记录这个轨迹,这时候aof会有重写机制,可以整理这些可以抵消的操作,这样重启时候就不会从头开始恢复)这就是重写的过程
AOP实现
填充keyGenerators
getObjectType
new
单线程
限流器 点击率 统计
最终
整合
填充xml文件资源
get k1 -> @ (ASCII码)
Mybatis初始化
判断是否需要清空一级缓存
selectMapspan style=\"font-size: inherit;\
bitmap
memcached
rdb:8点
整个value传递到前端
0 条评论
回复 删除
下一页