开发者

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

目录
  • 1. 什么是工厂模式 (Factory Pattern)?
  • 2. MyBATis 中的工厂模式实现
    • 2.1 SqlSessionFactory 的角色
  • 3. MyBatis 工厂模式的实现步骤
    • 3.1 创建 MyBatis 配置文件 (mybatis-config.XML)
    • 3.2 创建 Mapper 接口 (UserMapper.Java)
    • 3.3 编写 Mapper XML 文件 (UserMapper.xml)
    • 3.4 使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory
  • 4. MyBatis 工厂模式的工作流程
    • 5. 工厂模式带来的好处
      • 6. 总结

        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"/>
                        <propeandroidrty 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 应用程序中,使用 SqlSessionFactoryphpBuilder 创建 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 (InputSthttp://www.devze.comream inputStream = Resources.getResourceAsStream(resource)) {
                    // 1. 创建 SqlSessionFactory
                    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
                    
                    // 2. 从工厂获取 SqlSessionphp
                    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 接口,减少了与底层实现的耦合。
        • 资源管理:通过工python厂模式,SqlSessionFactory 可以更好地管理数据库连接资源(如连接池)。
        • 代码简洁:使用工厂模式,可以更轻松地创建和管理 SqlSession 对象,减少了重复代码。

        6. 总结

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

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

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新开发

        开发排行榜