在初步对 MyBatis 有一个认识之后,我们来写 MyBatis 的第一个程序。
我们学习一个知识,肯定经历 宏观 —> 微观 这样一个过程,学习 MyBatis 也不例外。我们要先了解并熟悉 MyBatis 执行的具体流程,再根据每个流程进行详细的分析。这是我推荐的一种学习方式。
那么就开始我们今天的学习吧!
Mybatis 作为一个持久层框架,学习第一步就要建立一个测试数据库,这个数据库不需要特别复杂。下面的数据库是一个书籍的数据库,内含字段:书籍id、书籍名称、书籍作者
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
`id` int(8) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`author` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
数据库表如下图所示:
这里采用 Maven 搭建项目
这里我们创建普通的 Maven 工程即可,在 pom.xml 中我们添加 MyBatis 和 MySql 驱动的依赖,这样 Maven 就会自动将我们需要的 Jar包导入项目当中
<dependencies>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.2version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.6version>
dependency>
dependencies>
接着我们创建 MyBatis-Config.xml
<configuration>
<typeAliases>
<package name="book.pojo">package>
typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/javaweb"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
dataSource>
environment>
environments>
<mappers>
<package name="book.mapper" />
mappers>
configuration>
pojo 实体类
对应数据库表中的信息,我们建立起 Book 实体类
public class Book {
int id;
String name;
String author;
// get、set、toString方法省略
}
建立 BookMapper 接口
BookMapper 定义客户端调用的方法
public interface BookMapper {
List<Book> findAll();
}
BookMapper.xml
BookMapper.xml 是 MyBatis 中定义 Sql 的 xml 文件。同时,也做为 BookMapper 接口的实现类,是我们在日常开发中最经常接触到的一个文件。许多人在编写这个文件的过程中经常出错,因此我们需要多注意这个文件。
下面是一个查找所有书籍、根据Id查找书籍的两个语句
<mapper namespace="book.mapper.BookMapper">
<select id="findAll" resultType="book">
select * from book;
select>
<select id="findById" resultType="book" parameterType="int">
select * from book where id = #{id};
select>
mapper>
项目的结构图如下所示
注:service 为不是实现类,而是主方法,MyBatis 的执行流程将在这里实现
BookService 的编写
public class BookService {
private static InputStream in;
private static SqlSession session;
private static BookMapper bookMapper;
public static void main(String[] args) throws IOException {
in = Resources.getResourceAsStream("MyBatis-Config.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
session = factory.openSession();
bookMapper = session.getMapper(BookMapper.class);
List<Book> books = bookMapper.findAll();
Book bookId = bookMapper.findById(1);
session.commit();
session.close();
in.close();
for (Book book : books) {
System.out.println(book);
}
System.out.println(bookId);
}
}
运行结果
执行流程图解
接下来的文章,我们将逐一分析这几个流程,对每一个流程进行详细的解析,后续精彩,也请不要错过。