初识MyBatis
前言
MyBatis是一个优秀数据持久层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设置。
一、MyBatis介绍及环境搭建
1) 数据持久化概念
数据持久化:将内存中数据模型转换为存储模型,以及存储模型转换为内存中的数据模型的统称。
2) MyBatis框架及ORM
MyBatis作为持久化层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中。
ORM(Object/Relational Mapping)对象/关系映射,是一种数据持久化技术。他在对象模型和关系型数据之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库表中的数据。MyBatis是ORM解决方案基于ORM,MyBatis在对象模型和关系数据库的表之间建立一座桥梁,通过MyBatis建立SQL关系映射,便捷实现数据存储、查询、更改、删除等操作。
3) MyBatis环境搭建
- 下载jar包
- 部署jar包
- 新建Source Folder类型的resources目录
- 编写MyBatis核心配置文件mybatis-config.xml
mybaits-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> 配置文件的根元素节点
<!--引用database.properties 文件 指定properties属性文件-->
<properties resource="data.properties"/>
<!--配置mybatis的log实现为LOG4J 设置实现日志log4j功能-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!--设置resultMap默认级别:autoMappingBehavior属性NONE:只映射xml配置文件的列和属性 PARTIAL:只要列名和属性名相同,不管是否配置,都自动映射 FULL:在PARTIAL的基础上,开启自动映射-->
<settings>
<setting name="autoMappingBehavior" value="NONE"/>
</settings>
<!--给定类型指定别名-->
<typeAliases type="类型的路径" alias="别名"></typeAliases>
<!-- 配置mybatis多套运行环境 多套运行环境映射多个不同的数据库可以配置多个environment-->
<environments default="development">
<!--配置MyBatis的一套运行环境,-->
<environment id="development">
<!--配置事务 管理,JDBC事务管理-->
<transactionManager type="JDBC"></transactionManager>
<!--POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源-->
<!--type="POOLED"-连接池方式 ="UNPOOLED"-非连接池方式 ="JNDI"-->
<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>
<!--指定SQL映射文件-->
<mapper resource=""/>
</mappers>
</configuration>
创建实体类
创建SQL映射文件 mapper.xml
创建xml文件实现映射
<?xml vesion="1.0" encoding="utf-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <mapper namespace="cn.smbms.dao.user.UserMapper"> 映射文件的根元素节点,只有一个属性namespace <!--查看用户记录数--> <select id="count" resultType="int"> 查询语句,id属性:该命名空间下唯一标识符,resultType:SQL语句返回值 select count(1) as count from smbms </select> </mapper>
4) 1.4.MyBatis框架的优缺点
优点:
1.与JDBC相比,减少了50%以上代码量。 2.MyBatis简单,小巧易学。 3.MyBatis灵活,不会对应用程序或数据库强加影响。 4.提供XML标签,支持编写动态SQL语句。 5.提供映射标签,支持对象与数据库的ORM字段关系映射。
缺点:
1.SQL语句编写工作量大。 2.SQL语句依赖于数据库,导致数据库移植行差。
MyBatis的基本要素——核心对象
1) 核心接口和类
SqlSessionFactoryBuilder - build() - SqlSessionFactory - openSession() - SqlSession
每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心
首先获取SqlSessionFactoryBuilder对象,可以根据XML配置文件或Configuration类的实例构建该对象。然后获取SqlSessionFactory对象的实例能通过SqlSessionFactionBuilder对象来获得。有了SqlSessionFactory对象后,可以获得SqlSession实例,SqlSession对象包含所有执行SQL操作的方法。
MyBatis核心配置文件(mybatis-config.xml)
SQL映射文件(mapper.xml)
2) SqlSessionFactoryBuilder
作用:读取XML文件方式
负责构建SqlSessionFactory,提供多个build()方法重载。
分别是InputStream、Reader、Configuration三种读取方式
生命周期和作用域
用过即丢。一旦创建SqlSessionFactory对象后,这个类就不再需要存在了。
3) SqlSessionFactory 单例工厂 - 最好只存在一个工厂
作用:创建SqlSession实例的工厂。
提供多个openSession()方法的重载,openSession()方法参数为boolean值时,true表示关闭事务控制,自动提交。false开启事务提交,若不传入参数默认为true。
SqlSessionFactory创建就会在整个应用运行过程中始终存在。
4) SqlSession - 线程级别 - 不能共享
作用:执行持久化操作的对象。类似JDBC中Connection。
提供执行SQL命令所需的所有方法。如select、update、delete、
SqlSession对应一次数据库会话。生命周期不是永久的。可以执行多次SQL语句。若关闭了SqlSession。需要重新创建。