前言
首先我们来了说一下mybits这个框架吧。这是一个持久层的框架。之前叫做ibatis。所以,在它的代码中出现ibatis这个词的时候,不是写错了,它就是这样。
框架技术
为什么学习框架(框架的优势)
- 不用考虑公共问题,框架已帮我们做好
- 可以专心业务逻辑,保证核心腋业务逻辑的开发质量
- 结构统一,便于学习和和维护
- 框架中集成了前辈们的经验,可以帮新手写出稳定,性能优良而且结构优美的高质量程序。
框架的概念
框架:(Framework)提供可重用的公共结构的半成品,为我们构建新的应用程序提供极大的便利。
主流框架介绍
- Struts 2 框架
- Hibernate 框架
- Spring 框架
- SpringMVC 框架
- MyBatis框架
MyBatis介绍及其环境搭建
数据持久化概念
持久化是程序数据在瞬时状态和持久状态间转换的过程
MyBatis框架及ORM
-
MyBatis框架简介
首先,我们来看看mybatis是个什么东东,它有什么用?我们为什么要学习它。mybatis是一个持久层的框架。所谓的持久层,就是我们三层中的dao层。主要负责跟数据库进行交互。可以建立数据库表和系统中的对象的一对一映射关系。这种框架我们称之为orm框架。但是mybatis框架需要自己写sql语句,且不能像hibernate那样自动生成sql语句,并且建立实体类和数据库的映射。所以我们说它是不完全的orm框架。
-
什么是ORM
ORM(Object/Relational Mapping) 即对象/关系映射,是一数据持久化操作,对DAO方法进行SQL映射。
(1)编写程序的时候,以面向对象的方式处理数据
(2)保存数据的时候,却以关系型数据库的方式存储 -
那么,mybatis这个框架都可以做些什么呢?
这个其实也很简单。无非是对数据库的增删改查。这是每个持久层框架都应该支持的事情。sql语句可以干的事情,mybatis基本上都可以做。
使用MyBatis的开发步骤
- 下载mybatis-3.2.2.jar包并导入工程
- 编写MyBatis核心配置文件(configuration.xml)
- 创建实体类-POJO
- DAO层-SQL映射文件(mapper.xml)
- 创建测试类
(1) 读取核心配置文件mybatis-config.xml
(2) 创建SqlSessionFactory对象,读取配置文件
(3) 创建SqlSession对象
(4) 调用mapper文件进行数据操作
MyBatis环境搭建
MyBatis环境准备步骤
- 下载jar文件
- 部署jar文件
- 编写MyBatis核心配置文件
- 创建实体类
- 创建DAO接口
- 创建SQL映射文件
- 编写测试类
步骤详讲
1. 下载需要jar文件
- lib下存放编译依赖包,如图
- mybatis-3-mybatis-3.2.2(MyBatis源码包)
2. 部署jar文件
- 将下载的jar放入 lib 文件夹
3. 创建MyBatis核心配置文件configuration.xml
(1)MyBatis主要配置数据库连接和MyBatis运行时所需的各种特性。
(2)为了方便以后各框架集成所需的配置文件,许在项目 新减 Source Folder 类型的 resources 目录,并在此目录添加MyBatis核心配置配置文件,“configuration.xml”,大但为了更好的区分各个配置文件,一般将文件命名为“MyBatis-config.xml”
MyBatis-config.xml常用元素
(1)configuration:配置文件根元素节点
(2)properties:通过resource属性引用外部的properties属性文件 (database.properties),该文件存放连接数据库的基本配置。
(3)setting:设置MyBatis运行的行为,比如此处设置MyBatis的log日志实现为LOG4J,即使用log4j实现日志功能。
(4)environments:配置MyBatis多套运行环境,将sql映射到多个不同的数据库上,该元素节点下可以配置多个environment子节点,但是必须指定其中一个默认运行环境(通过的的fault指定)
(5)environment:配置MyBatis一套运行环境,指定运行环境的id,事务管理,数据源配置信息。
(6)mappers:作用告诉MyBatis去哪里找到SQL映射文件(该文件内容是开发者定义的映射SQL语句),整个项目可以有一个或者多个SQL映射文件
(7)mapper:mappers子元素节点,具体指定SQL映射文件路径
注意:
MyBatis-config.xml元素节点是有一定顺序,节点顺序若不安顺序排位那么xml文件会报错。
4. 创建持久化类(POJO)和SQL映射文件
注意:在MyBatis,不需要POJO类名与与数据库表名一致,应为MyBatis是POJO与SQL语句之间的映射机制,一般情况下,保证POJO对象的属性与数据库表的字段一致即可。
经验:SQL映射文件一般相对于POJO,所以一般采用POJO名称+Mapper的规则命名。当然mapper属于DAO层操作,应该放置dao包下。
mapper.xml元素
- mapper:映射文件根元素节点,只有一个属性namespace
(1)namespace:用于区分不同的mapper,全局唯一 - select 表示查询语句,是MyBatis最常用的元素之一
(1)id属性该命名空间下唯一的标识
(2)resultType属性:表示SQL语句返回值类型。
5. 创建测试类
MyBatis优缺点及适用场景
优点
- 与JDBC相比,减少了50%以上的代码量
- 最简单的持久化框架,小巧并简单易学
- SQL代码从程序代码中彻底分离,可重用
- 提供XML标签,支持编写动态SQL
- 提供映射标签,支持对象与数据库的ORM字段映射
缺点
- SQL语句编写工作量大,对开发人员有一定要求
- 数据库移植性差
适用于
- MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目
MyBatis的基本要素——核心对象
以上内容,我们队MyBatis有了初步认识,下面学习MyBatis三个基本要素
-
核心接口和类
(1)SqlSessionFactoryBuilder
(2)SqlSessionFactory
(3)SqlSession -
MyBatis核心配置文件(MyBatis-congif.xml)
-
SQL映射文件(mapper.xml)
首先介绍MyBatis核心接口和类
1. SqlSessionFactoryBuilder
(1)作用:负责构建SqlSessionFactory,并且提供多个build()
(2)声明周期作用域:最大的特点,用过即丢,其生命周期只存在于方法体内SQLSessionFactory对象之后,这个类就不在需要存在了,所以他的范围存在方法体内,也就是局部变量而已。
2. SqlSessionFactory
(1)作用:SQLSessionFactory简单理解为SqlSession实例工厂。(创建SqlSession实例)
SqlSession session = sqlSessionFactory.openSession(boolean autoCommit);
boolean autoCommit(参数)
true:关闭事务控制(默认,不传入参数)
false:开启事务控制
(2)作用域:Application。生命周期与应用的生命周期相同
3. SqlSession
(1)作用:执行持久化操作,类似于JDBC中的Connection提供执行Sql命令所需的所有方法,可以通过Sqlsession实例直接映射到SQL语句。
- 包含了执行SQL所需的所有方法
- 对应一次数据库会话,会话结束必须关闭
- 线程级别,不能共享
注意:
在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建
MyBatis的基本要素——核心配置文件
学习MyBatis核心对象后,学习他的核心配置文件(MyBatis-config.xml)
MyBatis-config.xml文件结构
-
配置properties元素的两种方式
通过外部指定的方式(database.properties),实现动态配置
直接配置为xml,实现动态配置 -
setting元素
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置
-
typeAliases元素
类型别名
仅仅只关联XML配置,简写冗长的Java类名
<typeAliases>
<typeAlias alias="User" type="cn.smbms.pojo.User"/>
</typeAliases>
<typeAliases>
<package name ="cn.smbms.pojo" /> 默认名称:指定包下JavaBean的非限定类名
</typeAliases>
- environments元素
表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)
注意:每个SqlSessionFactory实例只能选择一个运行环境
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="test">
……
</environment>
</environments>
- mappers元素
映射器,定义SQL映射语句
须在配置中引用mapper映射文件
方式一:使用类资源路径获取资源
<!-- 将mapper映射文件加入到系统核心配置文件中 -->
<mappers>
<mapper resource="cn/smbms/dao/user/UserMapper.xml"/>
</mappers>
方式二:使用URL获取资源
<mappers>
<mapper url="file:///E:/sqlmappers/UserMapper.xml"/>
<mapper url="file:///E:/sqlmappers/ProviderMapper.xml"/>
</mappers>