MyBatis简介
数据层的开发就提供了大量的第三方开发框架:EJB(Entity Bean)、JDO、Hibernate、IBatis、JPA、MyBatis、...
ORMapping :翻译中文的意思就是“对象-关系映射”它的核心在于:希望可以通过对象变化来实现数据库的操作,(对象操作 = 数据库操作)而对于ORMapping开发框架最初的实现就是JDBC。
对于常见的ORMapping开发组件,有如下几个:
1、Hibernate(冬眠),保持了长达十年的数据层开发霸主地位,
* Hibernate设计理论来源是EJB技术,
* 开发的配置文件异常的复杂,而且异常的多。
* 提供了良好的缓存处理机制,包括一级缓存,二级缓存处理。
* 可以实现良好的数据库移植性开发;
面试题:Hibernate与MyBatis区别?
Hibernate的开发依然需要传统的JDBC那样编写数据层开发实现,而MyBatis不需要你去编写数据层,只要你有接口,自动实现数据层开发。
Hibernate适合于可移植性开发环境,MyBatis没有此项功能。
2、配置项目开发环境
在MyBatis里面有一个综合配置文件(mybatis.cfg.xml),相当于进行MyBatis所有核心内容的设置操作,包括:
* 缓存配置
* 数据库的连接配置(如果基于Spring管理,可以免除此配置);
* 类别名配置;
* 相关的资源文件映射配置(一张表一个资源文件)。
Mybatis.cfg.xml:关于“
* “POOLED”:表示所有的数据库的连接使用数据库连接池进行保存,性能是最好的;
* “JNDI”:直接使用服务器上配置高的数据库的连接池来惊醒数据库连接
* “UNPOOLED”:不使用数据库连接池,每次需要都要创建新的连接池,性能很差。
关于
* “jdbc”:此操作表示使用JDBC来实现数据库的事物控制,也是唯一可选的事物控制
* “MANAGER”:什么都不做,既不提交事务也不回滚事务,操作会有容器来完成。
4、利用MyBatis实现CRUD
所有数据表的CRUD控制都是有SqlSession接口负责完成的,
Public int insert(String statement) 直接到用配置文件中的增加操作,不传递任何参数 |
Public int insert(String statement,Object parameter) 直接调用配置文件中的增加操作,需要传递参数(都是VO类) |
Public int update(String statement) 数据修改处理 |
Public int update(String statement)数据修改处理,不传递参数 |
Public int update(String statement,Object parameter) 直接调用配置文件中的增加操作,(传递参数,都是VO类) |
Public int delete(String statement) 删除数据操作, |
Public int delete(String statement,Object parameter) 直接调用配置文件中的增加操作,(传递参数,都是VO类) |
所有数据查询处理方法都在SqlSession接口中定义了:
对于数据查询操作分为两种:
* 情况一:查询单个数据操作,这个时候数据可以以VO的形式返回;
* 情况二:查询全部数据,回返的是一组数据。
Public |
Public |
Public |
Public |
在配置文件中有两种标记区别(News.xml文件“SQL”)
* ${}:表示该值不会变为“?”解析,而直接使用它的值
* #{}:表示该值最终解析的时候会变成“?”解析。
MyBatis缓存
缓存就是提升数据的查询性能。CPU所需要的数据通过内存取得,而内存的数据可以通过磁盘加载完成。
缓存分为两种:一级缓存(单个用户、SqlSession)、二级缓存(所有用户、SqlSessionFactory)。
当你使用了缓存的话,就意味着丧失了自动数据同步的功能支持。也就是说内存中的数据与数据表中的数据不可能一致。
一级缓存:
一级缓存指得是SqlSession一级的缓存处理,并且不管用户如何处理,一级缓存永远存在。
一级缓存永远存在,意味着你如果发出了10次的查询同一个ID数据的请求,那么整个JDBC也只会查询1次数据。
* 当查询同一条数据的时候,并且是SqlSession接口对象同时发出,最终数据库里面指查询了一次请求,而第二次并没有发出,引文它发现缓存中同样的数据存在。
* 当修改了第一次查询结果中的数据之后,随后第二次查询的结果里面的内容也会发生相应的改变,但是数据库只用并没有任何的变化。
二级缓存:
二级缓存默认是没有开启的。
如果想要启动二级缓存:mybatis.cfg.xml
在需要使用到的文件上进行相应的配置
|- LRU(默认的):将最近不使用的对象进行清空;
|- FIFO:先进先出算法:默认会自动清除追早缓存的数据对象。
|- SOFT:软引用,让内存不足时,实行GC会立刻清除;
|- WEAK:弱应用,只要发生了GC,该缓存的对象就会被清空。
* “flushInterval="10000"”:缓存的刷新时间,单位为毫秒
* “readOnly="true"”:缓存永远做只读配置,千万不要做读、写配置;
* “size="512"”:占用的内存大小,默认是1024K。
如果想真正启动缓存:需要注意两点
* 第一个session必须关闭之后才会将内容写入到二级缓存之中,如果不关闭,缓存无法写入。
* 这个时候多个SqlSession对象共享一个缓存记录。
* 如果想进行缓存的实现,那么VO类一定要实现java.io.Serializable接口
* 缓存取消标记:useCache=“false”
3、动态SQL
在整个myBatis配置过程之中,所有要使用到的SQL语句都必须在相应的配置文件中进行定义。
在MyBatis中考虑到了开发中可能出现的各种情况,所以专门出现了动态SQL,也就是说在配置文件里可以实现判断、循环等处理