MyBatis 之配置与映射核心要点解析

简介: 本文详解MyBatis核心配置文件(properties、settings、plugins、typeAliases、environments、mappers)与映射文件(resultMap、sql/include、特殊字符处理),助你掌握动态配置、自定义映射及SQL复用技巧。

🎉 前言

本文来讲解MyBatis中的的重点内容:配置文件 和 映射文件

学完本节,将会理解和掌握配置、映射文件

个人主页:艺杯羹🌿

系列专栏:MyBatis🚀

1. 配置文件

先来看看配置文件的结构

-configuration
    -properties(属性)
        -property
    -settings(全局配置参数)
        -setting
    -plugins(插件)
        -plugin
    -typeAliases(别名)
        -typeAliase
        -package
    -environments(环境)
        -environment
            -transactionManager(事务管理)
            -dataSource(数据源)
    -mappers(映射器)
        -mapper
        -package

1.1. properties

属性值定义
properties标签中可以定义属性值,也可以引入外部配置文件
无论是内部定义还是外部引入,都可以使用 ${name}获取值
可以动态的配置数据源

例如:我们可以将数据源配置写到外部的 db.properties 中,再使用properties标签引入外部配置文件,这样可以做到动态配置数据源
下面来演示一下

1.1.1. 编写db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

1.1.2. 在配置文件中引入db.properties

-- 关键一句 
<properties resource="db.properties"></properties>
<environments default="mysql">
  <environment id="mysql">
    <transactionManager type="JDBC"></transactionManager>
    <dataSource type="POOLED">
      <property name="driver" value="${jdbc.driver}"/>
      <property name="url" value="${jdbc.url}"/>
      <property name="username" value="${jdbc.username}"/>
      <property name="password" value="${jdbc.password}"/>
    </dataSource>
  </environment>
</environments>

1.2. settings

是配置MyBatis运行时的一些行为的  例如 缓存、延迟加载、命名规则等一系列控制性参数  后期我们会使用该标签配置缓存和延迟加载等。

1.3. plugins

是配置MyBatis插件的  插件可以增强MyBatis功能,比如进行sql增强,打印日志,异常处理等  后期我们会使用该标签配置分页插件

1.4. typeAliases

MyBatis对常用类有默认别名支持
比如java.lang.Stirng的别名为string
除此之外,我们也可以使用设置自定义别名

1.4.1. 为一个类配置别名

<typeAliases>
    <typeAlias type="全类名" alias="别名"></typeAlias>
</typeAliases>

此时我们即可在映射文件中使用自定义别名,如:

a. 配置文件

<typeAliases>
    <!--设置别名-->
    <typeAlias type="com.yibeigen.pojo.User" alias="User"> </typeAlias>
</typeAliases>
注意:要写在properties下面

b. 映射文件

<!--这里就不用写全类名了,直接写User别名即可-->
<select id="findAll" resultType="User">
   select * from user
</select>

1.4.2. 为一个所有包下的所有类配置别名

<typeAliases>
  <package name="包名"></package>
</typeAliases>

 此时该包下的所有类都有了别名,别名省略包名,也就是直接写类名即可。例如:

a. 配置文件

<typeAliases>
  <package name="com.yibeigen.pojo"></package>
</typeAliases>

b. 映射文件

<!--直接写返回值类型就可以了,因为省略了包名-->
<select id="findPage2" resultType="User" parameterType="PageQuery">
   select * from user limit #{startIndex},#{pageSize}
</select>

1.5. environments

可以为MyBatis配置数据环境

1.5.1. 事务管理

<environments default="mysql">
  <environment id="mysql">
    <!--
    type的参数 
    JDBC:使用JDBC的提交和回滚 MANAGED:不做事务处理
    -->
    <transactionManager type="JDBC"></transactionManager>
  </environment>
</environments>

1.5.2. 连接池

<environments default="mysql">
  <environment id="mysql">
    <transactionManager type="JDBC"></transactionManager>
    <!-- 连接池设置 -->
    <dataSource type="POOLED">
      <!-- 数据源设置... -->
    </dataSource>
  </environment>
</environments>

