什么是数据持久化
数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。例如,文件的存储,数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型,XML,二进制流等。
MyBatis框架简介
Mybatis是一个开源的数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询,存储过程和高级映射,几乎消除了所有JDBC代码和参数的手工设置以及结果集的检索。
MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做能将SQL与程序代码分离,可以在不修改代码的情况下,直接在配置文件中修改SQL
什么是ORM
对象/关系映射(ORM)是一种数据持久化技术。它在对象模型和关系型数据库之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据表中的数据。
mybatis实质是ORM的解决方案
MyBatis配置文件部署方案
1.下载需要的jar文件
2.部署jar文件
(1).将下载的程序所需jar包复制到建好的工程WEB-INF下的lib目录中
(2).通过MyEclipse导入上述包 BuildPath-Configure Build Path
3.创建MyBatis核心配置文件mybatis-config.xml
MyBatis核心配置文件主要用于配置数据库连接和MyBatis运行时所需的各种特性,包含了设置和影响MyBatis行为的属性
在项目工程下新建Folder类型的resources目录,并在此目录下添加Mybatis的核心配置文件,该文件需要配置数据库连接信息和MyBatis的参数
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--引入database.properties文件-->
<properties resource="database.properties"/>
<!--配置mybatis的log实现LOG4J-->
<settings>
<setting name="logImpl" value="LOG4J">
</settings>
<!--配置mybatis多套运行环境-->
<environments default="development">
<environment id="development">
<!--配置事务管理,采用JDBC的事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--POOLED:mybatis 自带的数据源,JNDI:基于tomcat的数据源-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environments>
<!--将mapper文件加入配置文件中-->
<mappers>
<mapper resource="cn/smbms/dao/user/UserMapper.xml"/>
</mappers>
</configuration>
代码中几个常用元素作用如下:
(1):configuration:配置文件的根元素节点
(2):properties:通过resource属性从外部指定properties属性文件(database.properties),该属性文件描述数据库连接的相关配置(数据库驱动,连接数据库的url,数据库用户名,数据库密码),其位置也是在/resources目录下
(3)setting:设置Mybatis运行中的一些行为,比如设置MyBatis的log日志实现为LOG4J,即使用log4j实现日志功能
(4)environments:表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上,该元素节点下可以配置多个environment子元素节点,但是必须指定其中一个为默认运行环境(通过default指定)
(5):environment:配置MyBatis的一套运行环境,需指定运行环境ID,事务管理,数据源配置等相关信息
(6):mappers:作用是告诉MyBatis去哪里找到SQL映射文件(该文件内容是开发者定义的映射SQL语句),整个项目中可以有一个或多个SQL映射文件
4.创建持久化(POJO)和SQL映射文件
持久化类是指其实例状态需要被MyBatis持久化到数据库中的类。在应用的设计中,持久化类通常对应需求中的业务实体。MyBatis一般采用POJO编程模型来实现持久化类
POJO其实就是普通java对象,JavaBen对象的状态保存在属性中,访问属性必须通过对应的getter和setter方法
注意:在MyBatis中,不需要POJO类名与数据库表名一致,因为MyBatis是POJO与SQL语句之间的映射机制,一般情况下,保证POJO对象的属性与数据库表的字段名一致即可。
例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"
>
<mapper namespace="cn.smbms.dao.user.UserMapper">
<!--查询用户表记录数-->
<select id="count" resultType="int">
select count(1) as count from sumbms_user
</select>
</mapper>
mapper:映射文件的根元素节点,只有一个属性namespace(用于区分不同的mapper,全局唯一)
select:表示查询语句,是MyBatis最常用的元素之一,常用属性如下
id属性:该命名空间下的唯一标示符
resultType属性:表示SQL语句返回值类型,此处通过SQL语句返回的是int数据类型
5.创建测试类
(1):读取全局配置文件mybatis-config.xml
String resource = "mybatis-config.xml";
//获取mybatis-config.xml文件的输入流
InputStream is = Resources.getAsStream(resource);
(2):创建SqlSessionFactory对象,此对象可以完成对配置文件的读取
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
(3):创建SqlSession对象,此对象的作用是调用mapper文件进行数据操作,必须先把mapper文件引入到mybatis-config.xml中才能生效
int count = 0;
SqlSession sqlSession = null;
sqlSession = factory.openSession();
//MyBatis通过mapper文件的namespace和子元素的id来找到相应的SQL,从而执行查询操作
count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count");
logger.debug("UserMapperTest count--->"+count);
(4)关闭SqlSession对象
sqlSession.close();
MyBatis的优缺点
优点
(1)与JDBC相比,减少了50%以上的代码量
(2)MyBatis是最简单的持久化框架,小巧并且简单易学
(3):MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,既降低耦合度,又便于统一管理和优化,还可重用
(4):通过XML标签,支持编写动态SQL语句
(5):提供映射标签,支持对象与数据库的ORM字段关系映射
MyBatis的缺点
(1):SQL语句的编写工作量较大,对开发人员编写SQL语句的功底有一定要求
(2):SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库