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

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.kler.cn/a/515190.html

相关文章:

  • leetcode 2239. 找到最接近 0 的数字
  • windows git bash 使用zsh 并集成 oh my zsh
  • Kotlin 2.1.0 入门教程(七)
  • 一文了解如何在Qt中间集成Halcon窗口并在子线程显示(附工程源码下载链接)
  • 使用nginx搭建通用的图片代理服务器,支持http/https/重定向式图片地址
  • opencv在图片上添加中文汉字(c++以及python)
  • 三篇物联网漏洞挖掘综述
  • 操作无法完成,因为文件已经在Electronic Team Virtual Serial Port Driver Service中打开
  • 软件测试 —— Postman初识
  • 最新-CentOS 7安装1 Panel Linux 服务器运维管理面板
  • JS学习之JavaScript模块化规范进化论
  • “模板”格式化发布新创诗(为《诗意 2 0 2 5》贡献力量)
  • 2024年美赛C题评委文章及O奖论文解读 | AI工具如何影响数学建模?从评委和O奖论文出发-O奖论文做对了什么?
  • 【论文速读】| 评估并提高大语言模型生成的安全攻击探测器的鲁棒性
  • 【网络协议】RFC1350-TFTP协议
  • Java设计模式 十三 代理模式 (Proxy Pattern)
  • SQLmap 注入-03 获得用户信息
  • “深入浅出”系列之音视频开发:(3)音视频开发的学习路线和必备知识
  • Nginx 反向代理与负载均衡配置实践
  • Qt —— 控件属性
  • CentOS 7.9(linux) 设置 MySQL 8.0.30 开机启动详解
  • 【esp32-uniapp小程序】uniapp小程序篇02——Hbuilder利用git连接远程仓库
  • VUE之路由Props、replace、编程式路由导航、重定向
  • 【Django开发】django美多商城项目完整开发4.0第14篇:Docker使用,1. 在Ubuntu中安装Docker【附
  • 开源AI崛起:新模型逼近商业巨头
  • 深入探讨激活函数在神经网络中的应用