dataSource的type属性:

  • POOLED:使用连接池管理连接,使用MyBatis自带的连接池。
  • UNPOOLED:不使用连接池,直接由JDBC连接。
  • JNDI:由JAVAEE服务器管理连接,如果使用Tomcat作为服务器则使用Tomcat自带的连接池管理

1.6. mappers

用于注册映射文件或持久层接口  只有注册的映射文件才能使用,共有四种方式都可以完成注册:

1.6.1. 使用相对路径注册映射文件

<mappers>
 <mapper resource="com/yibeigen/mapper/UserMapper.xml"/>
</mappers>

1.6.2. 使用绝对路径注册映射文件

<mappers>  
  <mapper url="file:///C:\Users\a\IdeaProjects\mybatiscase\mybatisDemo1\src\main\resources\com\itbaizhan\mapper\UserMapper.xml"/> 
</mappers>

1.6.3. 注册持久层接口

<mappers>  
  <mapper class="com.yibeigen.mapper.UserMapper"/> 
</mappers>

1.6.4. 注册一个包下的所有持久层接口

<mappers>
  <package name="com.yibeigen.mapper"/>
</mappers>

也就是,要么注册接口,要么注册xml文件

2. 映射文件

MyBatis映射文件中除了、、、外,还有一些标签可以使用:

2.1. resultMap

标签的作用的自定义映射关系
MyBatis可以将数据库结果集封装到对象中,是因为结果集的列名和对象属性名相同
那如果结果集合对象属性不相同时,MyBatis就不知道怎么配对了,所以就要用到resultMAp标签来做映射

<select id="findAll" resultType="com.itbaizhan.pojo.Teacher">
   select tid as id,tname as teacherName from teacher;
</select>

MyBatis 默认通过 字段名与属性名完全一致 来自动映射
如果不一致,对应的属性将被设置为 null(不会报错,但数据会丢失)

  • tid as id:把表中的 tid 字段重命名为 id,这样就能和 Teacher 类中的 id 属性相对应。
  • tname as teacherName:将 tname 字段重命名为 teacherName,以和 Teacher 类里的 teacherName 属性相匹配

自定义映射关系

在映射文件中,使用自定义映射关系:

<!-- id:自定义映射名 type:自定义映射的对象类型  -->
<resultMap id="teacherMapper" type="com.itbaizhan.pojo.Teacher">
  <!-- id定义主键列  property:POJO属性名 column:数据库列名  -->
  <id property="id" column="tid"></id>
  <!-- result定义普通列  property:POJO属性名 column:数据库列名  -->
  <result property="teacherName" column="tname"></result>
</resultMap>

在标签中,使用resultMap属性代替resultType属性,使用自定义映射关系

<select id="findAll" resultMap="teacherMapper">
   select * from teacher
</select>

2.2. sql、include

用来定义可重用的Sql片段,通过 引入该片段  如:Sql语句的查询字段起与POJO属性相同的别名,该Sql片段就可以重用

<sql id="selectAllField">
   select tid as id,tname as teacherName
</sql>
<select id="findAll" resultType="com.yibeigen.pojo.Teacher">
  <include refid="selectAllField"></include>
   from teacher;
</select>
<select id="findById" resultType="com.itbaizhan.pojo.Teacher">
  <include refid="selectAllField"></include>
   from teacher where tid = #{id}
</select>

2.3. 特殊字符处理

在Mybatis映射文件中尽量不要使用一些特殊字符,如:<,>等。

我们可以使用符号的实体来表示:



符号

实体

<

<

>

>

&

&

'

&apos;

"

&quot;

例如:

<select id="findById2" resultType="com.yibeigen.pojo.Teacher">
  <include refid="selectAllField"></include>
   from teacher where tid &gt; #{id}
</select>

3. 总结

到此,就结束了配置和映射文件的学习了,希望对你有所帮助 (๑•̀ㅂ•́)و✧

