MyBatis

阅读更多

MyBatis简介

数据层的开发就提供了大量的第三方开发框架:EJB(Entity Bean)、JDO、Hibernate、IBatis、JPA、MyBatis、...

ORMapping 翻译中文的意思就是“对象-关系映射”它的核心在于:希望可以通过对象变化来实现数据库的操作,(对象操作 = 数据库操作)而对于ORMapping开发框架最初的实现就是JDBC

对于常见的ORMapping开发组件,有如下几个:

1、Hibernate(冬眠),保持了长达十年的数据层开发霸主地位,

* Hibernate设计理论来源是EJB技术,

* 开发的配置文件异常的复杂,而且异常的多。

* 提供了良好的缓存处理机制,包括一级缓存,二级缓存处理。

* 可以实现良好的数据库移植性开发;

面试题:HibernateMyBatis区别?

Hibernate的开发依然需要传统的JDBC那样编写数据层开发实现,而MyBatis不需要你去编写数据层,只要你有接口,自动实现数据层开发。

Hibernate适合于可移植性开发环境,MyBatis没有此项功能。

2、配置项目开发环境

MyBatis里面有一个综合配置文件(mybatis.cfg.xml),相当于进行MyBatis所有核心内容的设置操作,包括:

* 缓存配置

* 数据库的连接配置(如果基于Spring管理,可以免除此配置);

* 类别名配置;

* 相关的资源文件映射配置(一张表一个资源文件)。

Mybatis.cfg.xml关于”POOLED”>”说明,表示数据库的连接类型:

* POOLED”:表示所有的数据库的连接使用数据库连接池进行保存,性能是最好的;

* JNDI”:直接使用服务器上配置高的数据库的连接池来惊醒数据库连接

* UNPOOLED”:不使用数据库连接池,每次需要都要创建新的连接池,性能很差。

关于jdbc/>的说明:有两种事物控制;

* 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 List selectList(String statement)   查询全部数据

Public List selectList(String statement,Object parameter)  查询全部数据,同时设置查询参数,

Public T selectOne(String statement)  查询全部对象

Public T selectOne(String statement,Object parameter) 查询一个对象,同时设置参数

在配置文件中有两种标记区别(News.xml文件“SQL”)

* ${}:表示该值不会变为“?”解析,而直接使用它的值

* #{}:表示该值最终解析的时候会变成“?”解析。

 

 

MyBatis缓存

缓存就是提升数据的查询性能。CPU所需要的数据通过内存取得,而内存的数据可以通过磁盘加载完成。

缓存分为两种:一级缓存(单个用户、SqlSession)、二级缓存(所有用户、SqlSessionFactory)。

当你使用了缓存的话,就意味着丧失了自动数据同步的功能支持。也就是说内存中的数据与数据表中的数据不可能一致。

一级缓存:

一级缓存指得是SqlSession一级的缓存处理,并且不管用户如何处理,一级缓存永远存在。

一级缓存永远存在,意味着你如果发出了10次的查询同一个ID数据的请求,那么整个JDBC也只会查询1次数据。

* 当查询同一条数据的时候,并且是SqlSession接口对象同时发出,最终数据库里面指查询了一次请求,而第二次并没有发出,引文它发现缓存中同样的数据存在。

* 当修改了第一次查询结果中的数据之后,随后第二次查询的结果里面的内容也会发生相应的改变,但是数据库只用并没有任何的变化。

 二级缓存:

二级缓存默认是没有开启的。

如果想要启动二级缓存:mybatis.cfg.xml

"cacheEnabled" value="true"/>

在需要使用到的文件上进行相应的配置

"FIFO" flushInterval="10000" readOnly="true" size="512"/> * “evication=“FIOF””表示该缓存操作使用的算法,有如下几种模式

|- 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,也就是说在配置文件里可以实现判断、循环等处理

 

 

 

你可能感兴趣的:(框架,Mybatis)