06_关于SqlSession

一.SqlSession适用范围

(1).SqlSessionFactoryBuilder

通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory

将SqlSessionFactoryBuilder当成一个工具类使用,无需单例模式管理SqlSessionFactoryBuilder。

在需要创建SqlSessionFactory时,只需new一次SqlSessionFactoryBuilder即可。

 //mybatis配置文件
 String resource="SqlMapConfig.xml";

 //得到配置文件
 InputStream inputStream=Resources.getResourceAsStream(resource);

//创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);

(2)SqlSessionFactory

通过SqlSessionFactory创建SqlSession,使用单例模式管理SqlSessionFactory(工厂一旦创建,使用一个单例)

(MyBatis与Spring整合后,使用单例模式管理SqlSessionFactory)

//通过工厂得到SqlSession
SqlSession sqlSession=sqlSessionFactory.openSession();

(3)SqlSession

SqlSession是一个面向用户(软件工程师)的接口。

SqlSession中提供了许多操纵数据库的方法,如:

selectOne():返回单个对象

selectList():返回当个或多个对象

.....

SqlSession是线程不安全的,在SqlSession实现类中除了接口中的方法(操作数据库的方法),还有数据域属性。

SqlSession最佳应用场合在方法体内,定义成局部变量使用。

//通过SqlSession操作数据库
//第一个参数:映射文件中statement的id,等于:namespace+"."+statement的id
//第二个参数:指定映射文件中的所匹配的parameterType类型的参数 User user=sqlSession.selectOne("test.findUserById", 2);
//删除用户
sqlSession.delete("test.deleteUserById",2);
//插入数据,后返回id
sqlSession.insert("test.insertUserReturnId",user);
//更新数据
sqlSession.update("test.updateUserById",user);
时间: 2024-10-29 20:51:37

06_关于SqlSession的相关文章

mybaits非配置原因,导致SqlSession was not registered for synchronization异常

今天运行程序时报了 SqlSession [[email protected]] was not registered for synchronization because synchronization is not active [11:03:17]-Closing non transactional SqlSession [[email protected]] 由于异常是集中处理的,所以报了这样的错误,查了半天,网上结果都是说配置文件出错的,可是我的项目配置文件肯定是没错的,因为项目都开

mybatis源码分析(2)-----SqlSession创建

1. 在创建好sqlSessionFactory之后,接着就要配置sqlSession的创建. <bean id="simpleTempalte" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> <constructor-arg index=&q

MyBatis 源码分析——SqlSession接口和Executor类

mybatis框架在操作数据的时候,离不开SqlSession接口实例类的作用.可以说SqlSession接口实例是开发过程中打交道最多的一个类.即是DefaultSqlSession类.如果笔者记得没有错的话,早期是没有什么getMapper方法的.增删改查各志有对应的方法进行操作.虽然现在改进了很多,但是也保留了很多.我们依旧可以看到类似于selectList这样子的方法.源码的例子里面就可以找到.如下 SqlSession session = sqlMapper.openSession(T

Manual close is not allowed over a Spring managed SqlSession

Manual close is not allowed over a Spring managed SqlSession 整合spring与MyBatis时出现如下警告: [org.springframework.beans.factory.support.DisposableBeanAdapter.invokeCustomDestroyMethod(DisposableBeanAdapter.java:360)]-[WARN] Invocation of destroy method 'clo

【转载】关于SqlSessionFactoryBuilder SqlSessionFactory SqlSession的作用范围

1 SqlSessionFactoryBuilder:这个类可以被实例化,使用和丢弃.一旦你创建了SqlSessionFactory后,这个类就不需要存在了.因此SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是本地方法变量).你可以重用SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例,但是最好的方式是不需要保持它一直存在来保证所有XML解析资源,因为还有更重要的事情要做. 2 3 SqlSessionFactory:

mybatis随笔三之SqlSession

在上一篇文章我们已经得到了DefaultSqlSession,接下来我们对sqlSession.getMapper(DemoMapper.class)这种语句进行分析 @Override public <T> T getMapper(Class<T> type) { return configuration.<T>getMapper(type, this); } 在这里又调用了如下方法 public <T> T getMapper(Class<T>

MyBatis的Dao层注入SqlSession

有点坑爹,以前没用过Mybatis,最近才用,而且一直用Mybatis推荐的接口映射的方式,但是今天有人告诉我接口方式用得少,大多还是采用从配置文件里面读sql的方式,当然接口也是类似的,都是利用mapper.xml. 于是就想把这东西整合进来,当进行dao的时候发现一个小问题,sqlSession怎么注入进来的问题,以前Hibernate的的习惯用sessionFactory的openSession()方法,但是每个方法都要open一下,麻烦,就想能不能直接把sqlSession通过注解注入进

SqlSessionFactory创建SqlSession的过程

SqlSessionFactory接口中声明了一系列opensession方法,用来返回SqlSession对象. 而DefaultSqlSessionFactory是他的实现类,实现了其中的方法. 如下: public SqlSession openSession() { return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false); } 其中openSessionFromDataSo

MyBatis之SqlSession介绍

鲁春利的工作笔记,好记性不如烂笔头 转载自:深入浅出MyBatis-Sqlsession SqlSession的创建 Sqlsession对应着一次数据库会话.由于数据库回话不是永久的,因此Sqlsession的生命周期也不应该是永久的,相反,在你每次访问数据库时都需要创建它(当然并不是说在Sqlsession里只能执行一次sql,你可以执行多次,当一旦关闭了Sqlsession就需要重新创建它).创建Sqlsession的地方只有一个,那就是SqlsessionFactory的openSess