第一个 MyBatis 程序

第一个 MyBatis 程序

在初步对 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;

数据库表如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uoiJSZWQ-1594457311105)(D:\笔记\图片\02.第一个MyBatis程序\image-20200709001459049.png)]

建立 MyBatis 架构

这里采用 Maven 搭建项目

这里我们创建普通的 Maven 工程即可,在 pom.xml 中我们添加 MyBatis 和 MySql 驱动的依赖,这样 Maven 就会自动将我们需要的 Jar包导入项目当中

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
</dependencies>

接着我们创建 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>
    <!-- 配置别名 -->
    <typeAliases>
        <!-- package用于要指定配置别名的包,当指定之后,该包下所有实体类都会注册别名,且别名就是类名,不区分大小写 -->
        <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用于指定dao接口所在的包,当指定完成之后,就不需要在写resources或者是Class了 -->
        <package name="book.mapper" />
    </mappers>
</configuration>
  • typeAliases:配置别名,所有实体类将会注册别名,通过别名也可以调用对应的实体类
  • environments:即 MyBatis 连接的数据库环境。在这个节点下可配置多个 environment,在不同环境如开发、测试、生产等环境下,根据 environments 上 default 属性指定对应的 id,即可连接对应的数据库
  • mappers:定义 mapper.xml 文件的路径,mapper.xml 里存放着各个 Sql 语句

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查找书籍的两个语句

<?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="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>
  • namespace:绑定接口文件,从包路径开始
  • id:绑定接口文件中的方法
  • resultType:定义返回数据的类型
  • parameterType:定义接收数据的类型

项目的结构图如下所示

注:service 为不是实现类,而是主方法,MyBatis 的执行流程将在这里实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BdOFBbzZ-1594457311111)(D:\笔记\图片\02.第一个MyBatis程序\image-20200709005551919.png)]

MyBatis 的执行流程

BookService 的编写

  • 1、调用 getResourceAsStream() 方法读取 resources 目录下的 MyBatis-Config.xml
  • 2、通过 SqlSessionFactoryBuilder 工厂类构造器构建一个工厂 SqlSessionFactory、
  • 3、使用工厂创建 SqlSession 对象
  • 4、使用 SqlSession 创建 Dao 接口对象
  • 5、执行接口方法,调用 Mapper.xml
  • 6、执行事务的提交,并释放资源
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);
    }
}

运行结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n0zjjOtZ-1594457311113)(D:\笔记\图片\02.第一个MyBatis程序\image-20200709010044856.png)]

执行流程图解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gn5htvJJ-1594457311115)(D:\笔记\图片\02.第一个MyBatis程序\image-20200709104825819.png)]

接下来的文章,我们将逐一分析这几个流程,对每一个流程进行详细的解析,后续精彩,也请不要错过。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值