我继承了一些我试图理解的代码以及我为找到一些东西所做的任何搜索@SelectProvider
结果什么也没有。
Java DAO
@SelectProvider(type = CategoryDaoSelectProvider.class, method = "findByParentIdAndName")
Category findByParentIdAndName(@Param("parentId") Long parentId, @Param("name") String name);
选择提供商
public class CategoryDaoSelectProvider {
public static String findByParentIdAndName(Map<String, Object> params) {
Long parentId = (Long)params.get("parentId"); // WHY IS THIS HERE???
StringBuffer buffer = new StringBuffer();
buffer.append("SELECT COUNT(id) FROM Category ");
if (parentId == null) {
buffer.append("WHERE parentId IS NULL ");
} else {
buffer.append("WHERE parentId = #{parentId} ");
}
buffer.append("AND LOWER(name) = LOWER(#{name}) ");
return buffer.toString();
}
}
这段代码中的参数parentId 有什么作用?据我所知,它实际上从未执行任何操作,除非以某种方式神奇地将 #{parentId} 替换为该值。在这种情况下是否不使用此参数?哪里有mybatis
实际上是注入到查询中吗?
SelectProviders 通过两种方式接收参数:作为 params Map 参数中的项目和作为 #{parentId} (在您的示例中)。您的代码显示在 select 语句中使用parentId 之前先对其进行检查。需要parentId 变量,因为您无法查询#{parentId}。
顺便说一句,这不是 SelectProviders 的最佳实现,您应该在最后使用 SELECT()、WHERE() 和 SQL() 来返回编译后的语句。我想你的例子也有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)