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


相关推荐

  • CSS中的媒体类型media type[通俗易懂]

    CSS中的媒体类型media type[通俗易懂]madiatype作用首先要明白一点,我们平时写的HTML页面,可能在不同的媒体类型中显示,如可能显示在屏幕sreen上,也可能显示在纸质print上。那么当页面在不同的媒体类型中显示时,需要的样式可能是不一样的。比如,一般在screen上显示时,页面字体要大一些,在纸质媒体显示时,页面字体要小一些。那么如何告诉别人某个样式是适用于何种媒体类型的呢?这就要靠声明mediatype来实现了。

    2022年5月25日
    93
  • Debian6安装fcitx4

    Debian6安装fcitx4http://ftp.tw.debian.org/debian/pool/main/f/fcitx/下载fcitx-data_4.0.1-6_i386.debhttp://ftp.tw.debian.org/debian/pool/main/f/fcitx下载fcitx_4.0.1-6_i386.debdpkg-ifcitx-data_4.0.1-6_i386.debfcitx_4.0.1-6_i386.deb但是fcitx-sunpinyin都没有进入Debian可以从ubuntu实验区下载http

    2022年10月19日
    5
  • Kafka容错性测试

    Kafka容错性测试1.查看topic信息(“副本”是为该分区复制日志的节点列表,无论它们是引导者还是当前处于活动状态,“isr”是“同步”副本的集合。这是副本列表的子集,当前仍处于活动状态并追随领导者。)[hadoop@hadoop000tmp]$kafka-topics.sh–describe–zookeeperhadoop000:2181–topicmy-replicated-topi…

    2022年7月25日
    10
  • kfold参数_kinfolk中文版

    kfold参数_kinfolk中文版sklearn中的KFold与StratifiedKFold函数的使用

    2025年11月24日
    6
  • SecureCRT中文乱码解决方法(6)

    SecureCRT中文乱码解决方法(6)1、重新查看会话,是否中文显示正常2、依然无法正常显示中文,可能是由于Linux系统中默认的字符编码非UTF8所致用root用户登录。输入cat/etc/sysconfig/i18n如果安装系统为中文系统,则修改【LANG=“zh_CN.UTF-8”】如果安装系统为英文系统,则修改【LANG=“en_US.UTF-8”】保存文件。断开SSH,重新登录。就正常了下面是修改…

    2022年7月17日
    21
  • python3使用付费代理和ip池的维护「建议收藏」

    更新:在使用代理是如果频率过快返回的是‘{“code”:“3001”,“msg”:“提取频繁请按照规定频率提取!”}’不可将该msg添加到ip池中,故需要先判断返回状态。这一段时间爬取一些数据的时候遭到了封ip。免费的ip满足不了我的需求并且不是很稳定,所以选择的代理ip,我买了蘑菇代理一天2000ip,这些对于我的小爬爬就够了。记录了第一次使用代理ip的一些坎坷和经历,希望能够减少初学者的…

    2022年4月11日
    38

发表回复

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

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