经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
Mybatis框架的搭建和基本使用
来源:cnblogs  作者:Xianuii  时间:2023/8/14 8:52:15  对本文有异议

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

1 依赖

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

  1. <dependency>
  2. <groupId>org.mybatis</groupId>
  3. <artifactId>mybatis</artifactId>
  4. <version>3.5.9</version>
  5. </dependency>

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

  1. <dependency>
  2. <groupId>mysql</groupId>
  3. <artifactId>mysql-connector-java</artifactId>
  4. <version>8.0.19</version>
  5. </dependency>

2 项目结构

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

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

  1. ├── java
  2. ├── org.example
  3. ├── Main.java # 启动类
  4. ├── entity # 存放数据库实体
  5. ├── mapper # 存放Mybatis的映射接口
  6. └── ... # 其他业务代码
  7. ├── resources
  8. ├── org.example.mapper 存放Mybatis的映射文件
  9. └── ...

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

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

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

  1. <build>
  2. <resources>
  3. <resource>
  4. <directory>src/main/java</directory>
  5. <includes>
  6. <include>**/*.xml</include>
  7. </includes>
  8. <filtering>true</filtering>
  9. </resource>
  10. </resources>
  11. </build>

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

3 数据准备

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

创建数据库:

  1. create database demo;

创建表:

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

4 基本使用

4.1 数据库实体

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

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

  1. public class Blog {
  2. private int id;
  3. private String name;
  4. private String author;
  5. }

4.2 映射接口

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

org.example.mapper.BlogMapper:

  1. public interface BlogMapper {
  2. int createBlog(Blog blog);
  3. int deleteBlog(@Param("id") Integer id);
  4. int updateBlog(Blog blog);
  5. Blog selectBlog(@Param("id") Integer id);
  6. }

4.3 映射文件

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

org/example/mapper/BlogMapper.xml:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="org.example.mapper.BlogMapper">
  6. <insert id="createBlog">
  7. insert into tb_blog (name, author) value (#{name}, #{author})
  8. </insert>
  9. <delete id="deleteBlog">
  10. delete from tb_blog where id =#{id}
  11. </delete>
  12. <update id="updateBlog">
  13. update tb_blog set name = #{name}, author = #{author} where id =#{id}
  14. </update>
  15. <select id="selectBlog" resultType="org.example.entity.Blog">
  16. select * from tb_blog where id = #{id}
  17. </select>
  18. </mapper>

4.4 使用Mybatis

使用Myatis主要有4个步骤:

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

4.4.1 创建Configuration

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

  1. Configuration configuration = new Configuration(environment);

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

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

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

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

  1. TransactionFactory transactionFactory = new JdbcTransactionFactory();

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

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

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

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

4.4.2 添加mapper

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

Configuration提供了三个方法:

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

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

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

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

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

4.4.3 创建SqlSessionFactory

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

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

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

4.4.4 操作数据库

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

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

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

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

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

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

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

5 总结

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

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

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

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

原文链接:https://www.cnblogs.com/Xianhuii/p/17625043.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号