三、MyBatis 框架核心配置文件、生命周期和作用域与 常用 XML 标签总结

本文介绍MyBatis框架的核心配置文件mybatis-config.xml的内容与结构,包括数据源配置、环境变量设置、实体类别名配置等。同时探讨了MyBatis的生命周期与作用域,以及常用的XML标签如select、insert等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



       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>
    




二、生命周期和作用域


       在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 文件示例:
<?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">
<!-- namespace名字必须与dao包路径接口名完全相同 -->
<mapper namespace="com.demo.mapper.XXXMapper" >
</mapper>



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




3、动态标签详解: ifwheretrimsetforeachchoosesqlincludebind

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值