最近在学习MyBatis框架,我在这里记录一下学习MyBatis过程中的心得体会。
Mybatis是什么?使用它我们可以做什么?
MyBatis是一个开源的数据持久层框架,它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改SQL。Mybatis通过简单的XML或者注解进行配置和原始映射,将实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。
MyBatis官网:
Github:https://github.com/mybatis
MyBatis环境搭建
这里我们使用的编译程序以Eclipse为例。
下载jar包==>部署jar包==>编写configuration核心配置文件==>创建pojo实体类==>创建DAO接口==>创建SQL映射文件==>编写测试类
需要的jar包:
创建MyBatis核心配置文件configuration.xml
MyBatis核心配置文件主要用于配置数据库连接和MyBatis运行时所需的各种特性,包含了设置和影响MyBatis行为的属
MyBatis的核心接口和类
1)每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。
2)首先获取SqlSessionFactoryBuilder对象,可以根据XML配置文件或Configuration类的实例构建该对象。
3)然后获取SqlSessionFactory对象,该对象实例可以通过SqlSessionFactoryBuilder对象来获得。
4)使用SqlSessionFactory对象获取SqlSession实例。
SqlSessionFactoryBuilder
负责构建SqlSessionFactory,提供多个build()方法的重载,主要分为三个:
build(Reader reader,String environment,Properties properties)
build(InputStream inputStream,String environment,Properties properties)
build(Configuration config)
最大的特点是用过即丢,一旦创建了SqlSessionFactory对象之后,这个类就不再需要存在了,因此SqlSessionFactoryBuilder的最佳作用范围就是存在于方法体内,也就是局部变量。
SqlSessionFactory
相当于创建SqlSession实例的工厂,可以通过SqlSessionFactory提供的openSession()方法来获取SqlSession实例。
SqlSessionFactory对象一旦创建,就会在整个应用运行过程中始终存在,没有理由去销毁或再创建它,并且在应用运行中也不建议多次创建SqlSession。因此SqlSessionFactory的最佳作用与是Application,即随着应用的生命周期一同存在。这就是所谓的单例模式(指在应用运行期间有且仅有一个实例)。
这里把SqlSessionFactory的代码进行优化,最简单的实现方式就是放在静态代码块下:
这里使用了ThreadLocal管理Mybatis中SqlSession对象,保证SqlSession在线程(准确的说是一次请求)中的唯一性。
SqlSession
SqlSession是用于执行持久化操作的对象,类似于JDBC中的Connection。它提供了面向数据库执行SQL命令所需的所有方法,可以通过SqlSession实例直接运行已映射的SQL语句。
SqlSession对应着一次数据库回话。由于数据库会话不是永久的,因此SqlSession的生命周期也不应该是永久的。相反,在每次访问数据库时都需要创建它。
需要注意的是,每个线程都有自己的SqlSession实例,SqlSession实例不能被共享,也不是线程安全的。因此最佳的作用域范围是request作用域或者方法体作用域内。
SqlSession的两种使用方式
1)通过SqlSession实例来直接执行已映射的SQL语句。