MyBatis(一) 简介和基本原理

来源:互联网 发布:爱奇艺网络剧排行榜 编辑:程序博客网 时间:2024/06/05 19:09
MyBatis的体系结构

1、MyBatis的持久化解决方案是将用户从原始的JDBC访问中解放出来,用户只需要定义需要操作的SQL语句,

无需关注底层的JDBC操作,就可以面向对象的方式进行持久层操作。

2、底层数据库连接的获取、数据访问的实现、事物控制等无须用户关心,从而将应用层的JDBC/JTA API抽取出来。通过配置文件管理JDBC连接,让Mybatis解决持久化访问的实现。

3、 MyBatis中常用对象有 SqlSessionFactory 和 SqlSession。

备注:关于JDBC和JTA 的详情介绍


SqlSessionFactory
1. SqlSessionFactory是MyBatis的关键对象,它是单个数据库映射关系经过编译后的内存镜像。
2. 它的对象实例可以通过 SqlSessionFactoryBuilder对象来获得,而SqlSessionFactoryBuiller则可以从XML配置文件或一个预先定制的Configuration的实例构建出SqlSessionFactory的实例。
3.每一个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。
4.其也是线程安全的,SqlSessionFactory一旦被创建,应该在应用执行期间都存在。在运行期间不要重复创建多次,建议用单例模式。SqlSessionFactory是创建SqlSession的工厂。
常用方法: SqlSession openSession()。创建SqlSession对象。

SqlSession
1、它也是MyBatis的关键对象,是执行持久化操作的对象。类似于JDBC中的Connection。
2、它是应用程序与持久存储层之间执行交互操作的一个单线程对象,也是MyBatis执行持久化操作的关键对象。
3、SqlSession对象完全包含以数据库为背景的所有执行SQL操作的方法,它的底层封装了JDBC连接,可以用
     SqlSession实例来执行已映射的SQL语句。
4、每个线程都应该有自己的SqlSession实例。它不能被共享,也是线程不安全的,不能将它放到静态字段甚至实例        字段中。使用完记得关闭它,最好放在finally模块中关闭。
其方法有:
int insert(String statement);
int insert(String statement,Object parameter);
int update(String statement);
int update(String statement,Object parameter);
int delete(String statement);
int delete(String statement,Object parameter);
<T> T selectOne(String statement);
<T> T selectOne(String statement,Object parameter);
<E> List<E> selectList(String statement);
<E> List<E> selectList(String statement,Object parameter);
<E> List<E> selectList(String statement,Object parameter,RowBounds rowBounds);
<K,V> Map<K,V> selectMap(String statement,String mapKey);
<K,V> Map<K,V> selectMap(String statement,Object parameter,String mapKey);
<K,V> Map<K,V> selectMap(String statement,Object parameter,String mapKey,RowBounds rowBounds);
void select(String statement,ResultHandler handler);
void select(String statement,Object parameter,ResultHandler handler);
void select(String statement,Object parameter,RowBounds rowBounds,ResultHandler handler);
void commit();提交事物
void rollback();回滚
void close();关闭SqlSession对象。
Connection getConnection(); 获得JDBC的数据库连接对象。
<T> T getMapper(Class<T> type);

备注:
String statement:是配置文件中定义的操作数据库方法的id。比如:<insert..../>的id
Object parameter:是所需的参数通常是对象或者Map。
RowBounds rowBounds:用于分页,它的两个属性:offset指查询的当前页数;limit指当前页面显示的条数。
String mapKey:指返回数据的其中一个列名
Map<K,V>:执行SQL语句查询结果将会封装成一个Map集合返回,key就是参数MapKey传入的列名,
value是封装的对象。
ResultHandler handler:用来处理查询返回的复杂结果集,通常用于多表查询。


MyBatis初始化基本过程:
SqlSessionFactory根据传入的数据流生成Configuration对象,然后根据Configuration对象创建默认的SqlSessionFactory实例。
SqlSessionFactory是根据MyBatis的配置文件mybatis-config.xml创建的。
初始化步骤:
1.调用SqlSessionFactoryBuilder对象的build(inputStream)方法。
2.SqlSessionFactoryBuilder根据输流inputStream等信息创建XMLConfigBuilder对象。
3.SqlSessionFactoryBuilder调用XMLConfigBuilder对象的parse()方法。
4.XMLConfigBuilder对象解析XML配置文件返回Configuration对象。
5.SqlSessionFactoryBuilder根据Configuration对象创建一个SqlSessionFactory对象。
6.SqlSessionFactoryBuilder返回一个SqlSessionFactory给客户端,供客户端使用。


MyBatis配置文件结构
configuration 顶层配置
properties 属性
settings 设置
typeAliases 类型命名
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environment环境变量
transactionManager 事物管理器
dataSource 数据源
databaseIdProvider 数据库厂商标识
mappers 映射器


MyBatis映射文件常用元素:
select
insert
update
delete
sql:可被其他语句引用的可重用语句块
cache:给定命名空间的缓存配置。
cache-ref:其他命名空间缓存配置的引用。
resultMap:最复杂也是最强大的元素,用来描述如何从数据库结果集中加载对象。