MyBatis :工厂类封装与简化

这篇具有很好参考价值的文章主要介绍了MyBatis :工厂类封装与简化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.工厂类

在Java中,工厂类是一种设计模式,主要用于创建对象的过程。工厂类的目的是将对象的创建逻辑封装在一个类中,以便客户端代码无需了解具体的实现细节,只需要通过工厂类获取所需的实例。

工厂类的主要作用包括:

  1. 封装对象创建逻辑: 将对象的创建过程和细节封装在工厂类中,使客户端代码无需关心如何创建对象,降低了代码的耦合性。

  2. 统一接口: 工厂类提供了一个统一的接口或方法来创建对象,客户端代码只需要调用这个接口或方法,而无需关心具体的实现类。

  3. 简化实例化过程: 对于某些复杂的对象创建过程,工厂类可以隐藏创建对象的复杂性,简化了客户端代码。

  4. 灵活切换实现: 如果需要更改或替换某个类的实现,只需修改工厂类的实现,而无需修改客户端代码。这种方式支持更灵活的实现替换。

2.对工厂类再封装

这是我们之前的代码:

package Mybatis;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;

/**
 * 我们已经配置好了myBatis,当我们希望使用myBatis的时候,
 * 我们就会创建一个SqlSessionFactory类,在这个类里使用myBatis的各种功能。
 */
public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        //寻找配置文件,参数就是配置文件的路径,这里是相对路径
        SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(new FileInputStream("myBatis_config.xml"));

        //sqlSession就像之前的statement一样,创建一个连接,执行sql语句,它也需要关闭,所以写进try
        //参数true代表开启自动提交,如果不自动提交,就类似与之前说的mysql的事务模式
        try (SqlSession sqlSession = sqlSessionFactory.openSession(true)){

            //这里的参数是mapper里指定的那个sql语句的名称
            //也就是UserMapper.xml里的id字段的名称
            List<User> student = sqlSession.selectList("selectUser");

            //这行代码使用了 Java 8 引入的新特性之一,称为方法引用(Method Reference)。
            // 具体来说,System.out::println 是一个静态方法引用,用于将 println 方法关联到 System.out 对象上。
            //在这里,System.out::println 等效于 lambda 表达式 (s) -> System.out.println(s)。
            // 它表示将遍历 student 集合的每个元素,并将每个元素传递给 System.out.println 方法,实现在控制台上打印每个元素的效果。
            student.forEach(System.out::println);
        }
    }
}

我们发现在之前的代码中,我们首先新建了一个工厂类,然后执行查询。

但是很这里的代码逻辑有些不清晰,我们希望的是  连接->查询

我们希望:

MybatisUtil.getSession(true)

而不是:

 SqlSessionFactory sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(new FileInputStream("myBatis_config.xml"));

工厂类虽然封装对象创建逻辑,但在这里还有些臃肿,所以我们新建一个工具类,来封装这个工厂类。

package Mybatis;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.FileInputStream;
import java.io.IOException;


public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try{
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(new FileInputStream("myBatis_config.xml"));
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    /**
     * 获取一个新的会话
     * @param autoCommit 是否开启自动提交(跟JDBC是一样的,如果不自动提交,则会变成事务操作)
     * @return SqlSession对象
     */
    public static SqlSession getSession(boolean autoCommit){
        return sqlSessionFactory.openSession(autoCommit);
    }
}

在这段代码里,有一个静态段和静态变量。静态段和静态变量会在类加载的过程中执行,并且只执行一次。(无论你new多少个MyBatisUtil对象,都只会执行一i,不会重复执行)

这样的MyBatisUtil写法有几个好处:

  1. 单例模式: SqlSessionFactory 是一个比较重量级的对象,包含了对数据库的配置信息、映射信息等,创建和初始化它可能是一个相对耗时的操作。这样写确保在整个应用程序生命周期内只创建了一个 SqlSessionFactory 对象,提高了性能。

  2. 全局唯一性: SqlSessionFactory 对象在整个应用程序中是唯一的,保证了全局唯一性。这意味着在应用程序中的任何地方,都可以通过 MyBatisUtil 获取到相同的 SqlSessionFactory 实例。

  3. 资源共享: SqlSessionFactory 是一个比较重的资源,通过单例模式,可以确保所有的 SqlSession 对象都共享同一个 SqlSessionFactory。这样,在应用程序中多个地方需要访问数据库时,共享的 SqlSessionFactory 可以提高资源利用效率。

  4. 简化使用: 封装了 SqlSessionFactory 的创建过程,对客户端代码提供了简单的接口,通过 MyBatisUtilgetSession 方法,客户端可以方便地获取到一个新的 SqlSession 实例,而无需关心 SqlSessionFactory 的创建和初始化过程。

所以现在,我们的Main类变成了:文章来源地址https://www.toymoban.com/news/detail-802845.html

package Mybatis;

