第一章初始MyBatis
1.1框架技术
1.1.1为什么学习框架技术
适用PPT模板制作文档的优点如下:
(1)不用考虑布局.排版等问题,提高了效率
(2)可以专心于PPT内容,使演讲的质量更有保障
(3)新手也可以制作很专业的幻灯片演讲稿
使用架构建项目也是基于这样的考虑.当确定使用哪个技术的优势如下
(1)不用考虑公共问题,框架演已经帮我们做好了
(2)可以专心于业务逻辑,保证核心业务逻辑的开发质量
(3)结构统一,便于学习和维护
(4)框架中集成了前人的经验,可以帮助新手写出稳定.性能优良而且结构优美的高质量程序
1.1.2框架的概念
1.1.3主流框架的介绍
1.Struts2框架
Struts2以 WebWork优秀的设计理想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的基于MVC设计模式实现的Web应用程序框架.它引入了几个新的框架特效:从逻辑中分离出横切关注点的拦截器,减少或消除配置文件,贯穿整个框架的强大表达式语言,支持可变更和可重用的的基于MVC模式的标签API等.Struts2充分利用了从其他MVC框架学到的经验和教训,使整个框架更加清晰.更加灵活
2.Hibernate框架
Hibernate是一个优秀的持久化框架,负责简化将对象数据存到数据库中,或从数据库中读取数据并封装到对象的工作.Hibernate通过简单配置和编码即可代替JDBC烦琐的程序代码.Hibernate已经成为当前的数据库持久化框架,被广泛应用
3.Spring框架
Spring也是一个开源框架.它的目标是使现有的JavaEE技术更容易使用和促进良好的编程习惯.它是一个轻量级的框架,渗透了JavaEES技术的方方面面.它主要作为依赖注入容器和AOP实现存在,还提供了声明式事务,对DAO层的支持等简化开发的功能.SpringMVC+Spring+MyBatis的技术框架,使用这个集成将使我们的应用程序更加健壮.稳固,轻巧和优雅,这也是当前流行的Java技术框架,我们将在后续课程中学习
4.SpringMVC框架
SpringMVC是Spring框架提供的构建Web应用程序的全功能MVC模块,属于SpringFramework的后续产品,已经融合在Spring Web Flow里面.是结构最清晰的MVC Model2的实现.并且拥有高度的可配置性,支持多种视图技术.还可以进行定制化开发,相当灵活,此外,Spring整合SpringMVC可以说是无缝集成,是一个高性能的架构模式.现在越来越广泛地应用于互联网应用的开发中
5.MyBatis框架
MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现.其封装性要低于Hibernate,性能优秀,并且小巧.简单易学,现在应用也越来越广泛
1.2MyBatis介绍及其环境搭建
1.2.1数据持久化概念
1.2.2MyBatis框架及ORM
- MyBatis框架简介
MyBatis是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SOL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改SQL。
MyBatis的前身是iBatis, 本是Apache 的一-个开源项目,2010 年这个项目由Apache Software Foundation迁移到了Google Code, 并改名为MyBatis。2013 年迁移到Github。
MyBatis官网: http://mybatis.org。
Github: https://github.com/mybatis。
2.什么是ORM
ORM (Object/Relational Mapping)即对象/关系映射,是种数据持久化技术。 它在对象模型和
关系型数据库之间建立起对应关系,并且提供了种机制, 通过JavaBean 对象去操作数据库表中的数据,如图1.4所示。
在实际开发中,程序员使用面向对象的技术操作数据,而当存储数据时,使用的却是关系型数据库,这样造成了很多不便。ORM 在对象模型和关系数据库的表之间建立了一座桥梁。有了ORM,程序员就不需要再使用SQL语句操作数据库中的表使用API直接操作JavaBean对象就可以实现数据的存储、查询、更改和删除等操作。MyBatis 通过简单的XML或者注解进行配置和原始映射,将实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。
- MyBatis 是ORM解决方案
基于ORIM. MyBatis 在对象模型和关系数据库的表之间建立了一座桥梁,通过MyBatis建立SOL关系映射,以便捷地实现数据存储、查询、更改和删除等操作。
1.2.3MyBatis环境搭建
1下载需要的jar文件
2部署jar文件
3创建MyBatis核心配置文件configuration.xml
4创建持久化类(POJO)和SQL映射文件
5创建测试类
1.2.4MyBatis框架的优点及其适用场合
- MyBatis框架的优点
(1)与JDBC相比,减少了50%以上的代码量。
(2) MBatis是最简单的持久化框架,小巧并且简单易学。
(3)MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里。从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。
(4)提供XML标签,支持编写动态SQL语句。
(5)提供映射标签,支持对象与数据库的ORM字段关系映射。 - MyBatis 框架的缺点
(1) SQl语句的编写工作量较大.对开发人员编写SQL语句的功底有一定要求。
(2) SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。 - MyBatis框架适用场合
MyBais专注于SQL本身,是一个足够灵活的DAO层解决方案。对性能的要求很高,或者需求变化较多的项目,如互联网项目,那么MyBatis将是不错的选择.
1.2.5技能训练
1.3MyBatis的基本要素—核心对象
基于以上内容,我们对MyBatis有了初步认识,下面正式介绍一下MyBais的三个基本要素,
➢核心接口和类。
➢MyBatis 核心配置文件(mybatis- config xml)。
➢SQL 映射文件(mapper xml)。
有如
下面首先介绍MyBatis的核心接口和类,如图1.19所示。
(1)每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。
(2)首先获取SqlSessionFactoryBuilder对象,可以根据XML配置文件或Configuration类的实例构建该对象。
(3)然后获取SqlSessionFactory对象,该对象实例可以通过SqlSssionFactoryBuilder对象来获待,
(4)有了SqlSessionFactory 对象之后,就可以进而获取SqlSession实例,SqlSession对象中完全包含议数据库为背景的所有执行SaL操作的方法。可以用该实例来直接执行已映射的SQL语句。
1.3.1SqlSessionFactoryBuilder
-
SqlSessionFactoryBuilder 的作用
SqlSessionFactoryBuilder负责构建SqlSessionFactory,并且提供了多个build()方法的重载.如
由于方法参数nviroment和poperties都可以为nall.那么去除重复的,真正的重载方法其实只
有如下三种
➢build(Reader reader . String enionmnent, Porpeties poperties)
➢build(InpultSteten inuStrem. String enirommene, Properties popertis)
➢build(Configuration config)
通过上述分析,发现配置信息可以以三种形式提供给SslssionFactoryBuilder的build()方法,分别是InpuSteam(字节流)。Reader (字符流). Configuration (类), 由于字节流与字符流都属于读取配置文件的方式,所以从配置信息的来源就很容易想到构建一个SqlSessionFactory有两种方式:读取XML配置文件构造方式和编程构造方式。在本章中,我们采用读取XML配置文件的方式来构造SaISessionFactory. -
SqlSessionF actoryBuilder的生命周期和作用域
siSesionFactoryBuidler的最大特点是:用过即丢。-旦创建了SalSssionFactaoy 对象之后,这
个类就不再需要存在了,因此SsesioactoryBuildlere的最佳范围就是存在于方法体内.也就是局部变量而已。
1.3.2SqlSessionFactory
- SqlSessionFactory 的作用
SqlSessionFactory简单的理解就是创建SqlSession 实例的工厂。所有的MyBatis应用都是以
SqlSessionFactory实例为中心SqlSessionFactory 的实例可以通过SqlSessionF actoryBuilder对象来获得,有了它之后,顾名思义,就可以通过SqISessionFactory 提供的openSession()方法来获取SqlSession实例,如图1.21 所示,
- SqlSessionFactory 的生命周期和作用域
SqiSessionFactory对象一旦创建就会在整个应用运行过程中始终存在。没有理由去销毁或再创建它,并且在应用运行中也不建议多次创建SqlSessionFactory.因此SqlSessionFactory的最佳作用域是Application. 即随着应用的生命周期-同存在。那么这种” 存在于整个应用运行期间,并且同时 只存在一个对象实例”的模式就是所谓的单例模式(指在应用运行期间有且仅有一个实例).
下面就需要把获取SqlSessionFactory 的代码进行优化最简单的实现方式就是放在静态代码块下,以保证stisesioFactory对象只被创建一次实现步骤如下。
1.3.3SqlSession
-
SqlSession的作用
SqlSession是用于执行持久化操作的对象,类似于JDBC中的Conmection,它提供了面向数据库执行SQL命令所需的所有方法,可以通过SaSession实例直接运行已映射的SOL语句如图1.2所示。 -
SqlSession 的生命周期和作用域
正如其名,SqlSession 对应着一次数据库会话。 由于数据库会话不是永久的,因此SISession的生命周期也不应该是永久的。相反,在每次访问数据库时都需要创建它(注意:并不是说在SqlSession里只能执行一次SQL,是完全可以执行多次的,但是若关闭了SqISession, 那么就需要重新创建它)。创建SqISession 的地方只有-一个,那就是SqlSessionFactory对象的openSession()方法。需要注意的是:每个线程都有自己的SqlSession 实例,SqISession 实例不能被共享,也不是线程安全的。因此最佳的作用域范围是request作用域或者方法体作用域内。关闭SqISession是非常重要的。必须要确保SqISession在finally语句块中正常关闭。可以使用下面的标准方式来关闭:
Sq1Session session = sqlSessionFactory .openSession() ;
try {
// do work
} finally {
session.close();
}
3.SqlSession的两张使用方式
(1)通过SqlSession实例来直接执行已映射的SQL语句
(2)基于mapper接口方式操作数据。修改上一个演示示例,步骤如下。
创建绑定映射语句的接口UserMapper java, 并提供接口方法getUserList().如示例8所示。
该接口称为映射器。注意:接口的方法必须与SQL映射文件中SQL语句的ID 一一对应。
1.3.4技能训练
1.4MyBatis的基本要素—核心配置文件
1.4.1myBatis-config.xml文件结构
mybatis config xml文件需配置一些基本元素需要注意的是,该配置文件的元素节点是有先后
顺序的,其层次结构如图1.23所示。
从图1.23中可看出configuration元素是整个XML配置文件的根节点其角色就相当于是MyBais的总管,MyBatis 所有的配置信息都会存放在它里面。MyBatis 还提供了设置这些配置信息的方法。
1.properties元素
2. settings 元素
settings元素的作用是设置一些非常重要的设置选项,用于设置和改变MyBatis 运行中的行为。
常用配置如表1-7所示。
3.typeAliases元素
4.environments元素
5.mappers元素
1.4.2DTD文件的引入
1.DTD文件的位置
者两个DTD文件在mybatis-3.2.2.jar里,已压缩包形式介意打开,DTD文件路径为mybatis-3.2.2\org\apache\ibatis\builder\xml
2.新增XML Catalog