深入理解MyBatis XML配置文件
MyBatis是一款优秀的持久层框架,简化了数据库操作的复杂性,提高了开发效率。在MyBatis中,XML配置文件扮演了重要角色,用于配置数据源、事务管理、SQL映射等内容。本文将详细介绍MyBatis的XML配置文件,帮助读者更好地理解和使用MyBatis。
MyBatis配置文件结构
MyBatis的核心配置文件通常命名为mybatis-config.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="db.properties"/><!-- 环境配置 --><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><!-- 映射配置 --><mappers><mapper resource="com/example/mapper/UserMapper.xml"/></mappers>
</configuration>
详细解析配置文件
properties元素
properties元素用于配置外部属性文件,可以将数据库连接信息等配置在外部文件中,便于管理和维护。
<properties resource="db.properties"/>
db.properties文件示例如下:driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydatabase
username=root
password=root
在配置文件中可以通过${}引用这些属性值。
settings元素
settings元素用于配置MyBatis的全局设置,如缓存、延迟加载、驼峰命名等。
<settings><setting name="cacheEnabled" value="true"/><setting name="lazyLoadingEnabled" value="true"/><setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
常用设置项:
• cacheEnabled:开启或关闭二级缓存。
• lazyLoadingEnabled:开启或关闭延迟加载。
• mapUnderscoreToCamelCase:将数据库列名的下划线风格映射到Java驼峰命名风格。
typeAliases元素
typeAliases元素用于定义类型别名,可以简化XML配置文件中的类全限定名。
<typeAliases><typeAlias type="com.example.model.User" alias="User"/>
</typeAliases>
之后在XML文件中,可以使用User来代替com.example.model.User。
environments元素
environments元素用于配置不同的运行环境(如开发、测试、生产环境),包含transactionManager和dataSource配置。
<environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment>
</environments>
• transactionManager:事务管理器,常用类型有JDBC和MANAGED。
• dataSource:数据源配置,常用类型有UNPOOLED、POOLED和JNDI。
mappers元素
mappers元素用于配置SQL映射文件,可以使用resource、url或class来指定映射文件的位置或Mapper接口的全限定名。
<mappers><mapper resource="com/example/mapper/UserMapper.xml"/><!-- 或者使用包扫描方式 --><!-- <package name="com.example.mapper"/> -->
</mappers>
SQL映射文件结构
SQL映射文件通常与Mapper接口对应,基本结构如下:
<?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">
<mapper namespace="com.example.mapper.UserMapper"><!-- SQL 片段 --><sql id="userColumns">id, username, password, email</sql><!-- 查询操作 --><select id="selectUserById" parameterType="int" resultType="User">SELECT <include refid="userColumns"/> FROM users WHERE id = #{id}</select><!-- 插入操作 --><insert id="insertUser" parameterType="User">INSERT INTO users (username, password, email) VALUES (#{username}, #{password}, #{email})</insert><!-- 更新操作 --><update id="updateUser" parameterType="User">UPDATE users SET username = #{username}, password = #{password}, email = #{email} WHERE id = #{id}</update><!-- 删除操作 --><delete id="deleteUser" parameterType="int">DELETE FROM users WHERE id = #{id}</delete></mapper>
SQL片段
sql元素用于定义可重用的SQL片段,便于在多个SQL语句中复用。
<sql id="userColumns">id, username, password, email</sql>
使用元素引用SQL片段:
SELECT <include refid="userColumns"/> FROM users WHERE id = #{id}
CRUD操作
MyBatis支持常见的CRUD操作:
• select:查询操作,使用parameterType指定参数类型,resultType指定返回类型。
• insert:插入操作,使用parameterType指定参数类型。
• update:更新操作,使用parameterType指定参数类型。
• delete:删除操作,使用parameterType指定参数类型。
动态SQL
MyBatis的动态SQL功能非常强大,可以根据条件动态生成SQL语句。常用的动态SQL标签有:
• if:根据条件包含SQL片段。
• choose、when、otherwise:类似于Java中的switch语句。
• trim、where、set:用于处理SQL片段的前后缀和空格。
示例:
<select id="findUsers" parameterType="map" resultType="User">SELECT <include refid="userColumns"/> FROM users <where><if test="username != null">AND username = #{username}</if><if test="email != null">AND email = #{email}</if></where>
</select>
总结
MyBatis的XML配置文件在整个MyBatis框架中起到了关键作用。通过合理配置,可以简化开发流程,增强系统的灵活性和可维护性。在实际开发中,应根据具体需求进行配置,充分发挥MyBatis的优势。希望本文能帮助读者深入理解MyBatis的XML配置文件,提高MyBatis的使用水平。
相关文章:
深入理解MyBatis XML配置文件
MyBatis是一款优秀的持久层框架,简化了数据库操作的复杂性,提高了开发效率。在MyBatis中,XML配置文件扮演了重要角色,用于配置数据源、事务管理、SQL映射等内容。本文将详细介绍MyBatis的XML配置文件,帮助读者更好地理…...
006 CentOS 7.9 elasticsearch7.10.0安装及配置
文章目录 一、安装Elasticsearch 7.10.0二、安装Logstash 7.10.0三、配置防火墙和网络访问可能出现的错误配置 Elasticsearch官方网址: https://www.elastic.co Elasticsearch中文官网地址:https://www.elastic.co/cn/products/elasticsearch https://…...
蚂蚁分类信息系统二开仿么么街货源客模板微商货源网源码(带手机版)
源码介绍 网站采用蚂蚁分类信息系统二次开发,模板仿么么街货源客模板,微商货源网定制版。 模板设计风格简洁,分类信息采用列表形式发布,这种设计方式非常符合度娘 SEO 规则。收录效果是杠杠的。 这个网站风格目前是用来做货源推…...
综合数据分析及可视化实战
【实验目的】 1、掌握数据分析常用的几种扩展库: numpy、pandas、matplotlib。 2、理解数据分析的几种方法,即描述性数据分析,探索性数据分析 和验证性数据分析。 3、理解数据分析的基本步骤:数据准备、数据导入、数据预处理、数 据分析和数据可视化…...
N32G45XVL-STB之移植LVGL(8.4.0)
目录 概述 1 系统软硬件 1.1 软件版本信息 1.2 ST7796-LCD 1.3 MCU IO与LCD PIN对应关系 2 认识LVGL 2.1 LVGL官网 2.2 下载V8.4.0 3 移植LVGL 3.1 硬件驱动实现 3.2 添加LVGL库文件 3.3 移植和硬件相关的代码 3.3.1 驱动接口相关文件介绍 3.3.2 重新接口函数 3…...
SwaggerSpy:一款针对SwaggerHub的自动化OSINT安全工具
关于SwaggerSpy SwaggerSpy是一款针对SwaggerHub的自动化公开资源情报(OSINT)安全工具,该工具专为网络安全研究人员设计,旨在简化广大红队研究人员从SwaggerHub上收集已归档API信息的过程,而这些OSINT信息可以为安全人…...
Python酷库之旅-比翼双飞情侣库(05)
目录 一、xlrd库的由来 二、xlrd库优缺点 1、优点 1-1、支持多种Excel文件格式 1-2、高效性 1-3、开源性 1-4、简单易用 1-5、良好的兼容性 2、缺点 2-1、对.xlsx格式支持有限 2-2、功能相对单一 2-3、更新和维护频率低 2-4、依赖外部资源 三、xlrd库的版本说明 …...
numpy数组transpose方法的基本原理
背景:记录一下numpy数组维度顺序操作 一、具体示例 transpose方法用于交换数组的轴,改变数组的维度顺序。方法的参数是一个代表新轴顺序的元组。 假设你有一个三维数组,其形状是 (a, b, c),即有 a 个块,每个块中有 b…...
Docker Swarm集群部署管理
Docker Swarm集群管理 文章目录 Docker Swarm集群管理资源列表基础环境一、安装Docker二、部署Docker Swarm集群2.1、创建Docker Swarm集群2.2、添加Worker节点到Swarm集群2.3、查看Swarm集群中Node节点的详细状态信息 三、Docker Swarm管理3.1、案例概述3.2、Docker Swarm中的…...
碎片化知识如何被系统性地吸收?
一、方法论 碎片化知识指的是通过各种渠道快速获取的零散信息和知识点,这些信息由于其不完整性和孤立性,不易于记忆和应用。为了系统性地吸收碎片化知识,可以采用以下策略: 1. **构建知识框架**: - 在开始吸收之前&am…...
安鸾学院靶场——安全基础
文章目录 1、Burp抓包2、指纹识别3、压缩包解密4、Nginx整数溢出漏洞5、PHP代码基础6、linux基础命令7、Mysql数据库基础8、目录扫描9、端口扫描10、docker容器基础11、文件类型 1、Burp抓包 抓取http://47.100.220.113:8007/的返回包,可以拿到包含flag的txt文件。…...
ChatGPT:自然语言处理的新纪元与OpenAI的深度融合
随着人工智能技术的蓬勃发展,自然语言处理(NLP)领域取得了显著的进步。OpenAI作为这一领域的领军者,以其卓越的技术实力和创新能力,不断推动着NLP领域向前发展。其中ChatGPT作为OpenAI的重要成果更是在全球范围内引起了…...
AI引领项目管理新时代:效率与智能并驾齐驱
在数字化浪潮的推动下,项目管理领域正迎来一场由AI技术引领的革新。从自动化任务执行到智能决策支持,AI技术的应用正让项目管理变得更加高效、精准和智能化。本文将探讨项目管理人员及其实施团队如何运用AI技术,以及这些技术如何助力项目管理…...
AUTOSAR汽车电子嵌入式编程精讲300篇-电池管理系统中 CAN 通信模块的设计与应用(中)
目录 2.3 BMS 中 CAN 通信模块软硬件设计 2.3.1 CAN 通信模块硬件电路设计 2.3.2 CAN 通信模块软件设计 2.3.2.1 CAN 底层程序设计 2.3.2.2 CAN 底层初始化 2.3.2.3 CAN 底层接收 3.3.1.3 CAN 底层发送 2.4 通信协议的实现 2.4.1 整车通信协议的实现 2.4.2 充电机通信协议的实现…...
k8s概述
文章目录 一、什么是Kubernetes1、官网链接2、概述3、特点4、功能 二、Kubernetes架构1、架构图2、核心组件2.1、控制平面组件(Control Plane Components)2.1.1、kube-apiserver2.1.2、etcd2.1.3、kube-scheduler2.1.4、kube-controller-manager 2.2、No…...
多线程的运用
在现代软件开发中,多线程编程是一个非常重要的技能。多线程编程不仅可以提高应用程序的性能,还可以提升用户体验,特别是在需要处理大量数据或执行复杂计算的情况下。本文将详细介绍Java中的多线程编程,包括其基本概念、实现方法、…...
TF-IDF(Term Frequency-Inverse Document Frequency)算法
TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于文本挖掘和信息检索的统计方法,主要用于评估一个单词在一个文档或一组文档中的重要性。它结合了词频(TF)和逆文档频率(IDF)两个指…...
富格林:细心发现虚假确保安全
富格林指出,现货黄金市场内蕴藏着丰富的盈利机会,然而并非所有人都能够抓住这些机会。要想从市场中获取丰厚的利润并且保障交易的安全,必须要求我们掌握一些交易技巧利用此去发现虚假陷阱。当我们不断汲取技巧过后,才可利用此来发…...
6.2 文件的缓存位置
1. 文件的缓冲 1.1 缓冲说明 将文件内容写入到硬件设备时, 则需要进行系统调用, 这类I/O操作的耗时很长, 为了减少I/O操作的次数, 文件通常使用缓冲区. 当需要写入的字节数不足一个块时, 将数据放入缓冲区, 当数据凑够一个块的大小后才进行系统调用(即I/O操作).系统调用: 向…...
在Elasticsearch中,过滤器(Filter)是用于数据筛选的一种机制
在Elasticsearch中,过滤器(Filter)是用于数据筛选的一种机制,它通常用于结构化数据的精确匹配,如数字范围、日期范围、布尔值、前缀匹配等。过滤器不计算相关性评分,因此比查询(Query࿰…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
