1、ORM模型
在了解MyBatis之前,我们先了解一下什么是ORM模型,MyBatis就是一个ORM模型。
1.1、传统JDBC方式的缺点
a、工作量相对较大
b、必须对JDBC编程可能产生的异常进行捕获处理并正确关闭资源
因为有这样的缺点,导致编写简单的SQL都十分的复杂,所以出现了ORM模型,所有的ORM模型都是基于JDBC进行封装的,不同的ORM模型对JDBC封装的强度是不一样的。
1.2、ORM模型基本知识
定义:ORM即关系映射(Object Relational Mapping),简言之,数据库的表和简单Java对象(POJO)的映射关系模型。主要解决数据库和POJO对象的互相映射。
2、MyBatis
历史,MyBatis的前身是Apache的一个开元项目iBatis,2010年这个项目有Apache software foundation迁移到了Google code,并改名为MyBatis,2013年11月迁移到Github,目前MyBatis由Github维护。
2.1、MyBatis的基本构成
a、SqlSessionFactoryBuider(构造器):根据配置信息或代码来生成SqlSessionFactory(工厂接口)
b、SqlSessionFactory(单例模式,工厂):依靠工厂生成SqlSession(会话)。
c、SqlSession:既可以发送SQL去执行并返回结果,也可获取Mapper接口。
d、SQL Mapper:由Java接口和XML文件(或注解)构成,需要给出因对SQL和映射规则。负责发送SQL去执行,并返回结果。
2.2、各基本结构的创建
2.2.1、创建SqlSessionFactory
原理介绍:
SqlSessionFactory是MyBatis应用的核心,SqlSessionFactory是一个工厂接口不是实现类,其任务是创建SqlSession,它通过SqlSessionFactoryBuilder进行创建。SqlSessionFactoryBuilder创建SqlSessionFactory时依赖的一个类是Configuration,Configuration类全称是org.apache.ibatis.session.Configuration,Configuration的对象保存整个应用的基本配置,并且存在于整个MyBatis应用的声明周期中,方便重复使用。
SqlSessioinFactory有两个实现类,DefaultSqlSession和SqlSessionManager(没有使用)。
关系图如下
使用XML方式构建SqlSessionFactory
XML配置文件:
代码创建:
MyBatis的解析程序将mybatis-config.xml文件配置的信息解析到configuration类对象里,然后利用SqlSessionFactroyBuilder读取这个对象并创建SqlSssionFactory。
使用代码方式创建:
代码如下:
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
大部分情况下不建议使用代码方式构建,除非要加入自己的特性。如:解码数据源信息。
2.2.2、创建SqlSession
SqlSession接口的实现类有两个,分别是DefaultSqlSession和SqlSessionManager,SqlSession相当于JDBC的一个连接,用完后需要及时关闭。
SqlSession作用
a、获取映射器,让映射器通过名名空间和方法名找到对应的SQL,发送给数据库执行后返回结果
b、直接通过命名信息去执行SQL返回结果,这是iBatis留下的方法(不建议使用)
使用代码
2.2.3、创建映射器
组成:Java接口+XML文件(或注解)。
作用:
a、定义参数类型
b、描述缓存
c、描述SQL语句
d、定义查询结果和POJO映射关系
建议使用XML文件方式,优点有二:a、能够充分发挥其强大的功能。b、降低维护成本
代码实现:
a、Java接口
b、XML映射文件
构建POJO
POJO的构建时注意属性名与SQL中列名保持一致。
2.3、各组成部分的生命周期
SqlSessioinFactoryBuilder:只用来构建SqlSessionFactory,构建完就失效,方法局部。
SqlSessionFactory:单例模式,在MyBatis应用的整个声明周期中都有效。
SqlSession:请求数据库处理事务的过程中有效,线程不安全,存在于一个应用的请求和操作中。
Mapper:方法级别的,最大声明周期和SqlSession相同。
总结:
现在我们介绍了MyBatis的基本组成,以及各个组成部分的创建及其声明周期,我们可以搭建一个简单的MyBatis应用的框架,接下来我们将进一步探讨MyBatis的配置及Mapper.xml的配置。
来源:oschina
链接:https://my.oschina.net/u/3942106/blog/1934740