`

MyBatis 入门到精通(一) 了解MyBatis获取SqlSession

 
阅读更多

MyBatis是什么?

MyBatis是一款一流的支持自定义SQL、存储过程和高级映射的持久化框架。MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果。MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素、Map接口和POJOs(普通java对象)到数据库中的记录。

 

简介

 

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
 
 
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
 

MyBatis工作流程

(1)加载配置并初始化
触发条件:加载配置文件
配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
(2)接收调用请求
触发条件:调用Mybatis提供的API
传入参数:为SQL的ID和传入参数对象
处理过程:将请求传递给下层的请求处理层进行处理。
(3)处理操作请求 触发条件:API接口层传递请求过来
传入参数:为SQL的ID和传入参数对象
处理过程:
(A)根据SQL的ID查找对应的MappedStatement对象。
(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
(E)释放连接资源。
(4)返回处理结果将最终的处理结果返回。
 
 

功能架构

 
我们把Mybatis的功能架构分为三层:

1、API接口层:

 
提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

2、数据处理层:

 
负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

3、基础支撑层:

 
负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。  
 

从XML中构建SqlSessionFactory

[java] view plaincopy
  1. String resource = "com/accp/mybatis/data/Configuration.xml";    
  2. Reader reader = Resources.getResourceAsReader(resource);    
  3. sqlMapper = new SqlSessionFactoryBuilder().build(reader);    
 

MyBatis主配置文件

MyBatis配置文件中大标签configuration下子标签包括:

configuration

|--- properties

|--- settings

|--- typeAliases

|--- typeHandlers

|--- objectFactory

|--- plugins

|--- environments

|--- |--- environment

|--- |--- |--- transactionManager

|--- |--- |__ dataSource

|__ mappers

XML <configuration>配置文件包含对MyBatis系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器。
 
[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE configuration  
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.   
  7.     <!--在下面的datasource中可以使用占位符来引用属性文件中的值-->  
  8.     <properties resource="properties/datasource.properties" />  
  9.   
  10.     <settings>  
  11.         <setting name="cacheEnabled" value="true" />  
  12.         <setting name="lazyLoadingEnabled" value="true" />  
  13.         <setting name="multipleResultSetsEnabled" value="true" />  
  14.         <setting name="useColumnLabel" value="true" />  
  15.         <setting name="useGeneratedKeys" value="false" />  
  16.         <setting name="defaultExecutorType" value="SIMPLE" />  
  17.         <setting name="defaultStatementTimeout" value="25000" />  
  18.     </settings>  
  19.       
  20.     <!-- 配置别名 类型别名是Java 类型的简称。它仅仅只是关联到XML 配置,简写冗长的JAVA 类名。-->  
  21.     <typeAliases>  
  22.         <typeAlias type="com.accp.mybatis.model.Blog" alias="Blog"/>  
  23.     </typeAliases>  
  24.     <!-- 使用这个配置,"Blog"就能在任何地方代替"com.accp.mybatis.model.Blog"被使用。-->  
  25.       
  26.     <!--  
  27.     java 中一些简单类型的别名  
  28.         别名  映射的类型   
  29.         _byte  byte   
  30.         _long  long   
  31.         _short  short   
  32.         _int   int    
  33.         _integer   int    
  34.         _double  double   
  35.         _float   float    
  36.         _boolean  boolean   
  37.         string  String   
  38.         byte  Byte   
  39.         long  Long   
  40.         short  Short   
  41.         int   Integer   
  42.         integer   Integer   
  43.         double  Double   
  44.         float   Float    
  45.         boolean  Boolean   
  46.         date  Date   
  47.         decimal  BigDecimal   
  48.         bigdecimal  BigDecimal   
  49.         object  Object   
  50.         map  Map   
  51.         hashmap  HashMap   
  52.         list  List    
  53.         arraylist  ArrayList   
  54.         collection  Collection   
  55.         iterator  Iterator  
  56.     -->  
  57.       
  58.   
  59.     <!-- 每个数据库(environment)对应一个SqlSessionFactory 实例-->  
  60.     <environments default="accp">  
  61.     <!--   
  62.         environments对于一个应用可能连接多个数据库,那就需要配置不同的环境来连接不同的数据库,  
  63.         每一个SqlSessionFactory对应一个environments也可以设置不同的环境应用于开发或测试的环境如果环境被忽略,  
  64.         那么默认环境将会被加载,也就是default="development"的作用了  
  65.     -->  
  66.         <environment id="accp">  
  67.             <transactionManager type="JDBC" />  
  68.             <!--   
  69.                 transactionManager设置事物的管理类型是 type=”[JDBC|MANAGED]”  
  70.                 JDBC使用datasource的连接来管理事物范围。  
  71.                 MANAGED自己不进行事物的提交和回滚,依靠容器来管理事物,设置closeConnection为false,取消自动关闭连接   
  72.             -->  
  73.             <dataSource type="POOLED">  
  74.             <!--  
  75.                 dataSource设置数据源[UNPOOLED|POOLED|JNDI]  
  76.                 POOLED:每次被请求时简单打开和关闭连接  
  77.                 POOLED:JDBC 连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。  
  78.                 poolMaximumActiveConnections –  在任意时间存在的活动(也就是正在使用)连接的数量。默认值:10   
  79.                 poolMaximumIdleConnections –  任意时间存在的空闲连接数。  
  80.                 oolMaximumCheckoutTime –  在被强制返回之前,池中连接被检查的时间。默认值:20000 毫秒(也就是 20 秒)  
  81.                 poolTimeToWait – 这是给连接池一个打印日志状态机会的低层次设置,还有重新尝试获得连接,这些情况下往往需要很长时间(为了避免连接池没有配置时静默失败)。 默认值:20000 毫秒(也就是 20 秒)  
  82.                 poolPingQuery –  发送到数据的侦测查询,用来验证连接是否正常工作,并且准备接受请求。默认是“NO PING QUERY SET”,这会引起许多数据库驱动连接由一个错误信 息而导致失败。   
  83.                 poolPingEnabled  –  这是开启或禁用侦测查询。如果开启,你必须用一个合法的SQL语句(最好是很快速的)设置 poolPingQuery 属性。默认值:false。  
  84.                 poolPingConnectionsNotUsedFor  –  这是用来配置 poolPingQuery 多次时间被用一次。这可以被设置匹配标准的数据库连接超时时间,来避免不必要的侦测。默认值:0 (也就是所有连接每一时刻都被侦测-但仅仅当 poolPingEnabled 为 true 时适用)。    
  85.                 JNDI –  这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。  
  86.                 initial_context  –  这个属性用来从初始上下文中寻找环境(也就是initialContext.lookup(init ial——context))。这是个可选属性,如果被忽略,那么data_source 属性将 会直接以 init ialContext 为背景再次寻找。   
  87.                 data_source  –  这是引用数据源实例位置的上下文的路径。它会以由 init ial_context查询返回的环境为背景来查找,如果 init ial_context 没有返回结果时,直接以初始上下 文为环境来查找。  
  88.             -->  
  89.                 <property name="driver" value="${driver}" />  
  90.                 <property name="url" value="${url}" />  
  91.                 <property name="username" value="${username}" />  
  92.                 <property name="password" value="${password}" />  
  93.                 <property name="driver.encoding" value="${encoding}" />  
  94.             </dataSource>  
  95.         </environment>  
  96.     </environments>  
  97.   
  98.     <!--mappers是告诉MyBatis 去哪寻找映射SQL 的语句。可以使用类路径中的资源引用,或者使用字符,输入确切的URL 引用。-->  
  99.     <mappers>  
  100.         <mapper resource="com/accp/mybatis/data/BlogMapper.xml" />  
  101.     </mappers>  
  102. </configuration>  

 

从SqlSessionFactory中获取SqlSession

通过以下代码获得SqlSession实例。
[java] view plaincopy
  1. SqlSession session = sqlMapper.openSession();  
MyBatis包和sql脚本  mysql的
分享到:
评论

相关推荐

    SpringBoot+MyBatis+SqlSession

    在IT行业中,SpringBoot、MyBatis和SqlSession是三个非常关键的技术组件,它们共同构建了一个高效、便捷的Web应用程序开发环境。让我们深入探讨一下这三个技术及其在项目中的结合使用。 首先,SpringBoot是由...

    MyBatis入门.pdf

    MyBatis入门 MyBatis是一个优秀的持久层框架,使用XML将SQL与程序解耦,便于维护。MyBatis学习简单,执行高效,是JDBC的延伸。MyBatis提供了数据库增删改查的便捷操作,极大提高了开发效率、统一的编码规则、利于...

    MyBatis入门到精通配套资源

    1. **MyBatis简介**:MyBatis是一个轻量级的ORM(对象关系映射)框架,它允许开发者直接编写SQL语句,同时还能享受到自动数据绑定和事务管理等便利。相对于Hibernate,MyBatis更加灵活,适合对SQL有高度定制需求的...

    MyBatis3入门到精通教程

    MyBatis内置了两级缓存,一级缓存在SqlSession级别,二级缓存在Mapper级别。合理利用缓存可以显著提升应用性能,但需要注意缓存同步和更新策略,避免出现数据不一致的情况。 8. **事务管理** MyBatis支持手动和...

    mybatis获取SqlSession源代码流程

    mybatis获取SqlSession源代码流程

    mybatis入门实战之一

    在"mybatis入门实战之一"中,我们将深入探讨MyBatis的基础知识,包括它的安装配置、基本用法以及如何进行简单的增删改查操作。这个实战教程特别适合初学者,因为它涵盖了开发过程中常用的工具如log日志记录和Maven...

    mybatis从入门到精通的学习代码.rar

    在这个名为"mybatis从入门到精通的学习代码.rar"的压缩包中,你将找到一系列与MyBatis相关的学习资料,包括代码示例,这些示例将帮助你逐步掌握MyBatis的核心概念和使用方法。通过配合提供的博客链接...

    MyBatis从入门.7z

    通过这个"从入门到精通"的学习资源,我们可以全面了解MyBatis的基本用法,并逐渐掌握其高级特性,为实际项目开发打下坚实基础。对于初学者来说,这是一条很好的学习路径,从简单的增删改查开始,逐渐深入到复杂的...

    MyBatis 从入门到精通书中实例

    本压缩包包含了《MyBatis 从入门到精通》一书中的实例源码,涵盖了从基础到高级的各种用法。下面,我们将详细探讨这些知识点。 首先,让我们来了解MyBatis的基本用法。MyBatis 的核心是SQL映射文件,它将SQL语句与...

    4.2mybatis入门教程(一)

    MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使你更好地将注意力集中在你的业务逻辑上,而不是数据库层面上。 ### 1. 基础知识 #### 1.1 JDBC 问题 在使用原生 JDBC 开发时,...

    第一个mybatis程序 mybatis入门

    【标题】"第一个mybatis程序 mybatis入门" 涉及到的是MyBatis框架的基础使用,这是一个轻量级的Java持久层框架,它简化了与数据库交互的过程,提供了强大的映射功能。以下是对MyBatis入门的详细解析: 1. **MyBatis...

    mybatis入门级资源

    MyBatis 是一款深受开发者喜爱的持久层框架,它简化了Java开发中数据库操作的复杂性,使得开发者能够更专注于业务逻辑的实现。本资源集合是针对MyBatis入门学习者设计的,涵盖了MyBatis的基本概念、核心功能以及实际...

    mybatis入门项目代码

    【标题】"mybatis入门项目代码"涉及到的是MyBatis框架的基础使用教程,这是一个轻量级的持久层框架,用于简化Java开发中的数据库操作。MyBatis允许开发者编写SQL语句,将数据库查询与应用程序逻辑紧密地结合起来,...

    mybatis入门示例项目

    MyBatis是一个优秀的Java持久层...通过这个入门示例项目,你可以了解MyBatis如何与数据库交互、配置映射文件、进行单元测试以及日志记录。这将为你进一步学习MyBatis的高级特性,如缓存、动态SQL、关联映射等奠定基础。

    MyBatis经典入门实例

    这个经典入门实例旨在为初学者提供一个快速理解MyBatis基本概念和操作方式的平台。通过学习这个实例,你可以掌握如何在实际项目中使用MyBatis进行数据操作。 首先,我们需要了解MyBatis的核心概念。MyBatis的核心是...

    Mybatis入门程序实现增删改查

    本入门程序旨在帮助初学者掌握Mybatis的基本使用,包括如何进行数据库的增删改查操作。下面我们将深入探讨这个主题。 首先,我们来了解Mybatis的核心概念: 1. **SqlSessionFactory**: 这是Mybatis的主要入口点,...

    Mybatis入门JavaSE案例

    Mybatis 是一款流行的开源持久层框架,用于简化Java应用程序中的数据库操作。它的核心特性在于将SQL语句与Java代码分离,使得开发人员可以更灵活地管理数据库查询。在这个"Mybatis入门JavaSE案例"中,我们将深入理解...

    Mybatis入门案例IDEA最新版本

    ### Mybatis框架入门知识点详解 #### 一、框架与Mybatis概述 1. **框架定义**: - **广义定义**:框架是一种系统性的、可重用的设计方案,表现为一组抽象组件及其交互方法。 - **狭义定义**:框架是可由应用...

    Mybatis入门项目实例

    这个入门项目实例将带你深入了解Mybatis的核心概念和基本用法。首先,我们来分析一下提供的文件内容。 1. **用户指南(图片文件)** - `111115114.jpg`、`1.png`、`2.png`、`3.png`:这些很可能是项目教程或步骤的...

    mybatis从入门到精通.docx

    3.5.3 程序编写:在测试类中,通过SqlSession对象调用映射方法,例如`findUserByIdTest`方法,执行SQL查询并获取结果。 【MyBatis核心概念】 1. `SqlSessionFactoryBuilder`:用于构建`SqlSessionFactory`,它是...

Global site tag (gtag.js) - Google Analytics