kas*_*ega 4 java ibatis mybatis
我继承了一些我想要理解的代码,而我所做的任何搜索都会发现@SelectProvider很多东西.
Java DAO
@SelectProvider(type = CategoryDaoSelectProvider.class, method = "findByParentIdAndName")
Category findByParentIdAndName(@Param("parentId") Long parentId, @Param("name") String name);
Run Code Online (Sandbox Code Playgroud)
选择提供商
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();
}
}
Run Code Online (Sandbox Code Playgroud)
param parentId在此代码中的用途是什么?据我所知,除非神奇地将#{parentId}替换为值,否则它实际上什么都不做.在这种情况下,这个参数是不是用过的?哪里mybatis实际上做注射到查询?
SelectProviders以两种方式接收参数:作为params Map参数中的项目和#{parentId}(在您的示例中).您的代码显示parentId在select语句中使用之前被检查.需要parentId变量,因为您无法查询#{parentId}.
顺便说一句,这不是SelectProviders的最佳实现,你应该在结尾使用SELECT(),WHERE()和SQL()来返回编译语句.我猜你的例子也有效.
| 归档时间: |
|
| 查看次数: |
5637 次 |
| 最近记录: |