MyBatis核心接口和类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis核心接口和类相关的知识,希望对你有一定的参考价值。
三大对象:
1、SqlSessionFactoryBuilder:负责构建SqlSessionFactory,并且提供了多个build()方法的重载
2、SqlSessionFactory:创建SqlSession实例的工厂
3、SqlSession:用于执行持久化操作的对象
三大对象获取的步骤:
(1)每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。
(2)首先获取SqlSessionFactoryBuilder对象,可以根据XML配置文件的实例构建该对象。
(3)然后获取SqlSessionFactory对象,该对象实例可以通过SqlSessionFactoryBuilder对象来获得。
(4)有了SqlSessionFactory对象之后,通过SqlSessionFactory对象的openSession()方法就可以获取SqlSession实例,SqlSession对象中完全包含以数据库为背景的所有执行SQL操作的方法。
三大对象的声明周期和作用域:
《1》SqlSessionFactoryBuilder的最大特点是:用过即丢。一旦创建了SqlSessionFactoryBuilder对象之后,这个类就不再需要存在了,因此SqlSessionFactoryBuilder的最佳范围是存在方法体内,也就是局部变量而已。
《2》SqlSessionFactory对象一旦创建,就会在整个应用运行过程中始终存在,因此SqlSessionFactory的最佳作用域是Application(单例模式)。
《3》SqlSession对应着一次数据库回话。在每次访问数据库时都需要创建它,每个线程都有自己的SqlSession实例,SqlSession实例不能被共享,也不是线程安全的。因此最佳的作用域范围是request作用域或者方法体作用域内。
package com.ssm.utils; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; /** * MyBatis的核心接口和类 * @author Administrator * */ public class MyBatisUtil { private static SqlSessionFactory factory; /* * 在静态代码块下,factory只会被创建一次 */ static{ try { String resource="mybatis-config.xml"; InputStream is=Resources.getResourceAsStream(resource); factory=new SqlSessionFactoryBuilder().build(is); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 创建SqlSession对象 * @return */ public static SqlSession createSession(){ return factory.openSession(false);//true为自动提交事务,true为默认值 } /** * 关闭SqlSession对象 * @param session */ public static void closeSession(SqlSession session){ if (session!=null) { session.close(); } } }
package com.ssm.test; import java.util.List; import org.apache.ibatis.session.SqlSession; import com.ssm.entity.Address; import com.ssm.entity.User; import com.ssm.mapper.UserMapper; import com.ssm.utils.MyBatisUtil; public class TestUser { public static void main(String[] args) { SqlSession session=null; List<User> userList; /** * 查询所有user的集合 */ try { session=MyBatisUtil.createSession(); userList = session.getMapper(UserMapper.class).getUserList(); for (User user : userList) { System.out.println("userid:"+user.getId()+"\tuserName:"+user.getUserName()); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ MyBatisUtil.closeSession(session); } } }
以上是关于MyBatis核心接口和类的主要内容,如果未能解决你的问题,请参考以下文章
阶段3 1.Mybatis_03.自定义Mybatis框架_3.自定义mybatis的编码-根据测试类中缺少的创建接口和类