初始MyBatis
1.1 框架技术
1.1.2 框架的概念
框架(Framework)是一个提供了可重用的公共结构的半成品。它为我们构建新的应用程序提供了极大的便利。一方面提供了可以拿来就用的工具,更重要的是,提供了可重用的设计。框架这个词最早出现在建筑领域,指的是在建造房屋前期的建筑骨架。对应用程序来说,“框架”就是应用程序的骨架,开发者可以在这个骨架上加上自己的东西,搭建符合自己需求的应用系统。框架中凝结着前人的经验和智慧。
Rickard Oberg(WebWork的作者和JBoss的创造人之一)说过:”框架的强大之处不是源自它能让你做什么,而是它不能让你做什么。”Rickard强调了框架另一个层面的含义:框架使混乱的东西变得结构化。框架在结构统一和创造力之间维持着一个合适的平衡。
1.1.3 主流框架的介绍
- Struts 2框架
Struts 2以WebWork优秀的设计思想为核心,吸收了Struts框架的部分优点,提供了一个更加整洁的基于MVC设计模式实现的Web应用程序框架。它引入了几个新的框架特性:从逻辑中分离出横切关注点的拦截器,减少或者消除配置文件,贯穿整个框架的强大表达式语言,支持可变更和可重用的基于MVC模式的标签API等。 - Hibernate框架
Hibernate是一个优秀的持久化框架,负责简化将对象数据保存到数据库中,或从数据库中读取数据并封装到对象的工作。Hibernate通过简单配置和编码即可替代JDBC烦琐的程序代码。Hibernate已经成为当前主流的数据库持久化框架,被广泛应用。 - Spring框架
Spring也是一个开源框架。它的目标是使现有的JavaEE技术更容易使用和促进良好的编程习惯。它是一个轻量级的框架,渗透了JavaEE技术的方方面面。它主要作为依赖注入容器和AOP实现存在,还提供了声明式实物、对DAO层的支持等简化开发的功能。Spring还开源很方便地与SpringMVC、Struts2、MyBatis、Hibernate等框架集成,其中大名鼎鼎的SSM集成框架指的就是基于SpringMVC+Spring+MyBatis的技术框架,使用这个集成框架将使我们的应用程序更加健壮、稳固、轻巧和优雅。 - SpringMVC框架
SpringMVC是Spring框架提供的构建Web应用程序的全功能MVC模块,属于SpringFramework的,已经融合在Spring Web Flow里面,是结构最清晰的MVC Model2的实现。并且拥有高度的可配置性,支持多种视图技术。还可以进行定制化开发,相当灵活。此外,Spring整合SpringMVC可以说是无缝集成,是一个高性能的架构模式。 - MyBatis框架
MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间映射关系,是一种半自动化的ORM实现。其封装性要低于Hibernate,性能优秀,并且小巧、简单易学,。
1.2 MyBatis介绍及其环境搭建
1.2.1 数据持久化概念
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储、数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。
1.2.2 MyBatis框架及ORM
- MyBatis框架简介
MyBatis是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改SQL。
MyBatis的前身是iBatis,本是Apache的开源项目,2010年这个项目由Apache Software Foundation迁移到了Google Code,并改名为MyBatis。2013年迁移到Github。
MyBatis官网:http://mybatis.org。
Github:http://github.com/mybatis。 - 什么是ORM
ORM(Object/Relational Mapping)即对象/关系映射,是一种数据持久化技术。它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。
1.2.3 MyBatis环境搭建
在MyEclipse中新建工程后,要使用MyBatis,需做以下准备工作。 - 下载jar包。
MyBatis的官方网站是http://mybatis.org,可以下载到最新Release版本的MyBatis,其他Release版本的MyBatis的jar文件都可以从官方网站下载得到。
1)Mybatis-3.2.2.zip(MyBatis的jar文件)
Mybatis-3.2.2.zip解压后的目录结构。
名称 | 说明 |
---|---|
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接口 |
slf4j-log4j12-1.7.5.jar | slf4j对log4j的相应驱动,完成slf4j绑定log4j |
- mybatis-3-mybatis-3.2.2.zip(MyBatis源码包)
mybatis-3-mybatis-3.2.2.zip是MyBatis的源码包,里面是MyBatis的所有源代码。
- 部署jar包。
- 编写MySatis核心配置文件。
- 创建实体类。
- 创建DAO接口
- 创建SQL映射文件
- 编写测试类。
- 下载需要的jar文件
MyBatis的官方网站是http://mybatis.org,可以下载到最新Release版本的MyBatis,其他Release版本的MyBatis的jar文件都可以从官方网站下载得到。
- Mybatis-3.2.2.zip(MyBatis的jar文件)
Mybatis-3.2.2.zip解压后的目录结构。
名称 说明
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接口
slf4j-log4j12-1.7.5.jar slf4j对log4j的相应驱动,完成slf4j绑定log4j - mybatis-3-mybatis-3.2.2.zip(MyBatis源码包)
mybatis-3-mybatis-3.2.2.zip是MyBatis的源码包,里面是MyBatis的所有源代码。
- 部署 jar文件
具体的操作步骤如下。
(1) 将下载后的mybatis-3.2.2.jar、MySQL-connector-java-5.1.0-bin.jar(MySQL数据库驱动jar文件)及log4j-1.2.17.jar(负责日志输出的jar文件)复制到建好的工程WEB-INF下的lib目录中。
(2) 通过MyEclipse导入上述的包。在MyEclipse中的工程上右击,选择“Build Path”→“ConfigureBuild Path”选项,如图1.9所示。
图1.9 通过MyEclipse选择“Configure Build Path”选项
在弹出的窗体中单击“Add JARs”按钮,如图1.10所示。
图1.10 单击“Add JARs”按钮
在弹出的“JAR Selection”窗体中选择lib下刚刚复制的jar文件,如图1.11所示。
图1.11 选择刚复制的jar文件
单击“OK”按钮,这时在工程中加入了所选的jar文件,如图1.12所示。
图1.12 导入支持的jar文件
为了更方便地学习MyBatis,可以在MyEclipse环境中设置当前工程中mybatis-3.2.2.jar的源码。选中mybatis-3.2.2.jar,右击,弹出的快捷菜单如图1.13所示。
图1.13 右击mybatis-3.2.2.jar弹出的快捷菜单
选择“Properties”选项,进入属性界面,选中“Java Source Attachment”选项,如图1.14所示。
图1.14 查看mybatis-3.2.2.jar的属性
单击“External Folder”按钮,找到源码所在的目录,即\mybatis-3-mybatis-3.2.2,如图1.15所示,选中目录,单击“确定”按钮即可。需要注意的是:若源码为jar文件,则单击“External File”按钮,找到源码所在的目录,选中jar文件即可。 - 创建MyBatis核心配置文件configuration.xml
MyBatis核心配置文件主要用于配置数据库连接和MyBatis运行时所需的各种特性,包含了设置和影响MyBatis行为的属性。
为了方便管理以后各框架集成所需的配置文件,故需在项目工程下新建Source Folder类型的resources目录,并在此目录下添加MyBatis的核心配置文件,默认文件名为“configuration.xml”。但需要注意的是,为了方便在框架集成时更好地区分各个配置文件,我们一般将此文件名命名为“mybatis-config.sml”。该文件需要配置数据库连接信息和MyBatis的参数。
mybatis-config.xml文件的几个常用元素的作用如下。
(1) configuration:配置文件的根元素节点。
(2) properties:通过resource属性从外部指定properties属性文件(database.properties),该属性文件描述数据库连接的相关配置(数据库驱动、连接数据库的url、数据库用户名、数据库密码),位置也是在/resources目录下。
(3) settings:设置MyBatis运行中的一些行为,比如此处设置MyBatis的log日志实现为LOG4J,即使用log4j实现日志功能。
(4) environments: 表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,该元素节点下可以配置多个environment子元素节点,但是必须指定其中一个默认运行环境(通过default指定)。
(5) environment:配置MyBatis的一套运行环境,需指定运行环境ID、事务管理、数据源配置等相关信息。
(6) mappers:作用是告诉MyBatis去哪里找到SQL映射文件(该文件内容是开发者定义的映射SQL语句),整个项目中可以有1个或多个SQL映射文件。
(7) mapper:mappers的子元素节点,具体指定SQL映射文件的路径,其中resource属性的值表述了SQL映射文件的路径(类资源路径)。 - 创建持久化类(POJO)和SQL映射文件
持久化类是指其实例状态需要被MyBatis持久化到数据库中的类。在应用的设计中,持久化类通常对应需求中的业务实体。MyBatis一般采用POJO编程模型来实现持久化类,与POJO类配合完成持久化工作是MyBatis最常见的工作模式。
POJO(Plain Ordinary Java Object),从字面上来讲就是普通Java对象。POJO类可以简单地理解为符合JavaBase规范的实体列,它不需要继承和实现任何特殊的Java基类或者接口。JavaBean对象的状态保存在属性中,访问属性必须通过对应的getter和setter方法。
mapper:映射文件的根元素节点,只有一个属性namespace:
namespace:用于区分不同的mapper,全局唯一。
select:表示查询语句,是MyBatis最常用的元素之一,常用属性如下:
id属性:该命名空间下唯一标识符。
resultType属性:表示SQL语句返回值类型,此处通过SQL语句返回的是int数据类型。 - 创建测试类
在工程中加入JUnit4,创建测试类(UserMapperTest.java)进行功能测试,并在后台打印出用户的记录数,具体的实现步骤如下。
(1) 读取全局配置文件:mybatis-config-xml,如下代码所示:
String resource = “mybatis-config.xml”;
//获取mybatis-config.xml文件的输入流
InputStream is = Resources.getResourceAsStream(resource);
(2) 创建SqlSessionFactory对象,此对象可以完成对配置文件的读取,如下代码所示:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
(3) 创建SqlSessionFactory对象,此对象的作用是调用mapper文件进行数据操作,需要注意的是必须先把mapper文件引入到mybatis-config.xml中才能起效,
(4) 关闭SqlSession对象。