目录
相关文章
|
2月前
|
缓存 人工智能 计算机视觉
Qwen3.8-Flash模型介绍:能力、上下文限制、费用定价详细说明
通义千问最新多模态大模型Qwen3.8-Flash(ID:qwen3.8-flash),原生支持百万级上下文(100万tokens)、文本/图像/视频输入,输出为文本。具备Function Calling、结构化输出、联网搜索(限北京/新加坡)等能力,兼容OpenAI/Anthropic协议,已在阿里云百炼平台开放免费试用(赠100万Tokens)。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
2月前
|
缓存 测试技术 API
大模型API中转站避坑:满血验证、倍率换算与降智识别(附压测代码)
从工程师视角系统梳理大模型API中转站的评估方法:讲清兑换比例与倍率的真实换算关系,给出满血模型验证三招(复杂推理压测、模型指认、长上下文压力测试)与可运行的Python压测脚本,并总结稳定性、协议兼容、计费透明等接入要点和先测后充的避坑建议。
|
2月前
|
Java 程序员 应用服务中间件
Maven之初识与安装
本文详解Maven安装与配置全流程:从基础概念、下载安装、环境变量配置到版本验证,助新手一次理清逻辑、顺利完成部署;涵盖一键构建、依赖管理核心功能,并提供交流支持。
170 0
Maven之初识与安装
|
2月前
|
人工智能 自然语言处理 API
LangChain+LangGraph架构拆解:基于复杂AI任务编排与状态管理的大模型应用开发21.4
本文深度解析LangChain与LangGraph两大主流大模型开发框架:LangChain以链式组件封装实现快速入门与轻量应用;LangGraph则通过有向状态图支持分支、循环、多智能体等复杂编排。二者互补协同,构成从Demo到生产级AI应用的完整技术栈。
197 2
阿里云轻量应用服务器68元/年,新用户特价,不要退款,重新买价格459元,涨价了!
阿里云轻量应用服务器新用户专享价68元/年(2核2G、200M带宽、40GB ESSD),秒杀低至38元。⚠️地域选定后不可修改,退款将失去新用户资格,再购恢复原价459元/年!务必下单前确认地域,避免浪费优惠。阿里云轻量应用服务器官网:https://t.aliyun.com/U/dwftch
|
2月前
|
人工智能 安全 中间件
AI 帮你改了 20 个文件,最后 3 个忘了改——长任务为什么总是"差一口气"?
AI长任务常因“失忆”、误删、静默跳过、截断编造等问题翻车。UseIO通过Plan驱动拆解、检查点回滚、三级安全门控、结构化错误处理与交付前四点复查,构建工程级可靠性防护链,显著提升多文件重构等复杂任务的完成率与稳定性。(239字)
|
2月前
|
人工智能 C语言
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
本文详解三类经典编程题:十进制转任意进制(填空)、非素数求和(修改)与重复数字统计(设计),含完整代码、逐空分析及易错点解析,助你夯实C语言基础。
120 2
二级C语言题解:十进制转其他进制、非素数求和、重复数统计
|
2月前
|
Java 应用服务中间件 Shell
Tomcat 使用与配置全解
Tomcat是Apache开源的轻量级Java Web容器,实现Servlet/JSP规范,支持Web应用部署与运行。需搭配JDK使用,目录结构清晰(如webapps存应用、conf存配置),默认端口8080,启动简单,广泛用于开发与中小型项目部署。
145 1
Tomcat 使用与配置全解
|
2月前
|
SQL Java 数据库连接
MyBatis 之基础概念与框架原理详解
MyBatis是一款轻量级半自动ORM框架,封装JDBC,让开发者专注SQL编写与业务逻辑;支持XML/注解配置、动态SQL、高级映射,SQL与代码分离,灵活高效,显著提升持久层开发效率。(239字)
121 1
MyBatis 之基础概念与框架原理详解
|
2月前
|
存储 C语言
C语言二级题解:查找字母以及其他字符个数、数字字符串转双精度值、二维数组上下三角区域数据对调
本文详解C语言二级考试三类典型题:统计字母及非字母字符个数、数字字符串转双精度浮点数、二维数组上下三角区域数据对调。含题目解析、错误定位与完整代码,适合备考学生、中职生及编程爱好者提升实战能力。
113 1
C语言二级题解:查找字母以及其他字符个数、数字字符串转双精度值、二维数组上下三角区域数据对调

热门文章

最新文章