Mybatis框架的搭建和基本使用

本文总结最原始Mybatis框架的搭建和最基本使用(不涉及Spring框架体系)。

1 依赖

首先,我们要引入Mybatis依赖:

<dependency>   <groupId>org.mybatis</groupId>   <artifactId>mybatis</artifactId>   <version>3.5.9</version> </dependency> 

Java操作数据库需要引入对应的数据库驱动依赖。本文使用MySQL数据库作为示例,引入如下依赖:

<dependency>    <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.19</version>  </dependency> 

2 项目结构

在使用Mybatis之前,我们先约定好项目结构,主要有两种方式。

第一种,Mybatis的映射接口和映射文件分开存放:

├── java │   ├── org.example │   │   ├── Main.java # 启动类 │   │   ├── entity # 存放数据库实体 │   │   ├── mapper # 存放Mybatis的映射接口 │   │   └── ... # 其他业务代码 ├── resources │   ├── org.example.mapper 存放Mybatis的映射文件 │   └── ... 

第二种,Mybatis映射接口和映射文件一起存放:

├── java │   ├── org.example │   │   ├── Main.java # 启动类 │   │   ├── entity # 存放数据库实体 │   │   ├── mapper # 存放Mybatis的映射接口和映射文件 │   │   └── ... # 其他业务代码 ├── resources │   └── ... 

对于第二种方式,由于Maven build项目时默认忽略java目录下的xml文件,因此需要在pom.xml中添加如下配置:

<build>    <resources>      <resource>        <directory>src/main/java</directory>         <includes>          <include>**/*.xml</include>        </includes>         <filtering>true</filtering>      </resource>    </resources>  </build> 

需要注意的是,无论是上述哪种方式,Mybatis的映射接口和映射文件必须存放在同一个包名下。

3 数据准备

为了更好的代码演示,我们需要先创建一些数据库演示数据。

创建数据库:

create database demo; 

创建表:

CREATE TABLE `tb_blog` (   `id` int NOT NULL AUTO_INCREMENT,   `name` varchar(255) DEFAULT NULL,   `author` varchar(255) DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; 

4 基本使用

4.1 数据库实体

我们需要根据数据库表结构,定义对应的Java类。

org.example.entity.Blog(省略setter、getter和toString方法):

public class Blog {     private int id;     private String name;     private String author; } 

4.2 映射接口

根据业务,我们需要定义数据库操作的对应方法。

org.example.mapper.BlogMapper:

public interface BlogMapper {     int createBlog(Blog blog);     int deleteBlog(@Param("id") Integer id);     int updateBlog(Blog blog);     Blog selectBlog(@Param("id") Integer id); } 

4.3 映射文件

根据映射接口,编写对应的映射文件。

org/example/mapper/BlogMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"         "https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.example.mapper.BlogMapper">     <insert id="createBlog">         insert into tb_blog (name, author) value (#{name}, #{author})     </insert>     <delete id="deleteBlog">         delete from tb_blog where id =#{id}     </delete>     <update id="updateBlog">         update tb_blog set name = #{name}, author = #{author} where id =#{id}     </update>     <select id="selectBlog" resultType="org.example.entity.Blog">         select * from tb_blog where id = #{id}     </select> </mapper> 

4.4 使用Mybatis

使用Myatis主要有4个步骤:

  1. 创建Configuration
  2. 添加mapper
  3. 创建SqlSessionFactory
  4. 操作数据库

4.4.1 创建Configuration

我们使用Configuration的构造函数进行创建,需要注入environment对象:

Configuration configuration = new Configuration(environment); 

environment对象表示数据库环境,它主要依赖数据源DataSource和事务工厂TransactionFactory,并且还需要为它设置一个id(用于区分不同的数据库环境):

Environment environment = new Environment("development", transactionFactory, dataSource); 

DataSource和TransactionFactory都只是接口,我们可以根据业务场景选择不同的实现类。

例如,TransactionFactory实现类我们可以使用Mybatis自带的JdbcTransactionFactory:

TransactionFactory transactionFactory = new JdbcTransactionFactory(); 

由于我们选用的是MySQL数据库,数据源可以直接选用MySQL数据库驱动自带的MysqlDataSource,并设置数据源基本参数(url、username和password等):

MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setUrl("jdbc:mysql://localhost:3306/demo?useUnicode=true&useSSL=false&characterEncoding=utf-8&createDatabaseIfNotExist=true&serverTimezone=Asia%2FShanghai"); dataSource.setUser("root"); dataSource.setPassword("root"); 

因此,整体创建Configuration的代码如下:

MysqlDataSource dataSource = new MysqlDataSource(); dataSource.setUrl("jdbc:mysql://localhost:3306/demo?useUnicode=true&useSSL=false&characterEncoding=utf-8&createDatabaseIfNotExist=true&serverTimezone=Asia%2FShanghai"); dataSource.setUser("root"); dataSource.setPassword("root"); TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); 

4.4.2 添加mapper

接下来,需要将映射接口和映射文件添加到Configuration对象中。

Configuration提供了三个方法:

// 将指定包路径下的所有Object子类作为映射接口,并加载对应映射文件 configuration.addMappers("packageName"); // 将指定包路径下的所有supperType的子类作为映射接口,并加载对应映射文件 configuration.addMappers("packageName", supperType); // 将指定type类作为映射接口,并加载对应映射文件 configuration.addMapper(type); 

本质上来说,这三种方法添加mapper的业务逻辑没有本质上区别,步骤如下:

  1. 扫描指定包下的.class文件
  2. 过滤出指定superType的子类
  3. 根据全限定类名查找.xml文件
  4. 解析XML节点,将映射信息保存到Configuration对象

为了方便,我们通常会直接扫描mapper包路径:

configuration.addMappers("org.example.mapper"); 

4.4.3 创建SqlSessionFactory

通过上述两个步骤,完成了Mybatis配置和映射信息的读取和保存。

为了方便从Configuration创建操作数据库的会话,Mybatis提供了SqlSessionFactory。它的创建方式也很简单:

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); 

4.4.4 操作数据库

操作数据库的第一步是要创建SqlSession(会话),由于SqlSession是数据库连接资源,使用完之后要及时关闭,避免资源泄露。因此,通常会使用如下方式:

try (SqlSession session = sqlSessionFactory.openSession(true)) {   // 操作数据库 } 

操作数据库实际上就是执行我们编写好的SQL,主要有两种方式。

第一种方式是,根据id执行对应的SQL:

Blog blog = session.selectOne("org.example.mapper.BlogMapper.selectBlog", 1); 

第二种方式是,获取映射接口,使用映射接口对应的方法执行对应的SQL:

BlogMapper blogMapper = session.getMapper(BlogMapper.class); Blog blog = blogMapper.selectBlog(1); 

5 总结

以上就是Mybatis框架的最基本使用了。

在实际项目开发中,我们只需要一次搭建Mybatis的启动流程,后续基本都是在跟映射接口和映射文件打交道:

  1. 创建数据库实体
  2. 创建映射接口
  3. 创建映射文件

其中,最核心的工作在于如何编写映射文件,可以查看官方文档:

发表评论

评论已关闭。

相关文章