MyBatis框架
1. mybatis框架原理
持久层的框架
对原生态的jdbc程序进行总结
mybatis开发dao的两种方式
原始的方式:程序需要编写dao接口和dao的实现类
Mybatis的mapper接口:相当于dao接口代理开发
Mybatis的核心:输入映射 输出映射 动态SQL
2. 原生态jdbc程序中的问题总结
数据库连接频繁连接和开启,造成资源浪费,形象数据库性能.
解决方案:使用数据库连接池
SQL语句在java代码中,不利于系统维护.
3. mybatis的原理
1.Mybatis让程序的主要精力放在SQL上,通过mybatis提供的映射方式
自由灵活的生成满足需要的SQL语句.
2.Mybatis可以将输入的参数自动的进行输入映射,将查询结果集
灵活的映射出Java对象(输出映射).
4. 配置文件的主要内容
Mybatis-config.xml
配置数据源,事务等运行环境
Mapper.xml映射文件:命名规则xxxMapper.xml
5. 会话工厂:SqlSessionFactory
创建SqlSession(接口)操作数据库
6. resultType----输出的结果类型
ParameterType----参数类型
7. hibernate和mybatis的应用区别
1. Hibernate是一个标准的orm框架,对sql语句的优化比较困难
应用场景:适用于需求变化较少的中小型项目
比如后台管理系统
2. mybatis专注于SQL本身
mybatis的一级缓存默认打开,指的是session缓存
Mybatis的二级缓存(类必须序列化):
******resultMap
指定定义resultMap的id,如果这个resultMap在其他的的mapper文件
中,要加上namespace的名.
**********动态SQL
Mybatis的核心对SQL语句进行灵活的操作.通过表达式进行判断
对SQL进行灵活的组装,拼接.
*****动态SQL---SQL片段(可重用型,基于单表来定义SQL片段,不要包含 where)
将上面实现的动态SQL判断代码抽取出来,组成一个SQL片段,其他的
Statement可以引用这个SQL片段.
第一步:定义SQL片段
<sql></sql>
第二步:引用SQL片段
<where>
<include refid=”sql片段的id值”></include>
//如果指定的id不在本mapper文件中,需加上namespace
</where>
***************动态SQL,-----foreach
******trim的用法
******SQLSession接口的介绍
SQLSession:是一个面向用户的接口(提供操作数据库的方法),实现对象是
线程不安全的,建议SQLsession的应用场合在方法体内.
如果需要提交事务,需要执行SQLsession的commit方法
最后释放资源,关闭SQLsession.
****resultMap可以实现延迟加载,但是resultType无法实现延迟加载
ResultMap中的继承
****resultMap中的延迟加载,使用association和collection,具备延迟夹杂IDE 功能.
*****mybatis的缓存
提供一级缓存和二级缓存
一级缓存是SQLSession级别的缓存,彼此之间互不影响
二级缓存是mapper级别的缓存,多个SQLSession存储的数据可以放在
二级缓存中.
注意:如果SqlSession去执行commit操作(插入,更新,删除),可以清空sqlSession
中的一级缓存,可以避免脏读,一直得到最新的信息.
***分布式缓存
Mybatis无法实现分布式缓存,需要和其他的缓存框架进行整合
Mybatis提供了一个cache接口,如果要实现自己的缓存逻辑,
实现cache接口就行.
Mybatis默认实现cache接口的实现了是PerpetualCache