java - MyBatis 3.4.5;@SelectProvider 不替换参数占位符
问题描述
当我尝试使用 MyBatis 创建动态查询时,sql 已成功生成,但参数未在 SQL 占位符中替换。
映射器@SelectProvider 定义
@SelectProvider(type = ActivitySqlProvider.class, method = "getActivitiesByUserAndType")
@ResultMap("activityResult")
List<Activities> getActivities(@Param("userId") long userId, @Param("type") String type);
ActivitySqlProvider 类
public String getActivitiesByUserAndType(final Map<String, Object> params) {
String COLUMNS = "ACTIVITYID, USERID, TYPE, CREATED, DESCRIPTION";
String TABLE_NAME = "ACTIVITY";
boolean hasType = params.containsKey("type");
final String sql = new SQL() {{
SELECT(COLUMNS);
FROM(TABLE_NAME);
WHERE("USERID = #{userId}");
if (hasType) {
WHERE("TYPE = #{type}");
}
}}.toString();
System.out.println(sql);
return sql;
}
SQL 字符串打印正确,我可以看到占位符。不知道我错过了什么。
解决方案
盲目猜测:您使用了错误的@Param
注释。
确保你有:
import org.apache.ibatis.annotations.Param;
并不是:
import org.springframework.data.repository.query.Param;
打印params
地图的内容以验证此声明。
推荐阅读
- c - 在这种情况下 for 循环如何运行?
- python - 比较 Pandas Dataframe 中不同长度的两个列表
- postgresql - 如何使用“WITH”语句执行 PostgreSQL?
- python - 类型错误:mainloop() 缺少 1 个必需的位置参数:'self'
- php - Laravel / Yajra Datatable - 按添加列排序表
- outlook - 如何使用加载项对 Outlook 电子邮件进行分类?
- c# - 服务器标签格式不正确
- ios - 如何使用Metal绘制ARMeshAnchor?
- typescript - 提交失败,因为 var 不是骆驼大小写
- python - 将特定文本数据转换为 Excel 文件