大家好,又见面了,我是你们的朋友全栈君。
网上得来终觉浅,绝知此事要躬行。
前提:已经完成了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文档并完成各个对象创建和值的注入。 所以,通过代码生成的这种方式,其实就是框架底层做的事,只不过这些值都是可配置的。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134643.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...