MyBatis

  • 主流框架
    • Stuts2框架
    • Hibernate框架
    • Sping框架
    • SpingMVC框架
    • MyBatis框架
  • 数据持久化
    • MyBatis框架是一个开源的持久层框架,内部封装通过JDBC访问数据库的操作,支持普通的SQL查询,存储过程和高级映射。
  • ORM
    • 即对象/关系映射,是一种数据持久化技术,在对象模型和关系型数据库之间建立对应关系,且提供了一种机制。
  • 功能架构
    • (1)API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
    • (2)数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
    • (3)基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
    • MyBatis
  • 框架架构
    • (1)加载配置:配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
    • (2)SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数。
    • (3)SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。
    • (4)结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回。
    • MyBatis
  • spring事务配置
    • copy
    • <!--自动扫描业务包-->
    • <context:component-scanbase-package="com.xxx.service"/>
    • <!--数据源-->
    • <jee:jndi-lookupid="jndiDataSource"jndi-name="java:comp/env/jdbc/datasource"/>
    • <!--配置事务-->
    • <bean id="txManager"
    • class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    • <propertyname="dataSource"ref="jndiDataSource"/>
    • </bean>
    • <!--配置基于注解的事物aop-->
    • <tx:annotation-driventransaction-manager="txManager"proxy-target-class="true"/>
  • configuration-xml核心配置文件
    • <?xml version="1.0" encoding="UTF-8" ?>
    • <!DOCTYPE configuration
    • PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    • "http://mybatis.org/dtd/mybatis-3-config.dtd">
    • <configuration>
    • <!-- 配置数据源信息 -->
    • <properties resource="jdbc.properties"/>
    • <!--
    • 类型别名只是Java类型的别名,它可以有效减少Xml配置文件中映射查询语句里
    • 返回类型(resultType)为自定义实体类的完全限定名冗余
    • -->
    • <typeAliases>
    • <typeAlias alias="narCode" type="com.test.model.NarCode" />
    • </typeAliases>
    • <!--
    • 获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)
    • -->
    • <environments default="development">
    • <environment id="development">
    • <transactionManager type="JDBC"/>
    • <dataSource type="POOLED">
    • <property name="driver" value="${datasource.driverClassName}" />
    • <property name="url" value="${datasource.url}" />
    • <property name="username" value="${datasource.username}" />
    • <property name="password" value="${datasource.password}" />
    • </dataSource>
    • </environment>
    • </environments>
    • <!-- 程序中所用到sql映射文件都在这里列出,这些映射sql都被Mybatis管理 -->
    • <mappers>
    • <mapper resource="com/test/xml/NarCodeMapper.xml" />
    • </mappers>
    • </configuration>
  • configuration-xml核心配置文件详解
    • configuration:配置文件的根节点
    • properties :通过resource属性从外部指定的properties属性文件(database.properties),属性文件描述数据连接的相关配置,位置也是在resource目录下
    • setting:设置MyBatis运行中的一些行为。
    • ennvironments:表示配置MyBitis的多套运行环境,讲SQL映射待多个不同的数据库上该元素节点下可以配置多个ennvironment子元素节点,但是必须指定其中一个默认的运行环境
    • environment:配置MyBatis的一套运行环境,需要指定的ID,事物管理,数据源配置等相关信息
    • mappers:告诉MyBatis去哪里找SQL映射文件
    • mapper:mapper的子元素节点,具体指定的SQL映射文件的路径,其中resource属性的值表述了SQL映射文件的路径
    • 注意:
      • MyBatis-config.xml文件的元素节点是有一定顺序的,节点位置不按顺序排位,那么XML文件会报错
  • xml映射文件[已映射的 SQL 语句](NarCodeMapper.xml):
    • <?xml version="1.0" encoding="UTF-8" ?>
    • <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    • <!-- 在sql映射文件中,Mybatis中namespace终于派上用场,它使得映射文件和接口之间的绑定变的非常自然。
    • 在iBatis中namespace不是必须的
    • -->
    • <mapper namespace="com.test.dao.NarCodeMapper">
    • <resultMap id="BaseResultMap" type="narCode">
    • <id column="id" property="id" jdbcType="VARCHAR" />
    • <result column="cnt" property="cnt" jdbcType="VARCHAR" />
    • <result column="parentid" property="parentid" jdbcType="VARCHAR" />
    • <result column="dlevel" property="dlevel" jdbcType="VARCHAR" />
    • </resultMap>
    • <!-- 根据id来查询 -->
    • <select id="getNarCode" parameterType="java.lang.String"
    • resultType="narCode">
    • select a.id,a.cnt,a.parentid,a.dlevel,a.rowid from nar_code a
    • where a.id = #{id,jdbcType=VARCHAR}
    • </select>
    • </mapper>
  • MyBatis的核心接口和类
    • SqlSessionFactoryBuilder
    • SqlSessionFactory
    • SQLSession
    • 三者关系如下
    • MyBatis
    • 注:
      • 1、SqlSessionFactory是我们MyBatis整个应用程序的中心;整个程序都是以SqlSessionFactory的实例为核心的。
      • 2、SqlSessionFactory对象是由SqlSessionFactoryBuilder对象创建而来的。
      • 3、SqlSessionFactoryBuilder是通过xml配置文件或者configuration类的实例去构造这个对象。然后调用build()方法去构造SqlSessionFactory对象。
      • 4、使用SqlSessionFactory对象的openSession()方法来获取SqlSession对象,有了SqlSession对象,我们就可以去进行数据库操作了,因为SqlSession里面包含了以数据库为背景所有执行sql操作的方法。
    • SqlSessionFactoryBuilder
      • 用过即丢,其生命周期只存在于方法体内
      • 可重用其来创建多个SqlSessionFactory实例
      • 负责构建SqlSessionFactory,并提供多个build方法的重载
      • MyBatis
    • SqlSessionFactory对象
      • 在使用openSession()方法创建一个SqlSession对象的时候传了一个布尔型的参数。
      • MyBatis
    • SqlSession
      • 包含了自行SQL所需的所有方法
      • 对应一次数据库会话,会话结束必须关闭
      • 线程级别,不能共享
      • MyBatis
      • MyBatis
    • SqlSession的两种使用方式
      • 调用sqlSession.selectList()执行查询操作
      • 调用sqlSession.getmapper(Mapper.class)执行DAO接口方法来实现对数据的查询操作框架是一个提供了可重用的公共结构的半成品,他为构建新的应用提供了极大的便利
      • 数据持久化是讲内存中的数据模型转化为存储模型,以及将存储模型转换为内存中的数据模型的系统
      • ORM(Object/Relational Mapping ) 即对象/关系数据映射,也可以理解成为一种数据持久化技术
      • MyBatis的基本要素包括核心对象,核心配置文件,SQL映射文件
上一篇:mybatis-spring 启动过程和调用过程


下一篇:MyBatis