两种方式创建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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm导入下载好的库_如何在pycharm导入库

    pycharm导入下载好的库_如何在pycharm导入库

    2022年8月28日
    1
  • webstorm2021.1激活码(注册激活)

    (webstorm2021.1激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月29日
    566
  • CSS设置背景颜色透明

    CSS设置背景颜色透明CSS设置背景颜色透明将背景颜色设置为透明,两种方法:方法一:通过background-color和opacity来设置opacity属性参数的不透明度是以数字表示的,从0.0到1.0,完全透明是0.0,完全不透明是1.0,数字越大代表元素越不透明。<divclass=”box01″><p>今天星期三</p></div><divclass=”box02″><p>和上面盒子对比</p

    2022年6月20日
    62
  • word涂改涂掉图片_【最新】干部档案涂改检讨书-word范文 (20页)[通俗易懂]

    word涂改涂掉图片_【最新】干部档案涂改检讨书-word范文 (20页)[通俗易懂]本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!==本文为word格式,下载后可方便编辑和修改!==干部档案涂改检讨书篇一:干部人事档案检查自查报告关于开展干部人事档案审核工作的自查报告******:根据省局《关于开展干部人事档案审核工作检查的通知》(*****号)要求,我局对开展好干部人事档案审核自查工作高度重视,精心组织,周密安排,明确工作职责,认真制…

    2025年9月30日
    6
  • python转置矩阵代码_python 矩阵转置[通俗易懂]

    python转置矩阵代码_python 矩阵转置[通俗易懂]用python怎么实现矩阵的转置只能用循环自己写算法吗自带函数有可以算的吗或者网上的算法可以用的python矩阵转置怎么做?5.矩阵转置给定:L=[[1,2,3],[4,5,6]]用zip函数和列表推导式实现行列转deftranspose(L):T=[list(tpl)fortplinzip(*L)]returnTpython字符串如何变成矩阵进行矩阵转置如输入一串“…

    2022年5月5日
    60
  • Java Class类简介

    Java Class类简介
    一,class类有什么用?
    class类的实例表示java应用运行时的类(classansenum)或接口(interfaceandannotation)(每个java类运行时都在JVM里表现为一个class对象,可通过类名.class,类型.getClass(),Class.forName(“类名”)等方法获取class对象)。数组同样也被映射为为class对象的一个类,所有具有相同元素类型和维数的数组都共享该Class对象。基本类型boolean,byte,ch

    2022年5月1日
    41

发表回复

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

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