一、简介
MyBatis是一个轻量级的持久层框架,它可以帮我们省去繁杂的JDBC操作,包括获取数据库连接、设置参数、处理结果集、事务管理等等。通过XML配置或注解,即可实现简单的完成原本复杂的操作。
二、准备工作
1. 下载 jar 包,可以在 Maven Repository (在页面中间有个Artifact,旁边点击 Download JAR 即可)下载最新版本(mybatis-3.3.0)的 jar 包,然后添加到 classpath 中。
2. 如果使用的是 Maven 创建的项目,那么可以简单复制 Maven Repository 中的依赖配置即可,具体配置如下:
<!-- Maven中pom.xml的MyBatis依赖配置 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
3. 创建数据库以及数据表并插入示例数据,这里假设创建的是mybatis库和students表,我使用的是MySql数据库
-- 创建mybatis数据库
create database mybatis
-- 切换到mybatis数据库
use mybatis
-- 创建students表
create table students(id int auto_increment primary key, name varchar(50));
-- 插入示例数据
insert into students(name) values('kolbe');
三、MyBatis的入门实例
1. 新建MyBatis的核心配置文件(包括数据源信息、事务管理器、映射配置等),建议将该文件放置类源文件根目录下,我直接把它取名为mybatis.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>
<environments default="development">
<environment id="development">
<!-- 事务管理类型,JDBC表示直接使用JDBC的提交和回滚设置,依赖于数据源得到的连接来管理事务 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池POOLED表示使用数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- SQL代码和映射信息配置文件 -->
<mapper resource="cn/kolbe/mybatis/StudentMapper.xml" />
</mappers>
</configuration>
2. 新建一个名为Student的Java Bean类
package cn.kolbe.mybatis;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
3. 新建SQL语句映射文件StudentMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace必须是唯一的,建议用该文件所在的包路径全类名 -->
<mapper namespace="cn.kolbe.mybatis.StudentMapper">
<!-- select:表示这是一个查询操作 -->
<!-- id:用来配合namespace来定位这个操作,也就是在调用时,将采用cn.kolbe.mybatis.StudentMapper.getStudent -->
<!-- resultType:表示返回值类型,必须是全类名,MyBatis将自动为我们将查询结果封装成Student对象 -->
<!-- parameterType:表示传进来的参数的类型,因为传的是id主键,所以是int型 -->
<select id="getStudent" parameterType="int" resultType="cn.kolbe.mybatis.Student">
<!-- #{id}:表示占位符,也就是调用时必须为其传一个id参数进来,注意是#不是$ -->
select * from students where id = #{id}
</select>
</mapper>
4. 新建一个测试类StudentDao,来测试配置的效果
package cn.kolbe.mybatis;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
public class StudentDao {
@Test
public void testGetStudent() throws Exception {
// 1. 加载MyBatis的配置文件:mybatis.xml(它也加载关联的映射文件,也就是mappers结点下的映射文件)
InputStream in = this.getClass().getClassLoader().getResourceAsStream("mybatis.xml");
// 2. SqlSessionFactoryBuidler实例将通过输入流调用build方法来构建 SqlSession 工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
// 3. 通过工厂获取 SqlSession 实例,SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
SqlSession session = sqlSessionFactory.openSession();
// 4. 准备基本信息
// 4.1) statement: 用来定位映射文件(StudentMapper.xml)中的语句(通过namespace id + select id)
String statement = "cn.kolbe.mybatis.StudentMapper.getStudent";
// 4.2) paramter: 传进去的参数,也就是需要获取students表中主键值为1的记录
int parameter = 1;
// 5. SqlSession 实例来直接执行已映射的 SQL 语句,selectOne表示获取的是一条记录
Student student = session.selectOne(statement, parameter);
System.out.println(student);
// 6. 关闭输入流和SqlSession实例
in.close();
session.close();
}
}
5. 运行后可以看到控制台输出,表示配置成功了
Student [id=1, name=kolbe]
6. 该项目的包结构
7. 注:
SqlSessionFactoryBuilder:可以被创建销毁,一旦创建了SqlSessionFactory实例,该对象就不在需要了。
SqlSessionFactory:应该是一个应用共享一个工厂实例,而不是随意清除创建,建议在具体应用中采用单例模式来创建和获取该实例,保证该工厂实例的唯一性。
SqlSession:不是线程安全的,多个线程共享将有可能出错,另外用完该实例后要及时调用close()方法将其关闭。
SqlSessionFactory的建议获取方式:
package cn.kolbe.mybatis;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Factory {
private static SqlSessionFactory factory;
static {
factory = new SqlSessionFactoryBuilder().build(
Factory.class.getClassLoader().getResourceAsStream("mybatis.xml"));
}
public static SqlSessionFactory getFactory() {
return factory;
}
}
四、实用链接:
MyBatis官方文档 :http://mybatis.github.io/mybatis-3/zh/index.html 官方的入门文档,难得有中文版本
Maven仓库:http://mvnrepository.com/ 可以下载各种开源软件的各种版本的jar文件以及添加Maven中的包依赖
MyBatis API : http://mybatis.github.io/mybatis-3/apidocs/reference/packages.html