简言:平安夜,继续慵懒的学习。我真的是不喜欢学习···

  第三章认识MyBatis核心组件

3.1 持久层的概念和MyBatis的特点

  持久层:可以将业务数据存储带磁盘,具有长期存储的能力。一般执行持久任务的都是数据库系统。

  书中作者认为Mybatis成功的重要3点:

  • 不屏蔽SQL,意味着可以精确的定位SQL语句,并可以对其进行优化和改造,有利于互联网系统性能的提高。
  • 提供强大、灵活的映射机制,方便Java开发者使用。
  • 提供Mapper的接口编程,只要一个接口和一个XML就能创建映射器,进一步简化我们的工作

3.3MyBatis的核心组件

  MyBatis的核心组件四部分组成:注:红色部分为其生命周期

  • SqlSessionFactoryBuilder(构造器):它会根据配置或代码来生成SqlSessionFactory,采用分布构建Builder模式。

    SqlSessionFactoryBuilder的作用在于创建SqlSessionFactory,创建成功后SqlSessionFactoryBuilder就失去了作用,所以它只能存在与创建SqlSessionFactory的方法中,而不要长期存在。

  • SqlsessionFactory(工厂接口):SqlSession的唯一作用就是生产MyBatis的核心接口对象SqlSession,使用的是工厂模式。由两种方式构造SqlSessionFactory,一种是通过配置MyBatis的基本信息的XML文件,然后再通过XML构建SqlSessionFactory,另一种是直接采用Java代码的形式创建。

    SqlSessionFactory可以被认为是一个数据库连接池,它的作用是创建SqlSession接口对象。所以一旦创建了SqlSessionFactory,就要长期保存它,直至不在使用MyBatis应用,所以可以认为SqlSessionFactory的生命周期等同于MyBatis的应用周期。

  • SqlSession(会话):在MyBatis中,SqlSession是其核心接口。在MyBatis中有两个实现类,DefaultSqlSession(单线程时使用)和SqlSessionManager(多线程时使用)。SqlSession相当于JDBC中的Connection(数据库连接池中的一条数据连接),代表着一个连接资源的启用。它既可以发送SQL执行返回结果(不推荐用),也可以获取Mapper的接口。

    你可以在一个事物里面执行多条SQL,然后通过它的commit、rollback等方法,提交或者回滚事务。所以它应该存活在一个业务请求中,处理完整个请求后, 应该关闭这条连接,让它归还给SqlSessionFactory。

  • SQL Mapper(映射器):MyBatis新设计存在的组件,有一个Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则。它负责SQL去执行并返回结果。它可以用XML的方式进行映射或者注解的形式

    Mapper是一个接口,它由SqlSession说创建,所以它的最大生命周期至多和SqlSession保持一致,尽管它很好用,但是由于SqlSession的生命周期至多和SqlSession保持一致,尽管它很好用,但是由于SqlSession的关闭,它的数据库连接资源也会消失,所以它的生命周期应该小于等于SqlSession的生命周期。

  第四章MyBatis配置

  properties 属性

  properties属性可以给系统配置一些运行参数。有三种方式让我们使用properties:

  • property子元素
  • properties文件
  • 程序代码传递(利用properties对象读取properties文件中信息)

  三种方式的优先级

  程序传递 > properties文件 > property子元素 (优先级高的会覆盖优先级低的配置)

  settings设置

  能影响MyBatis底层的运行,但是大部分情况使用默认值就可以运行。很重要,但是太多了,用的时候查查把,记不住记不住···

  typeAliases别名

  类的全限定名称太长,需要大量使用的时候,就可以定义一个别名。除了配置文件中配置,也可以使用TypeAliasRegistry的registerAlias方法注册别名。一般通过Configuration.getTypeAliasRegustry()获取TypeAliasRegistry类对象。起别名的时候不要重复命名,导致出现其他问题

  XML中配置自定义的别名时,可以用typeAlias子标签去定义一个类的别名。也可以用package子标签去扫描整个包的类。并用其类名不区分大小写的方式作为别名。

