当前位置: 首页 > news >正文

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

目录

1. 配置文件

1.1. properties

1.1.1. 编写db.properties

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

1.2. settings

1.3. plugins

1.4. typeAliases

1.4.1. 为一个类配置别名

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

1.5. environments

1.5.1. 事务管理

1.5.2. 连接池

1.6. mappers

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

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

1.6.3. 注册持久层接口

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

2. 映射文件

2.1. resultMap

2.2. sql、include

2.3. 特殊字符处理

3. 总结


🎉 前言

本文来讲解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

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

1.3. plugins

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

1.4. typeAliases

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

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

<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

<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映射文件中除了<insert>​、<delete>​、<update>​、<select>​外,还有一些标签可以使用:

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​ 属性相匹配

自定义映射关系

在映射文件中,使用<resultMap>​自定义映射关系:

<!-- 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>

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

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

2.2. sql、include

​<sql>​用来定义可重用的Sql片段,通过 <include refid>​ 引入该片段
如: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映射文件中尽量不要使用一些特殊字符,如:<​,>​等。

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

符号实体
<&lt;
>&gt;
&&amp;
'&apos;
"&quot;

例如:

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

3. 总结

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

http://www.dtcms.com/a/283785.html

相关文章:

  • 林曦词典|文质彬彬
  • 如何查询pg账号权限 能否创建模式 删表建表
  • Vim多列打开不同文件操作指南
  • 什么是AI-AIGC-AGI-Agent?基本概念与区别的详细解析
  • 【SAP SD】跨公司销售、第三方销售、STO采购(公司间合同配件)
  • 【困难】题解力扣23:合并K个升序链表
  • 删除百度同步空间桌面图标
  • 面试高频题 力扣 200.岛屿数量 洪水灌溉 深度优先遍历 暴力搜索 C++解题思路 每日一题
  • 用Amazon Q Developer命令行工具(CLI)快捷开发酒店入住应用程序
  • 图片画廊浏览(侧重 CSS 网格布局和模态框交互)
  • onUnload页面卸载和onPageScroll监听页面滚动
  • EPLAN 电气制图(十): 绘制继电器控制回路从符号到属性设置(上)
  • C++编程学习(第九天)
  • FastAdmin系统框架通用操作平滑迁移到新服务器的详细步骤-优雅草卓伊凡
  • btstack移植之安全配对(二)
  • 【Linux-云原生-笔记】LVS(Linux virual server)相关
  • C strtok函数应用
  • c++ 模板元编程
  • 深入解析Hadoop HDFS高可用性:原理、故障切换与元数据同步
  • 【AI论文】T-LoRA:无过拟合的单图像扩散模型定制化方案
  • MailAgentProcess.getInstance
  • 进程终止机制详解:退出场景、退出码与退出方式全解析
  • Django中get()与filter()对比
  • 3D材质总监的“光影魔法”:用Substance Sampler AI,“擦除”照片中的光影
  • 3D Gaussian Splatting (3DGS) 从入门到精通:安装、训练与常见问题全解析
  • 如何构建一个基于大模型的实时对话3D数字人?
  • 【代码随想录】+ leetcode hot100:栈与队列算法专题总结、单调栈
  • 【leetcode】852. 山脉数组的封顶索引
  • MySQL数据库主从复制
  • 如何将 ONLYOFFICE 文档集成到使用 Laravel 框架编写的 PHP 网络应用程序中