用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
数据库
›
SQL-Server
›
Mybatis的工具类
Mybatis的工具类
用户国营
论坛元老
|
2024-10-9 21:44:13
|
显示全部楼层
|
阅读模式
楼主
主题
1615
|
帖子
1615
|
积分
4845
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
为什么要编写工具类?
1.
代码复用
工具类会合封装了常用的功能和操作,比如创建和关闭 SqlSession,这样可以避免在多个地方重复编写相同的代码。每次使用时,只需要调用工具类中的方法即可,简化了代码。
示例:
每次要打开 SqlSession,假如没有工具类,就必须手动写以下代码:
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
复制代码
有了工具类后,使用代码变得简单:
SqlSession sqlSession = SqlSessionUtil.openSession();
复制代码
2.
会合管理资源
像 SqlSessionFactory 这样的资源通常是全局的,只有一个实例。在工具类中进行会合管理,确保整个应用程序中只创建一个 SqlSessionFactory 实例,避免资源浪费。此外,通过工具类也能更好地控制 SqlSession 的创建和关闭,确保资源不泄露。
好处:
避免了重复创建 SqlSessionFactory 带来的性能开销。
SqlSession 的关闭在工具类中进行统一管理,避免
开发
职员忘记关闭会话导致毗连泄漏。
工具类
package Utils;
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 java.io.IOException;
import java.io.InputStream;
public class SqlSessionUtil {
// 静态SqlSessionFactory对象,用于保证整个应用程序中只有一个SqlSessionFactory实例
private static SqlSessionFactory sqlSessionFactory;
// 静态代码块,用于类加载时初始化SqlSessionFactory对象
static {
try {
// 读取MyBatis配置文件,构建SqlSessionFactory对象
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
throw new RuntimeException(e); // 捕获IO异常并抛出运行时异常
}
}
/**
* 获取SqlSession对象
* @return SqlSession对象
*/
public static SqlSession openSession() {
// 使用SqlSessionFactory打开一个新的SqlSession
return sqlSessionFactory.openSession();
}
/**
* 关闭SqlSession对象
* @param sqlSession 要关闭的SqlSession对象
*/
public static void closeSession(SqlSession sqlSession) {
if (sqlSession != null) {
sqlSession.close(); // 关闭会话
}
}
}
复制代码
代码解释
1. 静态代码块
静态代码块在类加载时执行一次,用于初始化类级别的静态变量。
代码中使用静态代码块读取 MyBatis 的设置文件,
构建 SqlSessionFactory,确保应用中只有一个 SqlSessionFactory 实例。
2.
资源读取和设置文件
通过 Resources.getResourceAsStream("mybatis-config.xml") 来读取 MyBatis 的核心设置文件 mybatis-config.xml,这个文件通常包含数据库毗连信息、Mapper 映射、事务管理等设置。
3.
异常处置惩罚
在读取设置文件时,大概会发生 IOException,此处捕获该异常,并抛出运行时异常 RuntimeException,以防止体系继承执行。假如初始化失败,程序应立刻制止。
4.
工具方法
SqlSessionUtil 提供了两个公共静态方法:
openSession():返回一个新的 SqlSession,用于执行数据库操作。
closeSession(SqlSession sqlSession):关闭传入的 SqlSession,以释放数据库资源。
5.
单例模式
通过静态工厂(SqlSessionFactory)实现单例模式,这样避免每次操作都重新创建工厂对象,提高了体系的性能和资源使用率。
扩展:为何要封装 SqlSession?
保证全局唯一的 SqlSessionFactory 实例,淘汰资源浪费。
方便管理 SqlSession 的创建与关闭,确保数据库毗连不被泄露。
会合管理异常处置惩罚,简化业务层的代码复杂度。
1.
一个数据库对应一个 SqlSessionFactory
通常,
一个 SqlSessionFactory 对应一个数据库毗连设置
。这意味着,
假如你的应用程序需要毗连多个数据库,那么你通常会为每个数据库设置一个 SqlSessionFactory 实例。
缘故原由在于每个 SqlSessionFactory 会加载不同的数据库设置(例如,数据库的 URL、用户名、暗码等)。
示例
:假设你有两个数据库 db1 和 db2,你大概会创建两个 SqlSessionFactory 实例,每个实例负责对应一个数据库的毗连。
SqlSessionFactory sqlSessionFactory1 = ... // 针对数据库 db1
SqlSessionFactory sqlSessionFactory2 = ... // 针对数据库 db2
复制代码
2.
一个会话(SqlSession)对应一次数据库操作
一个 SqlSession 通常用于处置惩罚一次数据库操作或事务。SqlSession 不是线程安全的,通常在每个线程中创建新的 SqlSession,并在操作竣事后关闭它。这样做的好处是:
每个 SqlSession 只负责一次数据库事务操作,使用完后实时关闭,避免毗连泄漏。
一个 SqlSession 打开后,会绑定到一个特定的数据库毗连,因此整个会话中涉及的操作都在这个毗连上进行。
java的例子
package test;
import Utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.testng.annotations.Test;
public class CarMapperTest {
@Test
public void testInsertCarByUtil(){
SqlSession sqlSession = SqlSessionUtil.openSession();
int count = sqlSession.insert("insertCar");
sqlSession.commit();
sqlSession.close();
}
}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
用户国营
论坛元老
这个人很懒什么都没写!
楼主热帖
Beta 阶段事后分析
iOS全埋点解决方案-APP和H5打通 ...
Android studio实现网上订餐app
Ubuntu22.04+ROS2中实现Moveit2控制gaz ...
mysql主从搭建
完整版彻底卸载SQL Server2019
分布式锁
复杂「场景」数据导入导出
关键容灾技能比较
【云原生】-如何搭建配置Docker私有仓 ...
标签云
集成商
AI
运维
CIO
存储
服务器
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表