IT评测·应用市场-qidao123.com技术社区

标题: Mybatis的工具类 [打印本页]

作者: 用户国营    时间: 2024-10-9 21:44
标题: Mybatis的工具类
为什么要编写工具类?

1. 代码复用

工具类会合封装了常用的功能和操作,比如创建和关闭 SqlSession,这样可以避免在多个地方重复编写相同的代码。每次使用时,只需要调用工具类中的方法即可,简化了代码。
示例: 每次要打开 SqlSession,假如没有工具类,就必须手动写以下代码:
  1. InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
  2. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  3. SqlSession sqlSession = sqlSessionFactory.openSession();
复制代码
有了工具类后,使用代码变得简单:
  1. SqlSession sqlSession = SqlSessionUtil.openSession();
复制代码
2. 会合管理资源

像 SqlSessionFactory 这样的资源通常是全局的,只有一个实例。在工具类中进行会合管理,确保整个应用程序中只创建一个 SqlSessionFactory 实例,避免资源浪费。此外,通过工具类也能更好地控制 SqlSession 的创建和关闭,确保资源不泄露。
好处:

工具类 

  1. package Utils;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. public class SqlSessionUtil {
  9.     // 静态SqlSessionFactory对象,用于保证整个应用程序中只有一个SqlSessionFactory实例
  10.     private static SqlSessionFactory sqlSessionFactory;
  11.     // 静态代码块,用于类加载时初始化SqlSessionFactory对象
  12.     static {
  13.         try {
  14.             // 读取MyBatis配置文件,构建SqlSessionFactory对象
  15.             InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
  16.             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  17.         } catch (IOException e) {
  18.             throw new RuntimeException(e);  // 捕获IO异常并抛出运行时异常
  19.         }
  20.     }
  21.     /**
  22.      * 获取SqlSession对象
  23.      * @return SqlSession对象
  24.      */
  25.     public static SqlSession openSession() {
  26.         // 使用SqlSessionFactory打开一个新的SqlSession
  27.         return sqlSessionFactory.openSession();
  28.     }
  29.     /**
  30.      * 关闭SqlSession对象
  31.      * @param sqlSession 要关闭的SqlSession对象
  32.      */
  33.     public static void closeSession(SqlSession sqlSession) {
  34.         if (sqlSession != null) {
  35.             sqlSession.close();  // 关闭会话
  36.         }
  37.     }
  38. }
复制代码
代码解释 

1. 静态代码块

静态代码块在类加载时执行一次,用于初始化类级别的静态变量。代码中使用静态代码块读取 MyBatis 的设置文件,构建 SqlSessionFactory,确保应用中只有一个 SqlSessionFactory 实例。
2. 资源读取和设置文件

通过 Resources.getResourceAsStream("mybatis-config.xml") 来读取 MyBatis 的核心设置文件 mybatis-config.xml,这个文件通常包含数据库毗连信息、Mapper 映射、事务管理等设置。
3. 异常处置惩罚

在读取设置文件时,大概会发生 IOException,此处捕获该异常,并抛出运行时异常 RuntimeException,以防止体系继承执行。假如初始化失败,程序应立刻制止。
4. 工具方法

SqlSessionUtil 提供了两个公共静态方法:

5. 单例模式

通过静态工厂(SqlSessionFactory)实现单例模式,这样避免每次操作都重新创建工厂对象,提高了体系的性能和资源使用率。
扩展:为何要封装 SqlSession?


1. 一个数据库对应一个 SqlSessionFactory

通常,一个 SqlSessionFactory 对应一个数据库毗连设置。这意味着,假如你的应用程序需要毗连多个数据库,那么你通常会为每个数据库设置一个 SqlSessionFactory 实例。缘故原由在于每个 SqlSessionFactory 会加载不同的数据库设置(例如,数据库的 URL、用户名、暗码等)。

2. 一个会话(SqlSession)对应一次数据库操作

一个 SqlSession 通常用于处置惩罚一次数据库操作或事务。SqlSession 不是线程安全的,通常在每个线程中创建新的 SqlSession,并在操作竣事后关闭它。这样做的好处是:

java的例子 

  1. package test;
  2. import Utils.SqlSessionUtil;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.testng.annotations.Test;
  5. public class CarMapperTest {
  6.     @Test
  7.     public void testInsertCarByUtil(){
  8.         SqlSession sqlSession = SqlSessionUtil.openSession();
  9.         int count = sqlSession.insert("insertCar");
  10.         sqlSession.commit();
  11.         sqlSession.close();
  12.     }
  13. }
复制代码
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4