java进阶学习1-mybatis


自定义mybatis持久层框架

1. jdbc直接连接数据库的缺点
	1. 数据库连接一次性使用,存在频繁创建和销毁
	2. 查询配置信息硬编码
		1. 数据库连接全局配置信息
		2. sql语句拼装
	3. 返回结果集为统一数据结构的集合,需要手动解析映射
2. jdbc连接框架化的思路
	1. 模块拆分,分别治理,模块之间通过接口低耦合
3. 自定义mybatis的具体步骤
	1. 使用端
		1. Resources类加载配置文件
		2. 编写pojo类
		3. SqlSessionFactoryBuilder类解析配置文件
			1. 封装Configuration
			2. 创建SqlSession的实现:DefaultSqlSession
		4. SqlSessionFactory接口负责获取SqlSession实例
		5. 编写执行器Executor接口及实现SimpleExecutor
	2. 框架端
		1. 实现SqlSessionFactoryBuilder
		2. 实现SqlSessionFactory
		3. 实现Executor
4. 自定义mybatis的一些问题
	1. sql语句statementId定位硬编码   --解决方式:mapper接口代理(本质还是statementId定位)
	2. 单独使用mybatis需要进行配置文件加载,sqlSession创建等模板代码的引入   --解决方式(待实现):spring代理(交由spring负责)

mybatis框架的使用

1. ORM半自动,Object/Relation Mapping
	1. ORM:自动处理数据库字段与实体字段的映射关系
	2. 半自动: 允许使用sql语法手动编写sql语句,处理复杂语句时更加清晰灵活,而不是像hibernate一样做了java的全自动封装
2. 配置文件的设置(xml):
	1. environments:数据源环境配置
	2. properties: 属性配置
	3. typeAliases: 自定义别名
	4. mappers: 
		1. resource: 使用相对于类路径的xml资源
		2. class: 使用mapper接口类路径,要求mapper接口名称和xml文件名称相同且在同一目录中(基于接口路径加载xml文件)
		3. package: 使用mapper接口包路径,要求同2
	5. 动态sql: 
		1. xml的动态标签
		2. 复杂的字段实体映射关系   --resultMap
			1. 一对一: association
			2. 一对多: collection
			3. 多对多: collection
	6. **注解sql**:
		1. mapper接口方法定义中使用注解进行sql编写,可以不用创建xml文件,
			1. 对于一些简单的条件查询,效率高,容易维护
			2. 对于复杂条件查询,关联查询等,用xml文件可以使用标签使sql更加清晰
			3. 注解开发或者全自动orm框架对于复杂的动态sql支持非常不友好,这可以从两方面避免
				1. 拆分sql,复杂sql拆分为简单sql
				2. 对于一些业务表单的关联查询,多字段排序等需求,使用xml的动态sql技术
	7. **缓存**
		1. 使用mybatis时涉及的缓存分为三类
			1. mybaits的一级缓存:
				1. 数据结构为hashmap,存在于sqlsession类中
				2. sqlsession级别,默认开启,
				3. 同一次会话内同一个查询走一级缓存
				4. 增删改会清除缓存(flushCache参数默认设置为true了),clearCache会清除缓存
			2. mybatis的二级缓存:**由于在单体应用中都无法避免脏数据的问题,所以一般不使用**
				1. 数据结构为hashmap
				2. namespace(mapper接口)级别的缓存,默认关闭,配置文件中添加cache标签并在mapper接口中添加启用注解来启用
				3. 如果开启了二级缓存,在sqlsession commit或close时会清除一级缓存,并将缓存数据存入二级缓存
				3. 会话间共享,需要提交后可见
				4. 同一个namespace中的任何接口进行增删改都会清除其中所有的二级缓存
				5. 关联查询使用二级缓存会导致脏数据的问题,因为其他namespace中的缓存刷新不会通知当前的namespace,导致当前namespace中的数据没有更新
	8. 插件
		1. 原理为AOP,在mybatis四大对象创建的时候进行了拦截和代理增强,四大对象
			1. 执行器Executor
			2. sql语法构建器statementHandler
			3. 参数处理器ParameterHandler
			4. 结果集处理器ResultSetHandler
		2. 使用:
			1. 实现Interceptor接口,并配置相应注解
			2. 在pluguns标签中进行添加,springboot配置方式为在pligins对象中添加

mybatis的源码解析

1. 功能架构分层
	1. api接口层:提供给使用者继续参数传递和接口调用以完成业务
	2. 数据处理曾:对入参进行处理,使处于可以和数据库进行直接交互的状态
	3. 基础支撑层:基础功能支持,包括连接管理,事务管理,配置解析,缓存处理等

2. 源码分析的方法
	1. github下载源代码,进行编译运行,可以debug和添加自己的注释

3. mybatis中的缓存cacheKey如何定位,如何保证唯一性
	1. cacheKey作为缓存map中的key,具有一般key必须处理的两大要素-重写equals和hashCode方法
	2. 重写方法使用了sql查询的参数,使相同的参数生成的cacheKey对象是*相等*的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值