笔记:mybatis配置sqlSession以及sqlSessionFactory
程序员文章站
2022-07-15 11:14:56
...
1.mybatis配置文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 引入外部资源文件 -->
<properties resource="jdbc.properties"/>
<typeAliases>
<package name="com.lz.vo"/>
</typeAliases>
<!-- 配置数据源环境 -->
<environments default="development">
<environment id="development">
<!-- 数据库事务管理类型 -->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 注册SQL映射文件,在这些文件中写SQL语句 -->
<mappers>
<mapper resource="mapper/EmployeeMapper.xml"/>
</mappers>
</configuration>
2.jdbc.properties
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:ORCL
jdbc.username=root
jdbc.password=123456
3.MybatisUtil.java
配置工具类需要用到ThreadLocal类
- threadlocal而是一个线程内部的存储类,可以在指定线程内存储数据,
- 数据存储以后,只有指定线程可以得到存储数据
- ThreadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的
/**
* ThreadLocal类接口只有4个方法:
* void set(Object value)设置当前线程的线程局部变量的值。
* public Object get()该方法返回当前线程所对应的线程局部变量。
* public void remove()将当前线程局部变量的值删除,
* 目的是为了减少内存的占用,该方法是JDK 5.0新增的方法。
* protected Object initialValue()返回该线程局部变量的初始值,
* 该方法是一个protected的方法,显然是为了让子类覆盖而设计的。
*/
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 MybatisUtil {
static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
static SqlSessionFactory sqlSessionFactory = null;
static {
try {
// 加载mybatis配置文件,并创建SqlSessionFactory实例
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
}
}
public static SqlSession getSqlSession() {
// 从threadLocal中获取与当前线程进行绑定的本地变量(线程的本地变量)
SqlSession sqlSession = threadLocal.get();
if (sqlSession == null) {
sqlSession = sqlSessionFactory.openSession();
// threadLocal就为当前线程维护一个线程的本地变量
threadLocal.set(sqlSession);
}
return sqlSession;
}
public static void closeSqlSession(){
SqlSession sqlSession = threadLocal.get();
if (sqlSession != null) {
sqlSession.close();
}
}
public static void main(String[] args) {
System.out.println(getSqlSession());
System.out.println(getSqlSession());
System.out.println(getSqlSession());
}
}
4.dao调用
public List<Employee> selectAll() {
try (SqlSession sqlSession = MybatisUtil.getSqlSession();) {
// 调用语句
return sqlSession.selectList("mapper.EmployeeMapper.selectAll");
} catch (Exception e) {
logger.error("查询所有员工失败。", e);
}
return null;
}
下一篇: 用Maven创建SSM项目需要添加的依赖
推荐阅读
-
mybatis学习笔记之mybatis注解配置详解
-
Mybatis中SqlSessionFactory和SqlSession学习和原理
-
4K版东芝Win10 笔记本电脑Radius 12怎么样?什么配置?配置参数以及上手体验视频
-
笔记:mybatis配置sqlSession以及sqlSessionFactory
-
mybatis plus源码解析(一) ---基于springboot配置加载和SqlSessionFactory的构造
-
MyBatis源码分析之——配置解析创建SqlSessionFactory的过程
-
MyBatis-SQLSessionFactory 配置文件解析
-
ssm框架集成时,在spring配置文文件中集成mybatis时,在sqlSessionFactory中的属性configuration配置日志出错
-
配置SqlSessionFactory,整合Mybatis
-
Mybatis细节处理之mapper.xml的存放,properties配置文件,类型别名以及创建log4j配置文件