两种方式创建SqlSessionFactory[通俗易懂]

两种方式创建SqlSessionFactory[通俗易懂]前提:已经完成了MyBatis环境的搭建!!!一、使用配置文件创建SqlSessionFactory开始Code了:packagecom.littlestar.util;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache…

大家好,又见面了,我是你们的朋友全栈君。

网上得来终觉浅,绝知此事要躬行。

前提:已经完成了MyBatis环境的搭建!!!

一、使用配置文件创建SqlSessionFactory
这里就简单截个图了
开工喽—————————————————————————————————————————-

package com.littlestar.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;

/** * 获取sqlsession工具类 */
public class SqlSessionFactoryUtil2 { 
   

	// 获取class对象
	private final static Class<SqlSessionFactoryUtil2> LOCK = SqlSessionFactoryUtil2.class;

	//首先创建静态成员变量sqlSessionFactory
	private static SqlSessionFactory sqlSessionFactory = null;

	//构造函数私有
	private SqlSessionFactoryUtil2() { 
   
	}

	public static SqlSessionFactory getSqlSessionFactory() { 
   
		synchronized (LOCK) { 
   
			if (sqlSessionFactory != null) { 
   
				return sqlSessionFactory;
			}
			String resource = "mybatis-config.xml";
			try { 
   
				InputStream inputStream = Resources.getResourceAsStream(resource);
				sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			} catch (IOException e) { 
   
				e.printStackTrace();
				return null;
			}
			return sqlSessionFactory;
		}
	}

}

构造方法中加入了private关键字,使得其他代码不能通过new的方式来创建它。而加入Syschronized 关键字加锁,主要是为了防止在多线程的环境下多次实例化SqlSessionFactory对象,从而保证SqlSessionFactory的唯一性。

这种线程安全模型有个名词叫懒汉式。更多单例以及线程安全模型请看-> https://blog.csdn.net/cselmu9/article/details/51366946

二、使用代码创建SqlSessionFactory

不是特别建议用代码来实现(因为耦合度太高了),但是学习的时候还是需要学习一下的。

// 数据库连接池信息
PooledDataSource dataSource = new PooledDataSource();
dataSource.setDriver("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword ("123456");
dataSource.setUrl("jdbc:mysql://localhost:3306/inventory");
dataSource.setDefeultAutoCommit(false);
// 采用 MyBatis 的 JDBC 事务方式
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment ("development", transactionFactory, dataSource);
// 创建 Configuration 对象
Configuration configuration = new Configuration(environment);
// 注册一个 MyBatis 上下文别名
configuration.getTypeAliasRegistry().registerAlias("emp", Emp.class);
// 加入一个映射器
configuration.addMapper(EmpMapper.class);
//使用 SqlSessionFactoryBuilder 构建 SqlSessionFactory
SqlSessionFactory SqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
return SqlSessionFactory;

这段代码代替的是getSqlSessionFactory()里面的哪一段代码,稍微聪明一点的应该就知道这段其实相当于就是解析xml文档并完成各个对象创建和值的注入。 所以,通过代码生成的这种方式,其实就是框架底层做的事,只不过这些值都是可配置的。

下一节:SqlSession和Mapper的使用

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134643.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月6日 下午2:46
下一篇 2022年6月6日 下午3:00


相关推荐

  • apt 与 dpkg[通俗易懂]

    apt 与 dpkg[通俗易懂]dpkg简介“dpkg”是“DebianPackager”的简写。为“Debian”专门开发的套件管理系统,方便软件的安装、更新及移除。所有源自“Debian”的“Linux”发行版都使用“dpkg”,例如“Ubuntu”、“Knoppix”等。dpkg是Debian软件包管理器的基础,它被伊恩·默多克创建于1993年。dpkg与RPM十分相似,同样被用于安装、卸载和供给….

    2026年4月14日
    3
  • 常用Lamda表达式

    常用Lamda表达式1、在工作中我们有部分lamda表达式经常会用到,在此做个小总结这里新建个实体类,来做测试publicclassLamdaVO{privateIntegerid;privateStringname;privateStringeamil;publicLamdaVO(){}publicLamdaVO(Integ…

    2022年6月11日
    36
  • 启动马达接线实物图_软启动器怎么接线?一张电路图一张实物图供大家参考

    启动马达接线实物图_软启动器怎么接线?一张电路图一张实物图供大家参考朋友们大家好,我是大俵哥,今天我们来聊一下软启动。很多大型动力设备在启动的时候,启动电流都是比较大的,对整个电网有冲击性,所以不能直接启动,具体原因有以下两点。一,有的电机启动电流为额定电流的4--7倍,直接启动会影响同一电网内的其他用电设备。二,直接启动产生较高的峰值转矩,不仅对驱动电机有冲击性,而且易损坏机械装置。软启动相比星三角降压启动、自耦变压器启动等效果要好一些,启动更加平稳,保护也更加…

    2022年6月6日
    296
  • 登录令牌 Token 介绍

    登录令牌 Token 介绍

    2021年11月3日
    56
  • python k折交叉验证,python中sklearnk折交叉验证

    python k折交叉验证,python中sklearnk折交叉验证python 中 sklearnk 折交叉验证发布时间 2018 06 1011 09 浏览次数 492 标签 pythonsklear 模型验证回顾进行模型验证的一个重要目的是要选出一个最合适的模型 对于监督学习而言 我们希望模型对于未知数据的泛化能力强 所以就需要模型验证这一过程来体现不同的模型对于未知数据的表现效果 最先我们用训练准确度 用全部数据进行训练和测试 来衡量模型的表现 这种方

    2026年3月16日
    2
  • 神经网络之梯度下降法及其实现

    神经网络之梯度下降法及其实现本文将从一个下山的场景开始 先提出梯度下降算法的基本思想 进而从数学上解释梯度下降算法的原理 最后实现一个简单的梯度下降算法的实例 文章目录一 梯度下降的场景假设二 梯度三 梯度下降算法的数学解释四 梯度下降算法的实例五 梯度下降算法的实现一 梯度下降的场景假设梯度下降法的基本思想可以类比为一个下山的过程 假设这样一个场景 一个人被困在山上 需要从山上下来 i e 找到山的最低点 也就是山

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号