1、Mybatis介绍及其环境搭建
1.1 数据持久化概念
数据持久化是将内存中的数据模型转换成存储模型,以及将存储模型转换为内存中的数据模型的同统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或者对象模型,存储模型可以是关系模型、xml、二进制流等。
1.2 Mybatis框架及orm
- Mybatis框架简介
Mybatis是一个开源的数据持久层框架。它内部封装了通过jdbc访问数据库的操作,支持普通的sql查询、存储过程和高级映射,几乎消除了所有的jdbc代码和参数的手工设置以及结果集的检索。Mybatis作为持久层框架,其主要的思想是将sql与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改sql。
Mybatis的前身是ibatis,本身是Apache的一个开源项目,2010年这个项目有Apache Software Foundation 迁移到了 Google Code,并改名为Mybatis。2013年迁移到Github。
Mybatis官网:http://mybatis.org
GitHub:https://github.com/mybatis
- 什么是orm
orm(Object/Relational Mapping)即对象/关系映射,是一种数据持久化技术。它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过javaBean对象去操作数据库表的数据。 - Mybatis是orm解决方案
基于ORM,Mybatis在对象模型和关系数据库的表直接建立了一座桥梁,通过Mybatis建立关系映射,以便捷的实现数据存储、查询、更改和删除等操作。
入门
- 纯java方式引入mybatis
要使用mybatis,只需要将mybatis-x.x.x.jar文件置于classpath中即可。 - 通过maven构建项目
如果使用Maven来构建项目,则需要在pom.xml文件中:添加dependency节点
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
从XML中创建SqlSessionFactory会话工厂
每个基于mybatis的应用都是以一个SqlSessionFactory的实例为中心的。
SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。而SqlSessionFacctoryBuilder则可以从XML配置文件总预先定制的Configuration的实例构建出SqlSessionFactory的实例。
从XML文件总构建SqlSessionFactory的实例非常简单,简历使用类路径下的资源文件进行配置。但是也可以使用任意的输入流实例,保存字符串形式的文件路径或者file://的url形式的文件路径来配置。mybatis包含一个名叫Resources的工具类,它包含一些实用方法,可以从classpath或者其他位置加装资源文件更加容易。
创建SqlSessionFactory的代码
String resource = "org/mybatis/example/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStr
eam);
SqlSessionFactory的生命周期和作用域
SqlSessionFactory对象一旦创建,就会在整个应用运行过程中始终存在。没有理由去销毁或再创建它,并且在应用中也不建议多次创建SqlSessionFactory。因此SqlSessionFactory的最佳作用域是Application,即随着应用的生命周期一同存在。那么这种“存在于整个应用运行期间,并且同时只存在一个对象实例“的模式就是所谓的单例模式(指在应用运行期间有且仅有一个实例)。
SqlSession的作用域
SqlSession是用于执行持久化操作的对象,类似JDBC中的Connection。它提供了面向数据库执行sql命令的所有方法,可以通过SqlSession实例直接运行已映射的Sql语句。
SqlSession对应着一次数据库会话。由于数据库会话不是永久的因此SqlSession的生命周期也不应该是永久的。
每个线程都有自己的SqlSession实例,SqlSession实例不能被共享,也不是线程安全的。因此最佳的做用域范围是request作用域或者方法体作用域内。
关闭SqlSession是非常重要的。必须需要确保SqlSession在Finally语句块中正常关闭。
XML配置文件中包含了对Mybatis系统的核心设置,包含获取数据库连接实例的数据源和决定事物作用域和控制方式的事物管理器。
XML配置文件:
Mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<!--事物管理-->
<transactionManager type="JDBC"/>
<!--指定数据库连接池-->
<dataSource type="POOLED">
<!--加载mysql驱动,需要导入mysql驱动jar包-->
<property name="driver" value="${driver}"/>
<!--数据库连接url-->
<property name="url" value="${url}"/>
<!--数据库用户名-->
<property name="username" value="${username}"/>
<!--数据库密码-->
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--指定 mapper接口的xml映射文件-->
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
- settiongs元素
settiongs元素的作用是设置一些非常重要的设置选项,用于设置和改变Mybatis运行中的行为。
设置项 | 描述 | 允许空值 |
---|---|---|
cacheEnabled | 对在此配置文件下的所有cache进行全局性开/关设置 | true | false |
lazyLoadingEnabled | 全局性设置懒加载。如果设置为false,则所有相关联的都会被初始化加载 | true | false |
autoMappingBehavior | Mybatis对于resultMap自动映射的匹配级别 | NONE| PARTLAL| FULL |
- typeAliases元素
typeAliases元素的作用是配置类型别名,通过与Mybatis的sql映射文件关联,减少输入多余的完整类名,以减缓操作。
<typeAliases>
</typeAliases>
mapper映射文件
命名空间(Namespaces)
namespace=“指定xml文件所有对应的mapper接口”
命名空间可以让xml绑定到接口
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--指定xml配置文件所对应的接口-->
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
命名解析:为减少输入量,没有把提升对所有的命名配置元素(包括语句,结果映射,缓存等)使用了如下的命名解析规则。
- 完全限定名(比如"com.mypackage.MyMapper.selectAllThiongs")将贝直接查找并且找到即用。
- 短名称(比如“selectAllThings”)如果全局唯一也可以作为一个单独的引用。如果不唯一,或者有两个或者两个以上的相同名称,那么使用时就会收到错误报告说短名称是不唯一的,这种情况下就必须使用完全限定名。