• 二、MyBatis 框架 XML 标签总结




           MyBatis 真正的核心在映射文件中,通过映射的形式节省了大量的 JDBC 代码。而且将 SQL 语句独立在 Java 代码之外,可以进行更为细致的 SQL 优化。


    一、mybatis-config.xml:核心配置文件(数据源配置)



           mybatis-config.xml 中的内容几乎是固定的,大多是配置一些数据库相关配置,mapper.xml 文件的映射关系配置,以及实体类别名配置等等。

           在核心配置文件中有严格的顺序要求,如果标签放的顺序不对,就会报错。
    • 标签顺序图:
      在这里插入图片描述

    标签详解

    • 数据源配置

      • configuration:声明在标签里面的信息是配置信息

        • environments :声明在该标签内的环境变量,default表示默认的环境变量,一个 environment 表示一个jdbc连接数据库,如果有很多数据库的话就需要用到不同的环境变量。

          • environment :声明环境变量

          • transactionManager :声明事务管理器,通过 type属性来控制 MyBatis 使用那种事务管理。有JDBC(基于jdbc的事务) 和 MANAGED(托管的事务)两种事务。

            • JDBC事务:使用 JdbcTransactionFactory 事务工厂,由 MyBatis 独立管理事务,直接使用JDK提供的 java.sql.Connection 对象来管理事务的各个环节:提交(commit())、回滚(rollback())、关闭(close())等操作;

            • MANAGED事务:使用 ManagedTransactionFactory 事务工厂,MyBatis 不负责持久层管理事务,而是将事务管理托付给其他框架,比如 Spring等;

          • dataSource :声名数据源,数据源的类型有NOPOOLED ,POOLED ,还有JIDN,在数据量少的话用ONPOOLED,测试和开发过程一般用POOLED,实际运行使用JIDN

            • property:配置数据源



    • 配置 mapper.xml 映射关系

      • mappers:声明一个或者多个 mapper.xml,与这些xml产生映射关系

        • mapper:配置这些 XML 的路径

    • 配置实体类别名,配置完之后mapper.xml中无需配置实体类全路径,直接引用别名即可

      • typeAliases: 为实体类路径起别名

        • typeAlias
          • type :配置实体类路径
          • alias: 配置别名

    注:使用该标签为实体类路径做映射时需要搭配 @Alias(“实体类名”)使用,直接放在实体类上即可

    在这里插入图片描述


    setting 设置



    • mybatis-config.xml 实例:

      	<?xml version="1.0" encoding="UTF8"?>
      	<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"
      	        "http://mybatis.org/dtd/mybatis-3-config.dtd">  
      	<configuration>
      
      	  <!--设置启用数据库字段下划线映射到java对象的驼峰式命名属性,默认为false-->
      	  <settings>
      	        <setting name="mapUnderscoreToCamelCase" value="true"/>
      	        <!-- 打印sql语句-->
      	        <setting name="logImpl" value="STDOUT_LOGGING"/>
      	  </settings>
      
      	  <!-- 配置实体类路径别名 -->
            <typeAliases>
              <typeAlias type="com.demo_02.entity.Teacher" alias="Teacher"/>
              <typeAlias type="com.demo_02.entity.Student" alias="Student"/>
            </typeAliases>
            
      	    <!-- 配置数据源,可以是多个数据源。default 属性:调用那个数据源-->
      	    <environments default="mysql">
      	    
      	        <!-- 数据源1 -->
      	        <environment id="mysql">
      	            <!-- 配置事务管理器类型,JDBC 是 JdbcTransactionFactory.class 的别名 -->
      	            <transactionManager type="JDBC"></transactionManager>
      	            <!-- 配置数据源。POOLED 是 PooledDataSourceFactory.class 的别名 -->
      	            <dataSource type="POOLED">
      	                <property name="driver" value="com.mysql.jdbc.Driver"/>
                      	<property name="url" value="url"/>
      	                <property name="username" value="username"/>
      	                <property name="password" value="password"/>
      	            </dataSource>
      	        </environment>
      
      			<!-- 数据源2 -->
      	        <environment id="mysqls">
      	            <transactionManager type="JDBC"></transactionManager>
      	            <dataSource type="POOLED">
      	                <property name="driver" value="com.mysql.jdbc.Driver"/>
      	                <property name="url" value="url"/>
      	                <property name="username" value="username"/>
      	                <property name="password" value="password"/>
      	            </dataSource>
      	        </environment>
      	        
      	    </environments>
      	    
      	   <!-- 配置写sql的xml文件,该文件需要是在resources文件下,不然映射不到该文件 -->
      	    <mappers>
      	        <mapper resource="mapper/XXX.xml"></mapper>
      	        <mapper resource="mapper/XXX.xml"></mapper>
      	        <mapper resource="mapper/XXX.xml"></mapper>
      	    </mappers>
      	    
      	</configuration>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55




    二、生命周期和作用域


           在MyBatis 框架的学习中,生命周期和作用域这一环节是至关重要的,如果错误的使用生命周期和作用域,可能会导致严重的并发问题,这在开发中是绝对不允许的。
    • 生命周期及作用域流程图

    在这里插入图片描述

    • SqlSessionFactoryBuilder: 程序开始读取 mybatis-config.xml 文件创建 SqlSessionFactory 工厂,当工厂创建完成之后便不在需要 SqlSessionFactoryBuilder 了。

    • SqlSessionFactory: 可以理解为数据库连接池

      • SqlSessionFactory 在程序的运行期间一直存在,且不可丢弃也不能重新创建新的 SqlSessionFactory 工厂。

      • SqlSessionFactory 的最佳作用域是应用作用域。

    • SqlSession:

      • SqlSession 是连接到数据库连接池的一个请求!
      • SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。
      • 用完后需要赶紧关闭,否则资源被占用!
           通过 SqlSession 实例创建 Mapper 接口的代理对象,通过代理对象便可以调用接口中的 mapper 方法了。最后将 SqlSession 实例以及 SqlSessionFactory 工厂关闭,程序结束。



    三、MyBatis 框架 XML 常用标签


           这类 XML 通常被定义为 XXXMapper.xml,其中标签的内容大多是编写 SQL 语句,或者围绕着编写 sql 语句而存在的。主要有外级标签(最外层的标签),顶级标签和动态标签。


    1、mybatis 的 mapper 映射器引入映射文件

           mapper 标签主要作用是将映射文件引入到当前 XML 文件中。
    • mapper
      • 属性:namespace,该属性内容需要和 mapper 接口的路径完全一致,以此来与接口产生映射关系。
    • XML 文件示例:
    
    DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.demo.mapper.XXXMapper" >
    mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5



    2、顶级标签详解( selectinsertupdatedeletesqlresultMap)以及 OGNL 表达式的使用




    3、动态标签详解: ifwheretrimsetforeachchoosesqlincludebind

  • 相关阅读:
    四川竹哲电子商务有限公司为创业者保驾护航
    集群配置步骤_java培训
    独立企业签名和共享企业签名的区别
    Integer对象的大小比较
    ASP.net core 8.0网站发布
    低代码如何改变IT行业小作坊生产模式
    vxe-table表格校验失败后保持可以编辑状态
    使用Boost C++库中的`boost::math`模块来查找正态分布的均值或标准差的示例
    电脑mp4格式视频打不开怎么解决?
    japonensisjava乱码_Java乱码问题原因及解决方案
  • 原文地址:https://blog.csdn.net/shiyu_951/article/details/127959701