- MyBatis框架简介
-
- MyBatis是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改SQL。
- MyBatis的前身是iBatis,本是Apache的一个开源项目,2010年这个项目由Apache Software Foundation迁移到了Google Code,并改名为MyBatis。2013年迁移到GitHub。
- MyBatis官网:http://mybatis.org
- GitHub:https://github.com/mybatis
2.MyBatis框架的优缺点
-
- MyBatis框架的优点
- 与JDBC相比,减少了50%以上的代码量
- MyBatis是最简单的持久化框架,小巧并且简单易学
- MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用
- 提供XML标签,支持编写动态SQL语句
- 提供映射标签,支持对象与数据库的ORM字段关系映射
- MyBatis框架的缺点
- SQL语句的编写工作量较大,对开发人员编写SQL语句的功底有一定要求
- SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库
- MyBatis框架的优点
3.MyBatis的基本要素——核心对象
-
- 核心接口和类
- 每个MyBatis的应用程序都以一个SQLSessionFactory对象的实例为核心
- 首先获取SQLSessionFactoryBuilder对象,可以根据XML配置文件或Configuration类的实例构建该对象
- 然后获取SQLSessionFactory对象,该对象实例可以通过SQLSessionFactoryBuilder对象来获得
- 有了SQLSessionFactory对象之后,就可以进而获取SqlSession实例,SqlSession对象中完全包含以数据库为背景的所有执行SQL操作的方法,可以用该实例来直接执行已映射的SQL语句
- MyBatis核心配置文件(mybatis-config.xml)
- SQL映射文件(mapper.xml)
- 核心接口和类
-
- SQLSessionFactoryBuilder
-
- SQLSessionFactoryBuilder的作用 SQLSessionFactoryBuilder负责构建SQLSessionFactory,并且提供了多个build()方法的重载
- build(Reader reader, String environment, Properties properties)
- build(InputStream inputStream, String envionment, Properties properties)
- build(Configuration config)
- SqlSessionFactoryBuilder的生命周期和作用域
- SQLSessionFactoryBuilder的最大特点是:用过即丢。一旦创建了SQLSessionFactory对象之后,这个类就不再需要存在了,因此SQLSessionFactoryBuilder的最佳范围就是存在于方法体内,也就是局部变量而已
- SQLSessionFactoryBuilder的作用 SQLSessionFactoryBuilder负责构建SQLSessionFactory,并且提供了多个build()方法的重载
-
- SQLSessionFactory
-
- SQLSessionFactory简单的理解就是创建SqlSession实例的工厂,所有的MyBatis应用都是以SQLSessionFactory实例为中心,SQLSessionFactory的实例可以通过SQLSessionFactoryBuilder对象来获得
- SqlSessionFactory对象一旦创建,就会在整个应用运行过程中始终存在
-
- SqlSession
- SqlSession是用于执行持久化操作的对象,类似于JDBC中的Connection
- SqlSession对应着一次数据库会话,由于数据库会话不是永久的,因此SqlSession的生命周期也不应该是永久的
- SQLSessionFactoryBuilder
4.SQL映射文件
-
- SQL映射文件的几个顶级元素配置
-
- mapper:映射文件的根元素节点,只有一个属性namespace(命名空间),其作用如下:
- 用于区分不同的mapper,全局唯一
- 绑定DAO接口,即面向接口编程。当namespace绑定某一接口之后,可以不用写该接口的实现类,MyBatis会通过接口的完整限定名查找到对应的mapper配置来执行SQL语句。因此namespace的命名必须要跟接口同名
- cache:配置给定命名空间的缓存
- cache-ref:从其他命名空间引用缓存配置
- resultMap:用来描述数据库结果集和对象的对应关系
- sql:可以重用的SQL块,也可以被其他语句引用
- insert:映射插入语句
- update:映射更新语句
- delete:映射删除语句
- select:映射查询语句
- mapper:映射文件的根元素节点,只有一个属性namespace(命名空间),其作用如下:
- select
- 查询语句是 MyBatis 中最常用的元素之一,光能把数据存到数据库中价值并不大,如果还能重新取出来才有用,多数应用也都是查询比修改要频繁。对每个插入、更新或删除操作,通常对应多个查询操作。这是 MyBatis 的基本原则之一,也是将焦点和努力放到查询和结果映射的原因。简单查询的 select 元素是非常简单的。比如:
-
这个语句被称作 selectPerson,接受一个 int(或 Integer)类型的参数,并返回一个 HashMap 类型的对象,其中的键是列名,值便是结果行中的对应值。
注意参数符号:
-
这就告诉 MyBatis 创建一个预处理语句参数,通过 JDBC,这样的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中,就像这样:
-
当然,这需要很多单独的 JDBC 的代码来提取结果并将它们映射到对象实例中,这就是 MyBatis 节省你时间的地方。我们需要深入了解参数和结果映射,细节部分我们下面来了解。
select 元素有很多属性允许你配置,来决定每条语句的作用细节。
-
Select Attributes
-
insert, update 和 delete