记录一下学习总结,方便以后遗忘查看 复习使用
先介绍一些概念。。。。。
MyBatis是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询,存储过程和高级映射。几乎消除了所有JDBC代码和参数的手工设置以及结果集的检索。
ORM(Object/Ralational Mapping)即对象/关系映射。是一种数据持久化技术,它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。
MyBatis就是ORM的解决方案。
MyBatis的三个基本要素:
- 核心接口和类;
- MyBatis核心配置文件(mybatis-config.xml);
- SQL映射文件(mapper.xml);
核心接口和类:
每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心,
- 首先获取SqlSessionFactorBuilder对象,可以根据XML配置文件或Configuration类的实例构建该对象。
- 然后获取SqlSessionFactory对象,该对象实例可以通过SqlSessionFactoryBuilder对象来获得。
- 有了SqlSessionFactory对象之后,就可以进而获取SqlSession实例,SqlSession对象中完全包含以数据库为背景的所有执行SQL操作的方法,可以用该实例来直接执行已映射的SQL语句。
SqlSessionFactoryBuilder:
- SqlSessionFactoryBuilder负责构建SqlSessionFactory,并且提供了多个build()方法的重载;
- 配置信息可以以三种形式提供给SqlSessionFactoryBuilder的build()方法,InputStream(字节流)、Reader(字符流)、Configuration(类);
- SqlSessionFactoryBuilder的最大特点:用过即丢。一旦创建SqlSessionFactory对象之后,这个类就不需要存在了,因此SqlSessionFactoryBuilder的最佳范围就是存在于方法体内,也就是局部变量而已;
SqlSessionFactory:
- SqlSessionFactory简单的理解就是创建SqlSession的工厂。所有的MyBatis应用都是以SqlSessionFactory实例为核心,
- SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder对象来获得。有了它之后,就可以用SqlSessionFactory提供的openSession()方法来获取SqlSession的实例。
- openSession()方法的参数为boolean值时,若传入为true表示关闭事务控制,自动提交;false表示开始事务控制,若不传参,默认为true;
- SqlSessionFactory对象一旦创建,就会在整个应用运行过程中始终存在,没有理由去销毁或再创建它,并且再应用运行中也不建议多次创建SqlSessionFactory。因此SqlSessionFactory的最佳作用域时Application,即随着应用的生命周期一同存在,那么这种存在于整个应用运行期间,并且同时只有一个对象实例 的模式称之为单例模式;
SqlSession:
- SqlSession是用于执行持久化操作的对象,类似于JDBC中的Connection。它提供了面向数据库执行SQL命令所需的所有方法,可以通过SqlSession实例直接运行已映射的SQL语句。
- SqlSession对应着一次数据库会话。由于数据库会话不是永久的,因此SqlSession的生命周期也不应该是永久的,相反,再每一次访问数据库都需要创建它(这里并不是再说SqlSession只能执行一次SQL,SqlSession完全可以执行多次,但是若关闭了SqlSession,那么就需要重新创建它),创建SqlSession的地方只有一个,那就是SqlSessionFactory对象的openSession()方法
- 需要注意的是:每个线程都有自己的SqlSession实例,SqlSession实例不能被共享,也不是线程安全的。因此最佳的作用域范围是request作用域或者方法体作用域内。
- SqlSession的两种使用方式:
- 1.通过SqlSession实例来直接执行已映射的SQL语句
- 2.基于mapper接口方式操作数据
- SqlSession的两种使用方式:
MyBatis核心配置文件(mybatis-config.xml):
mybatis-config.xml文件元素:
configuration:配置文件的根元素节点
properties:可以配置在Java属性配置文件中
有两种使用方式:
1.通过resource属性从外部指定properties属性