本文总结最原始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. 创建映射文件

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

Mybatis框架的搭建和基本使用的更多相关文章

  1. Spring+SpringMvc+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  2. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建四:配置springmvc

    在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建三:配置spring并测试的基础上 继续进行springmvc的配置 一:配置完善web.xml文件

  3. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建三:配置spring并测试

    这一部分的主要目的是 配置spring-service.xml  也就是配置spring  并测试service层 是否配置成功 用IntelliJ IDEA 开发Spring+SpringMVC+M ...

  4. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(2 配置spring-dao和测试)

    用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 搭建目录环境和依赖) 四:在\resources\spring 下面 ...

  5. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)

    引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一   的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...

  6. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一:建立MAVEN Web项目

    一:创建maven web项目er

  7. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee.com/niceyoo/jeenotes-ssm 2. 概述 在写代码之前我们先了解一下 ...

  8. MyBatis框架的搭建

    前言:MyBatis框架的前身是iBatis,本身是Apache的一个开源项目. MyBatis框架是一个半自动的orm映射框架,是实体类和sql语句之间建立映射关系,sql语句写在单独的配置文件中, ...

  9. Spring+SpringMvc+Mybatis框架集成搭建教程一(项目创建)

    一.框架搭建环境 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Idea 15.04 二 ...

  10. Spring+SpringMvc+Mybatis框架集成搭建教程四(项目部署及测试)

    在IDEA中将项目部署到本地Tomcat下进行运行并验证整合结果 (1).点击如下图所示的下拉按钮,弹出Edit Configurations...后点击该项. (2).跳出如下界面后,点击红框内的& ...

随机推荐

  1. 2021-04-26:整型数组arr长度为n(3 <= n <= 10^4),最初每个数字是<=200的正数且满足如下条件: 1. arr[0] <= arr[1]。2.arr[n-1] <= arr

    2021-04-26:整型数组arr长度为n(3 <= n <= 10^4),最初每个数字是<=200的正数且满足如下条件: 1. arr[0] <= arr[1].2.arr ...

  2. 2021-05-27:定义何为step sum?比如680,680+68+6=754,680的step sum叫754。

    2021-05-27:定义何为step sum?比如680,680+68+6=754,680的step sum叫754.给定一个整数num,判断它是不是某个数的step sum? 福大大 答案2021 ...

  3. 2021-07-21:一张扑克有3个属性,每种属性有3种值(A、B、C),比如“AAA“,第一个属性值A,第二个属性值A,第三个属性值A,比如“BCA“,第一个属性值B,第二个属性值C,第三个属性值A

    2021-07-21:一张扑克有3个属性,每种属性有3种值(A.B.C),比如"AAA",第一个属性值A,第二个属性值A,第三个属性值A,比如"BCA",第一个 ...

  4. 第十三届蓝桥杯c++b组国赛题解(还在持续更新中...)

    试题A:2022 解题思路: 有2022个物品,它们的编号分别是1到2022,它们的价值分别等于它们的编号.也就是说,有2022种物品,物品价值等于物品编号. 从2022个物品种选取10个物品,满足1 ...

  5. 基于Jmeter+ant+Jenkins+钉钉机器人群通知的接口自动化测试

    前言 搭建jmeter+ant+jenkins环境有些前提条件,那就是要先配置好java环境,本地java环境至少是JDK8及以上版本,最好是JAVA11或者JAVA17等较高的java环境,像jen ...

  6. Java的运算符和表达式(基础语法学习)

    一.运算符 ​ 在Java中用于程序计算的操作符统称为运算符,运算符分为如下几类 1.算数运算符 运算符 说明 + 加号两边是数值,可以运算,如果一边存在字符串,则当作连接符 a+b - 两个数相加, ...

  7. SQL生成序号的四种方式

    排名函数是SQL SERVER2005新增的函数.排名函数总共有四种,分别是:row_number.rank. dense_rank .ntile. row_number:顺序生成序号. rank:相 ...

  8. DosBox环境配置

    DosBox环境配置 DOSBox 是一个基于 x86 架构的 PC 的模拟器,它允许用户在现代操作系统上运行 DOS 程序.DOSBox 是自由软件,可以在 Windows.Linux ,macOS ...

  9. ESP8266-01S烧录固件

    ESP8266-01S 整理了一下ESP01S的烧录固件和烧录APP 链接:https://pan.baidu.com/s/1DApOQcWhqvk378ZklJSypA 提取码:1028 文件夹包含 ...

  10. Docker和Kubernetes与容器自动化扩展:最佳实践

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.3 相关技术比较 3. 实现步骤与流程 3.1 准备工作:环境配置与依赖安装 3.2 核心模块实现 3.3 集成 ...