一、开发环境准备
(一)下载MyBatis
1.找到MyBatis官网
利用搜索引擎搜索MyBatis,看到www.mybatis.org/*****地址很像官网地址,我们点进去看看。
经过简单浏览,我们判断这就是官网地址,于是我们开始使用。
2. 找到下载页面
点击左侧“入门”链接,点击右侧“mybatis-x.x.x.jar”超链接
3.下载
在github页面中,我们可以看到mybatis的很多版本,排在第一个的应该就是最新版本,这里我们看到的是mybatis-3.4.6,点击如下链接进行下载。
4.下载结果解压,观察文件夹中文件
(1)解压
(2)查看文件夹内容
- pdf就是mybatis的使用手册
- mybatis-3.4.6.jar包就是我们主要使用的
- lib文件夹中就是项目中可能需要使用其他jar包
(二)搭建开发环境
我这里使用的IDE是MyEclipse(任何java IDE均可);
如果项目是Java Project,我们新建文件夹lib,把jar拷入lib中,然后build Path即可;
我们在Referenced Libraries中看到mybatis-x.x.x.jar包就是搭建成功
如果项目是Web Project;
我们在Web App Libraries中看到mybatis-x.x.x.jar包就是搭建成功
导入数据库连接驱动
我这里使用的mysql数据库,导入mysql-connector-java-5.1.7-bin.jar
,bulid Path。
二、Mybatis的使用
Mybatis 是java中一个访问数据库的框架。我们这里使用它来访问一个数据库信息。
一个框架中有很多内容,我们如何下手呢?
这里我们介绍一下基本流程
每个Mybatis应用都以SqlSessionFactory实例为中心,SqlSessionFactory可以通过SqlSessionFactoryBuilder获得;SqlSessionFactory用来创建SqlSession。
(一)首先创建SqlSessionFactory
SqlSessionFactory可以通过SqlSessionFactoryBuilder获得;
我们使SqlSessionFactoryBuilder读取XML信息来创建SqlSessionFactory的对象
这里我们给出一个配置文件。这里我们需要关注的是定义了数据源。
mybatis-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>
<!-- 定义数据库信息 -->
<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" />
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
</configuration>
如何通过xml信息创建SqlSessionFactory 呢?
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
这个时候我们可以尝试运行一下我们的程序,可以发现没有什么问题。
(二)创建SqlSession
见名知意,我们可以知道这个就是一个sql会话。在一次sql会话中,我们会进行一系列的sql操作。
public class MybatisTest {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(sqlSessionFactory);
// 定义sqlSession
SqlSession sqlSession = null;
try {
// 打开回话
sqlSession = sqlSessionFactory.openSession();
// sqlSession中进行sql操作
//
//
//
// sqlSession中进行sql操作
sqlSession.commit();
} catch (Exception ex) {
System.err.println(ex.getMessage());
sqlSession.rollback();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
运行这段代码,没出什么问题
实例
数据库mybatis下有个blog表:
程序中有个bean
public class Blog {
private Integer id;
private String title;
private String note;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
我们要把数据中表信息存放到我们bean中,使用jdbc,需要把ResultSet中的数据通过代码读取到POJO对象中。
Blog blog = new blog();
blog.setId(rs.getInt("id"));
blog.setTitle(rs.getString("title"));
blog.setNote(rs.getString("note"));
使用数据库框架即可把我们简化这个过程
(三)构建SQL Mapper
Mapper是什么呢?
我们知道数据库链接框架一个很重要的基本功能就是需要把数据库中的表信息和我们程序中实体类JavaBean对应上,把我们从繁琐的操作中解脱出来(这个繁琐的操作就是表信息转换为字段信息)。
这个mapper就是帮助我们解决这个事情的!!!
mapper就是映射器,映射器是由Java接口和xml文件组成。
1.定义映射器
(1)创建接口
import cn.edu.whu.mybatis.bean.Blog;
public interface BlogMapper {
public Blog selectBlog(int id);
}
(2)创建xml文件
很明显,这里的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">
<mapper namespace="cn.edu.whu.mybatis.mapper.BlogMapper">
<select id="selectBlog" resultType="cn.edu.whu.mybatis.bean.Blog">
select * from Blog where id = #{id}
</select>
</mapper>
这个xml里面有哪些信息呢?
- 定义了一个namespace;
cn.edu.whu.mybatis.mapper.BlogMapper这个名字和我们接口的全限定名一样 - 定义了一个sql;
id 和 接口中的方法名一致;
resultType定义我们返回数据类型
#{id}就是sql参数,和接口方法参数一致
这里我们的映射器就已经定义好了,如果sql列名和我们pojo的属性名对应一致,那么mybatis就会把查询结果自动映射到pojo的属性上,这就是自动映射!
2.使用映射器操作
我们可以用SqlSession获取这个Mapper
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
Blog selectBlog = mapper.selectBlog(1);
System.out.println(selectBlog.getTitle());
一个完整的查询代码如下
public class MybatisTest {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(sqlSessionFactory);
// 定义sqlSession
SqlSession sqlSession = null;
try {
// 打开回话
sqlSession = sqlSessionFactory.openSession();
System.out.println(sqlSession);
// sqlSession中进行sql操作
BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
Blog selectBlog = mapper.selectBlog(1);
System.out.println(selectBlog.getTitle());
// sqlSession中进行sql操作
sqlSession.commit();
} catch (Exception ex) {
System.err.println(ex.getMessage());
sqlSession.rollback();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
这个时候我们运行代码:
出现了Type interface cn.edu.whu.mybatis.mapper.BlogMapper is not known to the MapperRegistry.
这个意思就是说,我们MyBatis应用中MapperRegistry不知道有BlogMapper这个映射器。
很显然,我们需要在配置文件mybatis-config.xml
中告知mapper的信息。
<?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事务管理 -->
<transactionManager type="JDBC" />
<!-- 配置数据库信息 -->
<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="" />
</dataSource>
</environment>
</environments>
<!-- 定义映射器 -->
<mappers>
<mapper resource="cn/edu/whu/mybatis/mapper/BlogMapper.xml" />
</mappers>
</configuration>
添加mapper后再运行一遍:
成功读取数据库信息!!!
这是整个项目的结构图: