当前位置: 代码网 > it编程>编程语言>Java > Mybatis框架之工厂模式(Factory Pattern)

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

2024年11月26日 Java 我要评论
mybatis 中的工厂模式(factory pattern)主要体现在sqlsessionfactory和sqlsession的使用上。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 工厂模式内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com