为什么学习框架技术
优势如下:
框架的概念
框架(Framework)是一个可重用的公共结构的半成品,它为我们构建新的应用程序提供了极大的便利。一方面提供了可以拿来就用的工具,更重要的是,提供了可重用的设计
主流框架的介绍
Struts 2框架
Struts2 以WebWork 优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的基于MVC设计模式实现的Web应用程序框架。它应用了几个新的框架特性;从逻辑中分离出横切关注的拦截器,减少或者消除配置文件,贯穿整个框架的强大表达式语言,支持可变更和可重用的基于MVC模式的标签API等,Struts 2 充分利用了从其他MVC框架学到的经验和教训,使整个框架更加清晰更加灵活
Hibernate框架
Hibernate是一个优秀的持久化框架,负责将对象数据保存到数据库中,或从数据库中读取数据并封装DAO对象的工作。Hibernate通过简单配置和编码即可替代JDBC烦琐的程序代码。Hibernate已经成为当前主流的数据库持久化框架,被广泛应用
Spring框架
String是一个开源框架,他的目标是使现有的JavaEE技术更容易使用和促进良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面。他的主要作用作为依赖注入容器和AOP实现存在还提供了声明式事务,对DAO层的支持等简化开发的功能。String还可以很方便地与StringMVC、Struts、MyBatis、Hibernate等框架集成,其中大名鼎鼎的SSM集成框架指的就是基于StringMVC+String+MyBatis的技术框架,使用这个集成框架将使我们的应用程序更加健壮、稳固、轻巧和优雅,这也是当前最流行的Java技术框架
SpringMVC
StringMVC是String框架提供的构建Web应用程序的全功能MVC模块,属于StringFrameWork的后续产品,已经融合在String Web Flow 里面,是结构最清晰的MVC Model2的实现,并且拥有高度呃可配置性,支持多种视图技术。还可以进行定制化开发,相当灵活
MaBatis框架
MyBatis是一个优秀的数据库持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。其封装性要低于Hibernate,性能优秀,并且小巧
数据持久化概念
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储类型可以是关系模型、XML、二进制流等
持久化是程序数据在瞬时状态和持久状态间转换的过程
MyBatis框架及ORM
1、MyBatis框架简介
M有Batis是一个开源的数据持久化框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中实现SQL的灵活配置
2、什么是ORM
ORM(Object/Relational Mapping) 即对象关系映射,是一种数据持久化技术。它会在对象模型和数据库之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据
特点:
3、MyBatis是ORM解决方案
基于ORM,MyBatis在对象模型和数据库的表之间建立了一座桥梁,通过MyBatis建立SQL关系的映射,以便捷地实现数据存储、查询、更改和删除等操作
MyBatis环境搭建
1、下载需要的jar文件
https://github.com/mybatis/mybatis-3/releases
MyBatis依赖包中文件说明
名称 |
说明 |
asm-3.3.1.jar |
操作Java字节码文件 |
cglib-2.2.2.jar |
多态集成Java类或实现接口 |
commons-logging-1.1.1.jar |
日志处理 |
javassist-3.17.1-GA.jar |
分析、编辑和创建Java字节码的类库 |
log4j-1.2.17.jar |
日志系统 |
slf4j-api-1.7.5.jar |
日志系统的封装,对外提供统一的API接口 |
2、部署jar文件
具体步骤如下:
(1)、将下载后的mybatis-3.2.2.jar、mysql-connector-java-5.1.0-bin.jar(MySQL数据库驱动文件)及log4j-1.2.17.jar(负责日志输出的jar文件)复制到建好的WEB-INF下的lib目录中,如下所示:
(2)、通过MyEclipse导入上述的包。在MyEclipse的工程上右击,选择”Build Path“→”Configure Build Path“ 选项
(3)、在弹出的窗体中单击“Add JARs”按钮
(4)、在弹出的“JAR Selection”窗体中选择lib下刚刚复制的jar文件
(5)、单击“OK”按钮,这时在工程中加入了所选的jar文件
3、创建MyBatis核心配置文件mybatis-config.xml
MyBatis核心配置文件主要作用于配置数据库连接和MyBatis运行时所需的各种特性,包含了设置和影响MyBatis行为的属性
mybatis-config.xml文件的几个常用元素的作用如下:
4、创建持久化类(POJO)和SQL映射文件
持久化类是指其实例状态需要被MyBatis持久化到数据库中的类。持久化类通常是业务实体类
5、创建测试类
MyBatis基本要素
MyBatis框架的优点
缺点:
适用场合:
MyBatis专注于SQL本身,是一个足够灵活的DAO层的解决方案。对性能的要求很高,或者需求变化较多的项目
MyBatis的基本要素——核心对象
三个基本要素:
(1)、每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心
(2)、首先获取SqlSessionFactoryBuilder对象,可以根据XML配置文件或Configuration类的实例构建对象
(3)、然后获取SqlSessionFactory对象,该对象实例可以通过SqlSessionFactoryBuilder对象来获得
(4)、有了SqlSessionFactory对象之后,就可以进而获取SqlSession实例,SqlSession对象中完全包含以数据库为背景的所有操作的方法,可以用该实例来直接执行已映射的SQL语句
SqlSessionFactoryBuilder
1、SqlSessionFactoryBuilder的作用
SqlSessionFactoryBuilder负责构建SqlSessionFactory,并且提供了多个build()方法的重载
由于方法的参数environment和properties都可以为空,那么去除重复的,真正的重载方法其实只有如下三种:
2、SqlSessionFactoryBuilder的生命周期和作用域
最大的特点是:用过即丢。一旦创建了SqlSessionFactory对象之后,这个类就不再需要存在了,因此SqlSessionFactoryBuilder的最佳范围就是存在于方法体内,也就是局部变量而已
SqkSessionFactory
1、SqlSessionFactory的作用
创建SqlSession实例工厂
2、SqlSessionFactory的声明周期和作用域
一旦创建就会在整个运行过程中始终存在。没有理由去销毁或再创建它,并且在应用运行中也不建议多次创建SqlSessionFactory
最佳作用域是Application
实现步骤如下:
(1)、创建工具类MyBatisUtil.java,在静态代码块中创建SqlSessionFactory对象
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
private static SqlSessionFactory factory;
static{//在静态代码块下,factory只会创建一下
try {
InputStream is=Resources.getResourceAsStream("configuration.xml");
factory=new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
}
(2)、创建SqlSession对象和关闭SqlSession
public static SqlSession createSqlSession(){
return factory.openSession(false);//true为自动提交事务
}
public static void closeSqlSession(SqlSession sqlSession){
if(null!=sqlSession){
sqlSession.close();
}
}
SqlSession
1、SqlSession的作用
SqlSession是用于创建持久化操作的对象,类似于JDBC中的Connection。它提供了面向数据库执行SQL命令所需的所有方法,可以通过SqlSession实例直接运行以映射的SQL语句
2、SqlSession的声明周期和作用域
对应着一次数据库会话,由于数据库会话不是永久的,因此SqlSession的声明周期也不应该是永久的
3、SqlSession的两种使用方式
(1)、通过SqlSession实例来直接执行以映射的SQL语句
(2)、基于mapper接口方式操作数据
mybatis-config.xml文件结构
1、properties元素
(1)、可通过外部指定的方式,即配置在典型的Java属性配置文件中,代码如下
(2)、直接配置为XML,并使用这些属性对配置项实现多态配置
2、settings
3、typeAliases元素
typeAliases元素的作用是配置类型别名,通过与MyBatis的SQL映射文件相关联,减少输入多余的完整类名
4、environments元素
表示配置MyBatis的多套运行环境,将SQL映射到不同的数据库上
子元素节点:environment,但是必须指定其中一个默认运行环境
通过environments配置运行环境,具体配置如下:
transactionManager-事务管理器
语法:
dataSource
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
有三种数据源类型
语法:
5、mappers元素
映射器,定义SQL语句
必须在配置引用mapper映射文件
(1)、使用类资源路径获取资源
(2)、使用URL获取资源
DTD文件的引入
1、DTD文件的位置
在mybatis-3.3.3.jar 里
路径:mybatis-3.4.2\mybatis-3.4.2\mybatis-3.4.2\org\apache\ibatis\builder\xml
2、新增XML Catalog