Mybatis框架之工厂模式(Factory Pattern)

 更新时间:2024年11月19日 10:03:53   作者:Katie。  
MyBatis中使用工厂模式来管理和创建SqlSession对象,从而简化数据库访问的配置和管理过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

MyBatis 中的工厂模式(Factory Pattern)主要体现在 SqlSessionFactory 和 SqlSession 的使用上。MyBatis 使用工厂模式来管理和创建 SqlSession 对象,从而简化数据库访问的配置和管理过程。下面将详细介绍 MyBatis 中的工厂模式的原理和实现。

1. 什么是工厂模式 (Factory Pattern)?

工厂模式 是一种创建型设计模式,它提供了一种创建对象的方式,使得客户端无需指定对象的具体类名,而是通过一个统一的接口来创建对象。这种模式通过定义一个工厂类来封装对象的创建过程,可以将对象的创建与使用解耦,从而提高代码的灵活性和可维护性。

2. MyBatis 中的工厂模式实现

在 MyBatis 中,SqlSessionFactory 就是一个典型的工厂模式的实现。它负责创建和管理 SqlSession 对象。SqlSession 是 MyBatis 提供的用于操作数据库的核心接口。

2.1 SqlSessionFactory 的角色

  • SqlSessionFactory:充当工厂类,用于创建 SqlSession 对象。SqlSession 是一个会话对象,用于执行 SQL 语句、获取 Mapper 接口实例、以及管理事务。
  • SqlSessionFactoryBuilder:是创建 SqlSessionFactory 的工具类。它负责解析 MyBatis 配置文件,并基于这些配置创建 SqlSessionFactory

3. MyBatis 工厂模式的实现步骤

以下是 MyBatis 工厂模式的实现步骤:

3.1 创建 MyBatis 配置文件 (mybatis-config.xml)

这是 MyBatis 的全局配置文件,用于设置数据源、环境和其他配置信息。

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

3.2 创建 Mapper 接口 (UserMapper.java)

Mapper 接口定义了数据库操作方法。

package com.example.mapper;

import com.example.model.User;
import java.util.List;

public interface UserMapper {
    List<User> getAllUsers();
    User getUserById(int id);
}

3.3 编写 Mapper XML 文件 (UserMapper.xml)

定义 SQL 语句。

<?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="com.example.mapper.UserMapper">
    <select id="getAllUsers" resultType="com.example.model.User">
        SELECT * FROM users;
    </select>
    <select id="getUserById" parameterType="int" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id};
    </select>
</mapper>

3.4 使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory

在 Java 应用程序中,使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory,并通过 SqlSessionFactory 获取 SqlSession

import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.example.mapper.UserMapper;
import com.example.model.User;
import java.util.List;

public class MyBatisExample {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
            // 1. 创建 SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            
            // 2. 从工厂获取 SqlSession
            try (SqlSession session = sqlSessionFactory.openSession()) {
                // 3. 获取 Mapper 接口的实现
                UserMapper userMapper = session.getMapper(UserMapper.class);
                
                // 4. 调用方法执行 SQL
                List<User> users = userMapper.getAllUsers();
                users.forEach(user -> System.out.println(user.getName()));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. MyBatis 工厂模式的工作流程

  • SqlSessionFactoryBuilder 解析 MyBatis 配置文件 (mybatis-config.xml) 并构建 SqlSessionFactory 对象。
  • SqlSessionFactory 负责创建和管理 SqlSession 对象。
  • SqlSession 提供用于执行 SQL 语句、获取 Mapper 接口、提交或回滚事务的功能。
  • 通过 SqlSession.getMapper() 方法获取 Mapper 接口的实现类,从而执行 SQL 操作。

5. 工厂模式带来的好处

  • 解耦:客户端代码只依赖于 SqlSessionFactory 和 SqlSession 接口,减少了与底层实现的耦合。
  • 资源管理:通过工厂模式,SqlSessionFactory 可以更好地管理数据库连接资源(如连接池)。
  • 代码简洁:使用工厂模式,可以更轻松地创建和管理 SqlSession 对象,减少了重复代码。

6. 总结

MyBatis 通过 SqlSessionFactory 实现了工厂模式,用于创建 SqlSession 对象。工厂模式的使用,使得 MyBatis 的数据库访问层更加灵活、简洁,同时也提高了应用程序的可维护性和扩展性。使用工厂模式,开发者可以更方便地管理数据库连接和事务操作,从而专注于业务逻辑的实现。

到此这篇关于Mybatis框架之工厂模式(Factory Pattern)的文章就介绍到这了,更多相关Mybatis 工厂模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • Java如何批量执行datax脚本

    Java如何批量执行datax脚本

    这篇文章主要介绍了Java如何批量执行datax脚本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • java多线程开启的三种方式你知道吗

    java多线程开启的三种方式你知道吗

    这篇文章主要为大家详细介绍了java多线程开启的三种方式,使用数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下<BR>
    2022-02-02
  • java 读取excel文件转换成json格式的实例代码

    java 读取excel文件转换成json格式的实例代码

    这篇文章主要介绍了 java 读取excel文件转换成json格式的实例代码,需要的朋友可以参考下
    2018-04-04
  • Spring Cloud Zuul路由规则动态更新解析

    Spring Cloud Zuul路由规则动态更新解析

    这篇文章主要介绍了Spring Cloud Zuul路由规则动态更新解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 详解Springboot-MyBatis配置-配置端口号与服务路径(idea社区版2023.1.4+apache-maven-3.9.3-bin)

    详解Springboot-MyBatis配置-配置端口号与服务路径(idea社区版2023.1.4+apache-mav

    这篇文章主要介绍了Springboot-MyBatis配置-配置端口号与服务路径(idea社区版2023.1.4+apache-maven-3.9.3-bin),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • 利用IDEA社区版创建SpringBoot项目的详细图文教程

    利用IDEA社区版创建SpringBoot项目的详细图文教程

    大家应该都知道Idea社区版本,默认是不能创建SpringBoot项目的,下面这篇文章主要给大家介绍了关于利用IDEA社区版创建SpringBoot项目的详细图文教程,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Java中数组的定义和使用教程(一)

    Java中数组的定义和使用教程(一)

    这篇文章主要给大家介绍了关于Java中数组的定义和使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java把Map转为对象的实现代码

    Java把Map转为对象的实现代码

    在项目开发中,经常碰到map转实体对象或者对象转map的场景,工作中,很多时候我们可能比较喜欢使用第三方jar包的API对他们进行转化,但这里,我想通过反射的方式对他们做转化,感兴趣的同学跟着小编来看看吧
    2023-08-08
  • Java如何做带复选框的菜单实例代码

    Java如何做带复选框的菜单实例代码

    大家好,本篇文章主要讲的是Java如何做带复选框的菜单实例代码,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Java在PowerPoint幻灯片中创建散点图的方法

    Java在PowerPoint幻灯片中创建散点图的方法

    散点图是通过两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式,这篇文章主要介绍了Java如何在PowerPoint幻灯片中创建散点图,需要的朋友可以参考下
    2023-04-04

最新评论