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 入门到精通(一) 了解MyBatis获取SqlSession_第1张图片
 
我们把Mybatis的功能架构分为三层:

1、API接口层:

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

2、数据处理层:

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

3、基础支撑层:

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

从XML中构建SqlSessionFactory

[java] view plain copy
  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 配置文件包含对MyBatis系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器。
 
[html] view plain copy
  1. xml version="1.0" encoding="UTF-8"?>  
  2. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4. <configuration>  
  5.   
  6.       
  7.     <properties resource="properties/datasource.properties" />  
  8.   
  9.     <settings>  
  10.         <setting name="cacheEnabled" value="true" />  
  11.         <setting name="lazyLoadingEnabled" value="true" />  
  12.         <setting name="multipleResultSetsEnabled" value="true" />  
  13.         <setting name="useColumnLabel" value="true" />  
  14.         <setting name="useGeneratedKeys" value="false" />  
  15.         <setting name="defaultExecutorType" value="SIMPLE" />  
  16.         <setting name="defaultStatementTimeout" value="25000" />  
  17.     settings>  
  18.       
  19.       
  20.     <typeAliases>  
  21.         <typeAlias type="com.accp.mybatis.model.Blog" alias="Blog"/>  
  22.     typeAliases>  
  23.       
  24.       
  25.       
  26.     <environments default="accp">  
  27.       
  28.     <mappers>  
  29.         <mapper resource="com/accp/mybatis/data/BlogMapper.xml" />  
  30.     mappers>  
  31. configuration>  

从SqlSessionFactory中获取SqlSession

通过以下代码获得SqlSession实例。
[java] view plain copy
  1. SqlSession session = sqlMapper.openSession(); 

你可能感兴趣的:(MyBatis 入门到精通(一) 了解MyBatis获取SqlSession)