import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class MainWithUtil {
    public static void main(String args[]){
        //用MyBatisUtil来包装之前MainWithoutUtil的工厂类,更简单地得到连接
        try(SqlSession sqlSession = MyBatisUtil.getSession(true)){

            //这里的参数是mapper里指定的那个sql语句的名称
            //也就是UserMapper.xml里的id字段的名称
            List<User> student = sqlSession.selectList("selectUser");

            //这行代码使用了 Java 8 引入的新特性之一,称为方法引用(Method Reference)。
            // 具体来说,System.out::println 是一个静态方法引用,用于将 println 方法关联到 System.out 对象上。
            //在这里,System.out::println 等效于 lambda 表达式 (s) -> System.out.println(s)。
            // 它表示将遍历 student 集合的每个元素,并将每个元素传递给 System.out.println 方法,实现在控制台上打印每个元素的效果。
            student.forEach(System.out::println);
        }
    }
}

到了这里,关于MyBatis :工厂类封装与简化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis模糊查询以及结果封装详解

    创建maven项目:项目结构如图所示 准备数据库表: 准备pom.xml所需的依赖: 编写核心配置文件加载所需要的资源 编写config.xml文件 创建工厂连接数据处理工具SqlSessionUtil.java SqlSessionUtil.java 创建学生实体类对象Student.java 1、添加模糊查询的接口方法:getStudentSname; 2、配置接口方

    2023年04月22日
    浏览(49)
  • 万级数据优化EasyExcel+mybatis流式查询导出封装

    时间 更新内容 2023/09/23 fix: 每个sheet大小和存储内存条数一致的bug update: 增大一个sheet的默认容量 我们不妨先给大家讲一个概念,利用此概念我们正好给大家介绍一个数据库优化的小技巧: 需求如下:将一个地市表的数据导出70万条。 如果你不假思索,直接一条sql语句搞上去

    2024年02月11日
    浏览(62)
  • Springboot 封装整活 Mybatis 动态查询条件SQL自动组装拼接

    ps:最近在参与3100保卫战,战况很激烈,刚刚打完仗,来更新一下之前写了一半的博客。 该篇针对日常写查询的时候,那些动态条件sql 做个简单的封装,自动生成(抛砖引玉,搞个小玩具,不喜勿喷)。 来看看我们平时写那些查询,基本上都要写的一些动态sql:   一个字段

    2024年02月12日
    浏览(30)
  • IService接口和ServiceImpl实现类(Mybatis-Plus对service层的封装)

    Java知识点总结:想看的可以从这里进入 3.2、IService接口 BaseMapper 是用在Mapper中,而IService是在Service层使用的封装接口,它进一步封装 CRUD 。为了和BaseMapper 中方法进行区分,它采用了不同的前缀: get 查询单行 remove 删除 list 查询集合 page 分页 save新增 update修改 IService还有一个

    2024年02月16日
    浏览(38)
  • Mybatis 中如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

    在Mybatis中,可以通过配置映射文件来将SQL执行结果封装为目标对象并返回。 一种映射形式是使用resultType属性,将查询结果映射为指定的目标对象。例如: 另一种映射形式是使用resultMap属性,通过定义映射关系来将查询结果映射为目标对象。例如: 除了以上两种形式,还可

    2024年02月07日
    浏览(42)
  • 【MyBatis 学习一】认识MyBatis && 第一个MyBatis查询

    目录 一、认识MyBatis 1、MyBatis是什么? 2、为什么要学习MyBatis? 二、配置MyBatis环境 1、建库与建表 2、创建新项目  3、xml文件配置 (1)配置数据库连接 (2)配置 MyBatis 中的 XML 路径 三、测试:第一个MyBatis查询 1、用户实体类User:和数据库属性对应 2、添加mapper接口 3、添加

    2024年02月15日
    浏览(53)
  • 认识 MyBatis + MyBatis如何使用 (MyBatis操作数据库)

    本篇介绍了什么是MyBatis,MyBatis的前期配置,MyBatis操作数据库的两种方式:.xml文件 / 注释,使用MyBatis的一些注意,如有错误,请在评论区指正,让我们一起交流,共同进步! 本文开始 MyBatis(ORM: 对象关系映射框架): 一个持久层框架,也是一个工具实现程序与数据库交互,

    2024年02月14日
    浏览(59)
  • Mybatis | 初识Mybatis

    作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习! 该文章 参考学习教材 为: 《Java EE企业级应用开发教程 (Spring + Spring MVC +MyBatis)》 黑马程序员 / 编著 文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和

    2024年02月21日
    浏览(43)
  • 【Mybatis】Mybatis架构简介

    MyBatis 分为三层架构,分别是基础支撑层、核心处理层和接口层,如下图所示: typeAliase 标签的别名机制,由基础支撑层中的类型转换模块实现的; JDBC 类型与 Java 类型之间的相互转换,绑定实参、映射 ResultSet 场景中都有所体现: 在 SQL 模板绑定用户传入实参的场景中,类型

    2024年02月15日
    浏览(40)
  • MyBatis——MyBatis插件原理

    本博文主要介绍MyBatis插件机原理,帮助大家更好的理解和学习MyBatis。 MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis允许使用插件来拦截的方法调用包括: Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) 拦截执行器的

    2024年02月10日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包