一、为什么需要框架技术
1.框架技术
是一个应用程序的半成品
提供可重用的公共结构
按一定规则组织的一组组件
2.分析优势
不用再考虑公共问题
专心在业务实现上
结构统一,易于学习、维护
新手也可写出好程序
二、MyBatis
1.半自动化的ORM实现
2.DAO层
3.动态SQL
4.小巧灵活、简单易学
1.持久化与ORM
01.ORM(Object Relational Mapping)
编写程序的时候,以面向对象的方式处理数据
保存数据的时候,却以关系型数据库的方式存储
02.ORM解决方案包含下面四个部分
在持久化对象上执行基本的增、删、改、查操作
对持久化对象提供一种查询语言或者API
对象关系映射工具
提供与事务对象交互、执行检查、延迟加载以及其他优化功能
2.MyBatis简介
*MyBatis前身是iBatis,本是Apache的一个开源的项目
*官方网站
http://mybatis.org
*ORM框架
实体类和SQL语句之间建立映射关系
*特点
基于SQL语法,简单易学
能了解底层封装过程
SQL语句封装在配置文件中,便于统一管理与维护,降低程序的耦合度
方便程序代码调试
3.搭建MyBatis开发环境
使用MyBatis的开发步骤
a.下载mybatis-3.2.2.jar包并导入工程
b.编写MyBatis核心配置文件(configuration.xml)
c.创建实体类-POJO
d.DAO层-SQL映射文件(mapper.xml)
e.创建测试类
读取核心配置文件mybatis-config.xml
创建SqlSessionFactory对象,读取配置文件
创建SqlSession对象
调用mapper文件进行数据操作
项目结构如图所示:
pom.xml
junit
junit
3.8.1
test
mysql
mysql-connector-java
5.1.31
org.mybatis
mybatis
3.2.2
log4j
log4j
1.2.17
junit
junit
RELEASE
junit
junit
RELEASE
org.slf4j
slf4j-api
1.7.4
org.slf4j
slf4j-log4j12
1.7.5
test
src/main/java
**/*.xml
database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/empdb
database.username=root
database.password=
department.xml
id,name
@Test
public void deptTest() throws IOException {
String resource="mybatis-config.xml";
InputStream stream= Resources.getResourceAsStream(resource);
//获得会话工厂
SqlSessionFactory sf=new SqlSessionFactoryBuilder().build(stream);
//会话
SqlSession session=sf.openSession();
//01.弱类型 通过命名空间唯一锁定要执行的sql
// List list = session.selectList("cn.happy.dao.getAllDept");
//02.强类型
DeptDao dao = session.getMapper(DeptDao.class);
List list = dao.getAllDept();
for (Department item:list){
System.out.println(item.getName());
}
session.close();
}
1、 mybatis配置
mybatis-config.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在mybatis-config.xml中加载。
2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂
3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的Java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
输出映射(返回的结果集可以有哪些类型)
1)基本类型
2)pojo类型
3)List类型
3.MyBatis框架优缺点
优点
与JDBC相比,减少了50%以上的代码量
最简单的持久化框架,小巧并简单易学
SQL代码从程序代码中彻底分离,可重用
提供XML标签,支持编写动态SQL
提供映射标签,支持对象与数据库的ORM字段映射
缺点
SQL语句编写工作量大,对开发人员有一定要求
数据库移植性差
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,适用于性能要求较高或者需求多变的互联网项目
4.MyBatis基本要素
01.MyBatis的核心对象 SqlSessionFactoryBuilder 、 SqlSessionFactory 、SqlSession
02.mybatis-config.xml 系统核心配置文件
03.mapper.xml SQL映射文件
核心对象:
1.SqlSessionFactoryBuilder
用过即丢,其生命周期只存在于方法体内
可重用其来创建多个 SqlSessionFactory 实例
负责构建SqlSessionFactory,并提供多个build方法的重载
2.SqlSessionFactory
SqlSessionFactory是每个MyBatis应用的核心
作用:创建SqlSession实例
作用域:Application
生命周期与应用的生命周期相同
单例
存在于整个应用运行时,并且同时只存在一个对象实例
3.SqlSession
包含了执行SQL所需的所有方法
对应一次数据库会话,会话结束必须关闭
线程级别,不能共享
注意:在SqlSession里可以执行多次SQL语句,但一旦关闭了SqlSession就需要重新创建
SqlSession的两种使用方式
01.通过SqlSession实例直接运行映射的SQL语句
02.基于Mapper接口方式操作数据
mybatis-config.xml 系统核心配置文件
a.配置properties元素的两种方式
1.通过外部指定的方式(database.properties),实现动态配置
2.直接配置为xml,实现动态配置
b.Setting元素
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置
c:typeAliases元素
类型别名
仅仅只关联XML配置,简写冗长的Java类名
//方式一
//方式二:
表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
子元素节点:environment,但是必须指定其中一个为默认运行环境(通过default指定)
transactionManager-事务管理器
dataSource
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
有三种内建的数据源类型
e:mappers元素
5.MyBatis与Hibernate的区别