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

SSM开发(二) MyBatis两种SQL配置方式及其对比

目录

一、MyBatis两种SQL配置方式

二、使用XML映射文件配置SQL语句

三、使用注解配置SQL语句

四、两种方式对比

总结

1、注解

2、XML配置

五、MyBatis多数据源的两种配置方式

参考


一、MyBatis两种SQL配置方式

MyBatis 提供了两种方式来配置SQL语句:注解(如 @Select)和XML映射文件。

  • 映射文件:通过XML文件来定义SQL语句和映射关系
  • 注解方式:通过在Java代码中使用注解来定义SQL语句和映射关系

二、使用XML映射文件配置SQL语句

在MyBatis中,SQL语句通常定义在XML文件中。例如,定义一个查询用户的SQL:

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper"><select id="selectUser" parameterType="int" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select>
</mapper>

注:parameterType属性指定了输入参数的类型,resultType属性指定了返回结果的类型

三、使用注解配置SQL语句

  • MyBatis 是一个 XML 驱动的框架。配置信息是基于 XML 的,而且映射语句也是定义在 XML 中的。MyBatis 3 以后,支持注解配置。注解配置基于配置 API;而配置 API 基于 XML 配置。

  • MyBatis 支持诸如 @Insert、@Update、@Delete、@Select、@Result 等注解。

使用@Select注解定义上述同样的查询用户的SQL:

package com.example.mapper;import com.example.model.User;
import org.apache.ibatis.annotations.Select;public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User selectUser(int id);
}

注:@Select注解用于定义SQL语句,其中#{id}表示一个占位符,用于在SQL执行时替换为方法参数id的值

四、两种方式对比

总结

  • 注解:适用于简单、直观的 SQL 语句,便于快速开发和维护,比如,团队对代码整洁度和维护性要求较高,且 SQL 语句相对简单的情况。
  • XML 配置方式:适用于大型项目或 SQL 语句特别复杂的情况,提供高灵活性和易于扩展的维护方式。

1、注解

优点

  • 简洁直观:SQL 语句直接写在注解中,与接口方法紧密结合,便于阅读和维护。
  • 编译时检查:注解中的 SQL 语句在编译时就能被检测到,减少运行时错误。
  • 减少配置文件:不需要额外的 XML 文件,减少了项目的复杂性。

缺点

  • 复杂 SQL 支持不足:对于动态 SQL 或特别复杂的 SQL 语句,注解方式可能显得力不从心。
  • 可读性问题:当 SQL 语句较长或包含复杂逻辑时,注解可能会使代码显得混乱。
  • 灵活性差:SQL 语句在注解中写死后,不易于动态修改或扩展。

2、XML配置

优点

  • 灵活性高:支持复杂的 SQL 语句和动态 SQL,易于管理和维护。
  • 分离职责:SQL 语句与 Java 代码分离,便于独立测试和修改(注: 这个可以理解为解耦,测如果测试环境想使用与生产环境不同的SQL,非常方便)。
  • 易于扩展:XML 文件可以方便地添加新的 SQL 语句,不影响现有代码。

缺点

  • 文件繁多:当项目规模较大时,可能需要管理大量的 XML 文件(注: 可以想一想,上百个文件,修改时非常麻烦)。
  • 阅读不便:需要在多个文件之间切换,不如注解方式直观。
  • 编译时检查不足:XML 文件中的错误通常只能在运行时被发现。

五、MyBatis多数据源的两种配置方式

同一个项目涉及到多个数据库,也就是多数据源。多数据源又可以分为两种情况:

1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发。

2)两个或多个数据库是master-slave的关系,比如有mysql搭建一个 master-master,其后又带有多个slave;或者采用MHA搭建的master-slave复制;

MyBatis多数据源的配置主要有两种方式:

  • 通过@MapperScan注解,对不同包下的Mapper使用不同的sqlSessionFactory
  • 通过@MapperScan注解加自定义注解,对使用不同注解的Mapper使用不同的sqlSessionFactory

参考

https://www.jb51.net/article/152380.htm



MyBatis 3种 使用 SQL 语句的方式;注解方式、注解提供器方式、XML 配置方式 - del88 - 博客园

http://www.lryc.cn/news/525381.html

相关文章:

  • 【Redis】在ubuntu上安装Redis
  • JS-Web API -day06
  • JS-Web API -day03
  • 进程优先级
  • c语言(转义字符)
  • easyexcel读取写入excel easyexceldemo
  • 【人工智能数学基础篇】——深入详解矩阵分解:奇异值分解(SVD)与主成分分析(PCA)在数据降维与特征提取中的应用
  • ThreeJS示例教程200+【目录】
  • DC-DC稳压电源——实战(基于Ti5450芯片)基础知识篇(1)
  • pyrender 渲染mesh
  • 防火墙安全策略
  • selenium clear()方法清除文本框内容
  • (回溯分割)leetcode93 复原IP地址
  • 高性能队列 Disruptor 在 IM 系统中的实战
  • 原生HTML集合
  • ES6 简单练习笔记--变量申明
  • 2025.1.21——六、BUU XSS COURSE 1
  • Linux - 五种常见I/O模型
  • 【负载均衡式在线OJ】加载题目信息(文件版)
  • “上门按摩” 小程序开发项目:基于 SOP 的全流程管理
  • WPF1-从最简单的xaml开始
  • 2025牛客寒假算法营2
  • 编译Android平台使用的FFmpeg库
  • 【C++高并发服务器WebServer】-2:exec函数簇、进程控制
  • 力扣707题(2)——设计链表
  • K8S中ingress详解
  • SpringBoot打包为JAR包或WAR 包,这两种打包方式在运行时端口将如何采用?又有什么不同?这篇文章将给你解惑
  • zabbix6.0安装及常用监控配置
  • SQL-leetcode—1179. 重新格式化部门表
  • JavaWeb 学习笔记 XML 和 Json 篇 | 020