MyBatis介绍
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行了封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建Connection、创建Statement、手动设置参数、结果集检索等JDBC繁杂的过程代码了。
MyBatis通过xml或注解的方式将要执行的各种Statement(Statement、PreparedStatemnt、CallableStatement)配置起来,并通过Java对象和Statement中的SQL进行映射生成最终执行的SQL语句,最后由MyBatis框架执行SQL语句并将结果映射成Java对象并返回。
MyBatis框架的架构
知道了MyBatis框架是个什么东东之后,我们还需要从全局或者整体上对MyBatis框架有一个比较清晰的认识,MyBatis框架的架构如下图所示。
对于以上架构图,我们该怎样去理解呢?可以从以下几点去理解。
- SqlMapConfig.xml,此文件作为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息。mapper.xml文件即SQL映射文件,文件中配置了操作数据库的SQL语句,此文件需要在SqlMapConfig.xml文件中进行加载;
- 通过MyBatis环境等配置信息构造SqlSessionFactory(即会话工厂);
- 由会话工厂创建SqlSession(即会话),操作数据库需要通过SqlSession;
- MyBatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器;
- MappedStatement也是MyBatis一个底层封装对象,它包装了MyBatis配置信息以及SQL映射信息等。mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是MappedStatement对象的id;
- MappedStatement对象对SQL执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过该对象在执行SQL前将输入的Java对象映射至该SQL中,输入参数映射就是JDBC编程中对PreparedStatement对象设置参数;
- MappedStatement对象对SQL执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过该对象在执行SQL后将输出结果映射至Java对象中,输出结果映射过程相当于JDBC编程中对结果集的解析处理过程。
MyBatis入门
MyBatis下载
MyBatis框架的代码现在是由Github来管理的,地址是https://github.com/mybatis/mybatis-3/releases。大家可从该地址下载最新版本的MyBatis框架。温馨提示:本系列教程使用的是mybatis-3.2.7这个版本的MyBatis框架,该版本的MyBatis框架的目录结构如下图所示。
开发需求
首先,我们肯定是要明确开发需求的,即使用MyBatis框架能干啥?我们可以使用MyBatis框架来实现以下功能:
- 根据用户id查询用户信息;
- 根据用户名称模糊查询用户信息列表;
- 添加用户;
- 更新用户;
- 删除用户。
环境搭建
开发需求明确之后,我们就要搭建开发环境了。开发环境搭建的详细步骤如下:
- 【第一步】,使用Eclipse创建一个普通的Java工程,例如01-mybatis;
- 【第二步】,加入jar包。工程所需加入的jar包有MyBatis核心包、依赖包以及MySQL数据驱动包。
- 【第三步】,在classpath下创建一个日志记录文件(命名为log4j.properties就好)。我们可在01-mybatis工程下新建一个config源码包,并在该源码包下创建一个日志记录文件,即log4j.properties。
该日志记录文件的内容如下:
在这里,我们必须明确一点的就是,MyBatis框架默认使用log4j来输出日志信息。# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
- 【第四步】,在classpath下创建SqlMapConfig.xml文件。我们同样可以在config源码包下创建该文件。
一开始,我们不妨将该文件中的内容写成下面这样:
SqlMapConfig.xml是MyBatis框架的核心配置文件,以上文件的配置内容为数据源、事务管理。温馨提示:等后面MyBatis和Spring两个框架整合之后,environments的配置将被废除。<?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> <!-- 和spring整合后 environments配置将废除, default属性表示使用哪一个环境? --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理 --> <transactionManager type="JDBC" /> <!-- 数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="liayun" /> </dataSource> </environment> <environment id="test"> <!-- 使用jdbc事务管理 --> <transactionManager type="JDBC" /> <!-- 数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="liayun" /> </dataSource> </environment> </environments> </configuration>
- 【第五步】,创建一个po类,即User.java。我们可在src目录下新建一个名为com.meimeixia.mybatis.pojo的包,并在该包下创建一个po类(即User.java)。该po类将作为MyBatis进行SQL映射使用,po类通常与数据库表相对应。
public class User { private int id; private String username;// 用户姓名 private String sex;// 性别 private Date birthday;// 生日 private String address;// 地址 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex