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 - 博客园