互联网轻量级框架SSM-查缺补漏第三天的更多相关文章

  1. 互联网轻量级框架SSM-查缺补漏第六天【级联+延迟加载特辑】

    简言:本来这是昨天看的,但是因为想好好写一下[级联]这个东西,所以就看完之后今天来整理一下. 级联 1. 什么是级联 级联是一个数据库实体的概念.比如教师就需要存在学生与之对应,这样就有教师学生表,一 ...

  2. 互联网轻量级框架SSM-查缺补漏第八天(MyBatis插件plugin使用及原理)

    简言:今天进行第八天的记录(只是写了八天).有的时候看的多,有的时候看的少,看的少的时候就攒几天一起写了.而今天这个插件我昨天写了一下午,下班没写完就回去了,今天把尾收了,再加上一个过程图方便下面原理 ...

  3. 互联网轻量级框架SSM-查缺补漏第一天

    简言:工欲其事必先利其器,作为一个大四的准毕业生,在实习期准备抽空补一下基础.SSM框架作为互联网的主流框架,在会使用的基础上还要了解其原理,我觉得会对未来的职场会有帮助的.我特意的买了一本<J ...

  4. Java EE互联网轻量级框架整合开发— SSM框架(中文版带书签)、原书代码

    Java EE互联网轻量级框架整合开发 第1部分 入门和技术基础 第1章 认识SSM框架和Redis 2 1.1 Spring框架 2 1.2 MyBatis简介 6 1.3 Spring MVC简介 ...

  5. Android查缺补漏(View篇)--自定义View利器Canvas和Paint详解

    上篇文章介绍了自定义View的创建流程,从宏观上给出了一个自定义View的创建步骤,本篇是上一篇文章的延续,介绍了自定义View中两个必不可少的工具Canvas和Paint,从细节上更进一步的讲解自定 ...

  6. Android查缺补漏(IPC篇)-- Bundle、文件共享、ContentProvider、Messenger四种进程间通讯介绍

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8387752.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  7. Android查缺补漏(IPC篇)-- 款进程通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  8. Android查缺补漏(线程篇)-- AsyncTask的使用及原理详细分析

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8515304.html 一.AsyncTask的使用 AsyncTask是一种轻 ...

  9. Android查缺补漏(IPC篇)-- 进程间通讯之AIDL详解

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8436529.html 进程间通讯篇系列文章目录: Android查缺补漏(IP ...

  10. CSS查缺补漏篇

    前面的话:关于CSS,之前我已经做过一些基础的知识点介绍.CSS主要是用来给页面设置样式的,一般说来,在一个网站中,CSS应该独立封装在一个单独的.css外部文件中.样式的设置总体来说是不难的,但是需 ...

随机推荐

  1. linux系统下运行java项目的脚本编写

    本文主要讲linux系统下运行jar包,至于如何打包jar包,放到linux系统下可以参考其他的博客. 在linux系统下运行jar包的命令如下: 1.java -jar xxxxx.jar  //  ...

  2. CSS z-index在ie67中不起作用

    在chrome浏览器中可以看到这样的效果: 但是在ie67中看到的是: 这是z-index在ie浏览器中的一个兼容性问题: 一般来说z-index越大,层级越高,就会越在顶层显示,但是在ie67浏览器 ...

  3. CDQZ Day5

    1DP #1题目名称 题目名称匹配块路径染色输入文件名 输入文件名match.in.in.inblock.inpath.inpaint.in输出文件名 输出文件名match.out.out.out.o ...

  4. Little Sub and Traveling(杭师大第十二届校赛E题) 欧拉回路

    题目传送门 题目大意: 从0出发,每次只能跳到(i*2)%n或者(i*2+1)%n,求字典序最大的哈密顿回路. 思路: 首先n为奇数时无解,先来证明这一点. 先假设n为奇数,若要回到原点,则必定有一步 ...

  5. pipenv 虚拟环境新玩法

    首先,虚拟环境本质是一个文件,是为了适应不同的项目而存在.pipenv相当于virtualenv和pip的合体. pipenv主要有以下特性: (1)pipenv集成了pip,virtualenv两者 ...

  6. dsad

    dasdas dasdas dasdas dasdas

  7. 简说LINUX 下chmod|chown|chgrp和用法和区别

    1.chgrp(改变文件所属用户组) chgrp 用户组    文件名    ###就是这个格了.如果整个目录下的都改,则加-R参数用于递归. 如:chgrp  -R    user  smb.con ...

  8. 一分钟看懂Docker的网络模式和跨主机通信

    文章转载自:http://www.a-site.cn/article/169899.html   Docker的四种网络模式Bridge模式 当Docker进程启动时,会在主机上创建一个名为docke ...

  9. Spring异常:Annotation-specified bean name.. for bean class ...

    Spring重命名问题.对照项目中的注解,查找@Service是否重重名.由于Spring是在注解下按配置扫描的方式去创建对象的,那么两个重名的注解也就不成立了. 备注,特别注意test包下有没有通过 ...

  10. Request笔记

    1 Request 的简介和运行环境 1.HttpServletRequest 概述 我们在创建 Servlet 时会覆盖 service()方法,或 doGet()/doPost(),这些方法都有两 ...