关于使用@select书写SQL注意的细节

本文详细记录了在使用@select注解书写SQL时遇到的错误及修正建议,包括字段书写错误、数据库对大小写敏感、特殊符号使用、字段映射和序列化问题等,以帮助初学者避免类似问题。

关于使用@select书写SQL注意的细节

前言

关系sql是书写方式有很多种,几天记录下自己在使用@select书写遇到的几个细节问题

一、错误示范

下文的sql是其他同事提供的开发文档原文,在执行时遇到多出细节错误。

SQL:SELECT 
HA.HRAREA_ID HRAREAID,
HA.TYPE,
AM.NAMEC OWNER,
HA.WAYSNUM,
HA.HDMAPNUM,
HA.STATUS,
HA.CONFIRM_UID CONFIRMUID,
HA.CONFIRM_TIMESTAMP CONFIRMTIMSTAMP,
HA.CREATE_TIMESTAMP CREATETIMESTAMP
FROM TB_HRAREA HA LEFT JOIN TB_ADMIN AM 
ON HA.OWNER = AM.ADMINID
WHERE HA.ISDEL= FALSE
<IF TEST=HRAREAID!= NULL AND HRAREAID!=\"\" '  >
AND HA.HRAREAID= ${HRAREAID}
</IF>
<IF TEST = 'OWNER!= 0'>
AND HA.OWNER= ${OWNER}
</IF>
<IF TEST = TYPE!= 0'>
AND HA.TYPE = ${TYPE}
</IF>
<IF TEST = 'STATUS != NULL AND STATUS != \"\"'>
AND HA.STATUS = ${STATUS}
</IF>
<IF TEST = 'CONFIRMUID != 0'>
AND HA.CONFIRM_UID= ${CONFIRMUID}
</IF>
<IF TEST=PRECONFIRMTIMESTAMP!= NULL AND 	PRECONFIRMTIMESTAMP!=\"\" >
      HA.CONFIRM_TIMS
使用 MyBatis-Plus 的 `@Select` 注解执行 SQL 查询时,如果遇到 `NoSuchMethodError` 错误,通常与依赖版本不兼容有关。错误信息如 `java.lang.NoSuchMethodError: org.yaml.snakeyaml.representer.Representer: method 'void <init>()' not found` 表明某个类的方法在运行时找不到,这可能是由于依赖库版本冲突或缺失导致的 [^1]。 ### 常见原因分析 1. **依赖版本冲突** `NoSuchMethodError` 通常发生在类路径中存在多个版本的相同库,某个类在编译时使用了一个版本的方法,而在运行时加载了另一个缺少该方法的版本。例如,`snakeyaml` 是 Spring Boot 中用于 YAML 解析的库,如果项目中手动引入了不同版本的 `snakeyaml`,可能会与 Spring Boot 自带的版本发生冲突 。 2. **MyBatis-Plus 与 Spring Boot 版本不兼容** 如果使用的 MyBatis-Plus 版本与 Spring Boot 不兼容,也可能导致运行时异常。例如,Spring Boot 3.x 引入了对 Jakarta EE 9 的支持,包名从 `javax` 改为 `jakarta`,而某些旧版本的 MyBatis-Plus 可能尚未完全适配 。 3. **注解使用不当** `@Select` 注解用于直接编写 SQL 查询语句,若 SQL 语句书写错误或未正确映射返回值类型,也可能导致运行时异常,但这类错误通常表现为 `BindingException` 或 SQL 语法错误,而非 `NoSuchMethodError`。 ### 解决方法 1. **检查依赖版本并统一管理** 确保 `pom.xml` 或 `build.gradle` 中所有依赖库版本兼容,尤其是 Spring Boot、MyBatis-Plus 和 `snakeyaml`。例如,Spring Boot 3.2.4 应使用兼容的 `snakeyaml` 版本(如 2.0),并避免手动引入旧版本。 Maven 示例: ```xml <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>2.0</version> </dependency> ``` 2. **升级 MyBatis-Plus 版本** 确保使用的 MyBatis-Plus 版本支持 Spring Boot 3.x。例如,MyBatis-Plus 3.5.x 及以上版本已适配 Spring Boot 3.x。 Maven 示例: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> ``` 3. **排除冲突依赖** 如果发现多个版本的 `snakeyaml` 被引入,可以使用 Maven 的 `<exclusion>` 或 Gradle 的 `exclude` 排除不需要的版本。 Maven 示例: ```xml <dependency> <groupId>some-group</groupId> <artifactId>some-artifact</artifactId> <exclusions> <exclusion> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> </exclusion> </exclusions> </dependency> ``` 4. **验证 @Select 注解的使用** 确保 `@Select` 注解中的 SQL 语法正确,并且返回值类型与数据库字段匹配。例如: ```java @Mapper public interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM user WHERE age > #{age}") List<User> selectByAgeGreaterThan(@Param("age") int age); } ``` 5. **清理并重新构建项目** 使用 Maven 或 Gradle 清理并重新构建项目,确保所有依赖正确下载和加载。 Maven 命令: ```bash mvn clean install ``` Gradle 命令: ```bash ./gradlew clean build ``` --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值