三大对象:

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);}}
}

转载于:https://www.cnblogs.com/chopper-zx/p/7866907.html

MyBatis核心接口和类相关推荐

  1. 【大话Hibernate】Hibernate的核心接口和类

    Hibernate的核心类和接口一共有6个,分别为:Session.SessionFactory. Transaction.Query.Criteria和Configuration.这6个核心和类接口 ...

  2. 第二篇:mybatis核心接口

    基本上mybatis的官网已经提供了很完善的入门文档,参考这个基本就可以明白了 https://mybatis.org/mybatis-3/zh/getting-started.htmlz 主要的入门 ...

  3. Mybatis源码阅读(四):核心接口4.1——StatementHandler

    *************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...

  4. Hibernate学习(二):heibernate核心接口

    Hibernate是一种对JDBC做了轻量级封装的对象---关系映射工具,所谓轻量级封装,是指Hibernate并没有完全封装JDBC,Java应用即可以通过Hibernate API访问数据库,还可 ...

  5. Mybatis源码阅读(四):核心接口4.2——Executor(上)

    *************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 如 ...

  6. java 用面向接口编程的方式开发打印机_Java“打印机”模型理解面向接口编程。实现接口定义类,接口实现类,核心“业务”类分离...

    接口定义类 IinkBox.java package printerDemo.iface; public interface IInkBox { public String getColor(); } ...

  7. Java 核心五个类(File、Outputstream、Inputstream、Reader、Writer)一个接口(Serializable)...

    java BIO(阻塞式IO)    java.io 核心五个类(File.Outputstream.Inputstream.Reader.Writer)一个接口(Serializable) 1.Fi ...

  8. Mybatis DAO接口为什么不需要实现类

    2019独角兽企业重金招聘Python工程师标准>>> Java动态代理 代理模式在GoF设计模式尤为突出,Spring AOP 就是代理模式的一个例子,而且它使用的也是JDK的动态 ...

  9. java元婴期(23)----java进阶(mybatis(2)---mapper代理mybatis核心配置文件输入输出映射)

    1.mapper代理 1.mybatis开发dao的方法----引入(为啥要使用mapper代理) 1.SqlSession使用范围 1.SqlSessionFactoryBuilder 通过SqlS ...

最新文章

  1. java 通配符 日期_java – 使用带有通配符支持的SimpleDateFormat解析日期字符串(例如* yyyy * MM * dd * hh * mm * ss)...
  2. hdu1556 线段树段更新(简单题)
  3. Quartz2D简单图形
  4. 矩阵置零—leetcode73
  5. 小师妹学JVM之:逃逸分析和TLAB
  6. 模型的搜索和优化方法综述:
  7. mysql 使用jdbctemplate_SpringBoot学习笔记-使用jdbcTemplate访问mysql
  8. 网络相关的常用协议总结
  9. SCOM 常识概念—与其他SC产品集成
  10. Leetcode796.Rotate String旋转字符串
  11. loadrunner—web_url
  12. LICEcap 录制Gif动画
  13. testmarkdown
  14. GitHub的page构建自己的博客以及添加自己的域名
  15. 【转载】UMTS和GSM的架构
  16. 实例详解ISA防火墙策略元素
  17. Linux内核启动去掉企鹅,linux更换启动时的小企鹅图片
  18. nn.Linear()函数详解及代码使用
  19. 大多数的愤怒源于自己的无知——《Excel受保护视图》
  20. 专访 | Draven:像写代码一样,用树形的结构写文章

热门文章

  1. 创建物化视图commit_oracle慎用基于on commit刷新物化视图的方式(一)
  2. linux下如何为redis配置path,linux环境下如何启动redis
  3. 奥鹏17计算机应用基础离线,奥鹏《计算机应用基础》离线
  4. git 修改commit_Git从8到13 深入了解Git特性
  5. 高通cpu排行_安卓手机芯片排行:麒麟990 5G仅排第三,980还输给了765G?
  6. 对于计算机网络技术的课程,计算机网络技术课程剖析.doc
  7. 方正计算机软件保护进超级用户,超级用户权限补丁(SuperSU Pro)含刷机包
  8. centos7 修改为任意网卡名_VirtualBox虚拟机双网卡配置实现与本机互通并上网
  9. ENSP配置 实例二 单臂路由配置
  10. mysql 严格模式_MySQL 开启/关闭 严格模式(Strict Mode)