目录
框架技术
持久化与ORM
MyBatis简介
搭建MyBatis开发环境
MyBatis框架优缺点
MyBatis基本要素
核心接口和类的结构
核心对象
SqlSessionFactoryBuilder
SqlSessionFactory
SqlSession
系统核心配置文件
配置properties元素
配置properties元素的两种方式
settings元素
typeAliases元素
environments元素
mappers元素
MyBatis使用步骤
框架技术
是一个应用程序的半成品
提供可重用的公共结构
按一定规则组织的一组组件
分析优势
不用再考虑公共问题
专心在业务实现上
结构统一,易于学习、维护
新手也可写出好程序
持久化是程序数据在瞬时状态和持久状态间转换的过程
什么是ORM
ORM即对象关系映射(Object-Relationl Mapping),它的作用是在关系型数据库和对象之间作一个映 射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作 对象一样操作它就可以了 。
ORM(Object Relational Mapping)
编写程序的时候,以面向对象的方式处理数据
保存数据的时候,却以关系型数据库的方式存储
ORM解决方案包含下面四个部分
在持久化对象上执行基本的增、删、改、查操作
对持久化对象提供一种查询语言或者API
对象关系映射工具
提供与事务对象交互、执行检查、延迟加载以及其他优化功能
MyBatis前身是iBatis,本是Apache的一个开源的项目
官方网站mybatis
ORM框架
实体类和SQL语句之间建立映射关系
特点:
基于SQL语法,简单易学
能了解底层封装过程
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
方便程序代码调试
使用MyBatis的开发步骤
1.下载mybatis-3.2.2.jar包并导入工程
2.编写MyBatis核心配置文件(configuration.xml)
3.创建实体类-POJO
4.DAO层-SQL映射文件(mapper.xml)
5.创建测试类
读取核心配置文件mybatis-config.xml
创建SqlSessionFactory对象,读取配置文件
创建SqlSession对象
调用mapper文件进行数据操作
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目
优点
与JDBC相比,减少了50%以上的代码量
最简单的持久化框架,小巧并简单易学
SQL代码从程序代码中彻底分离,可重用
提供XML标签,支持编写动态SQL
提供映射标签,支持对象与数据库的ORM字段映射
缺点
SQL语句编写工作量大,对开发人员有一定要求
数据库移植性差
MyBatis的核心对象
SqlSessionFactoryBuilder
SqlSessionFactory
SqlSession
mybatis-config.xml 系统核心配置文件
mapper.xml SQL映射文件
SqlSessionFactoryBuilder—bulid()—>SqlSessionFactory—openSession()—>SqlSession
用过即丢,其生命周期只存在于方法体内
可重用其来创建多个 SqlSessionFactory 实例
负责构建SqlSessionFactory,并提供多个build方法的重载
build(InputStream inputStream, String environment, Properties properties)
build(Reader reader, String environment, Properties properties)
build(Configuration config)
配置信息以三种形式提供给SqlSessionFactory的build方法:
InputStream (字节流)、Reader(字符流)、Configuration(类)
读取XML文件构造方式:
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSessionFactory是每个MyBatis应用的核心
作用:创建SqlSession实例
SqlSession session = sqlSessionFactory.openSession(boolean autoCommit);
true:关闭事务控制(默认)
false:开启事务控制
作用域:Application
生命周期与应用的生命周期相同
单例
存在于整个应用运行时,并且同时只存在一个对象实例
包含了执行SQL所需的所有方法
对应一次数据库会话,会话结束必须关闭
线程级别,不能共享
SqlSession session = sqlSessionFactory.openSession();
try {
// do work
} finally {
session.close();
}
关闭SqlSession非常重要,必须要确保在finally方法体中正常关闭
在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建
SqlSession的获取方式
String resource = "mybatis-config.xml";
InputStream is = Resources.getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;
SqlSession sqlSession = factory.openSession();
SqlSession的两种使用方式
通过SqlSession实例直接运行映射的SQL语句
基于Mapper接口方式操作数据
mybatis-config.xml 系统核心配置文件
configuration 配置
properties 可以配置在Java 属性配置文件中
settings 修改 MyBatis 在运行时的行为方式
typeAliases 为 Java 类型命名一个别名(简称)
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
mappers 映射器
1.通过外部指定的方式(database.properties),实现动态配置
配置properties的resource属性
......
2.直接配置为xml,实现动态配置
配置property的name和value
......
3.若两种方式同时都用了,那么哪种方式优先?
配置properties的resource指定
配置property的name和value
结论:resource属性值的优先级高于property子节点配置的值
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置
设置项 | 描述 | 允许值 | 默认值 |
---|---|---|---|
cacheEnabled | 对在此配置文件下的所有cache进行全局性开/关设置 | true | false | true |
lazyLoadingEnabled | 全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载 | true | false | true |
autoMappingBehavior | MyBatis对于resultMap自动映射匹配级别 | NONE |PARTIAL |FULL | PARTIAL |
……(9个) | ...... | ...... | ...... |
类型别名
仅仅只关联XML配置,简写冗长的Java类名
//默认名称:指定包下JavaBean的非限定类名
表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)
每个SqlSessionFactory实例只能选择一个运行环境
//默认的运行环境 ID
//默认的运行环境 ID
//事务管理器配置
//数据源配置
//运行环境 ID
……
transactionManager-事务管理器
dataSource
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
有三种内建的数据源类型
映射器,定义SQL映射语句
须在配置中引用mapper映射文件
方式一:使用类资源路径获取资源
方式二:使用URL获取资源
1.创建maven项目mybatis01
2.在pom文件中引入mybatis所需jar文件
org.mybatis
mybatis
3.2.8
mysql
mysql-connector-java
5.1.30
在resources下创建xml文件mybatis.xml
并在mybatis.pdf中找到头部信息
4.准备工作,在resources下放入jdbc.properties
5.创建com.hz.pojo和com.hz.dao,创建实体类Provider和ProviderDao接口
public interface ProviderDao {
/**
* 根据供应商ID 获得单个对象
* @param id
* @return
*/
public abstract Provider findProviderById(Long id);
}
6.编写mybatis.xml主配置文件 读取jdbc.properties,加载数据源
7.在resources下创建mappers文件夹,并创建ProviderMapper.xml文件 在pdf中复制mapper头部信息
注意:namespace为实现的接口
8.编写ProviderMapper.xml文件,重写接口中findProviderById方法
9.创建main方法进行测试
public class Test {
public static void main(String[] args) {
try {
//读取mybatis.xml主配置文件 获得字节流对象
InputStream is = Resources.getResourceAsStream("mybatis.xml");
//创建工厂 将字节流对象放入 获得 数据源工厂
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(is);
//获得数据源SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//获得providerdao实例
ProviderDao providerDao = sqlSession.getMapper(ProviderDao.class); //实现类
Provider provider = providerDao.findProviderById();
System.out.println(provider.toString());
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}