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



<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 的执行流程将在这里实现

第一个 MyBatis 程序_第1张图片

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)]

执行流程图解

第一个 MyBatis 程序_第2张图片

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

你可能感兴趣的:(框架,Java,mybatis,java)