关于mybatis中@SelectProvider的一点疑惑

utf7 2012-10-16 10:33:19
需求是这样的。假如有一个User表,表中字段有id,username,gender,email, address.....
现在使用mybatis中的@SelectProvider去实现查询逻辑,查询条件是自定义的Map<String,Object> query,query中放入查询的字段和值,假如我放置id,则根据id查询,假如放置username和id,则根据username和id查询,代码实现如下:

Usermapper代码:
public interface UserMapper {

@SelectProvider(type=UserMapperProvider.class,method="find")
public List<User> find(Map<String,Object> query);
}


UserMapperProvider代码:
import java.util.Map;
class UserMapperProvider{
public static String find(Map<String, Object> query) {
StringBuffer buffer = new StringBuffer();
buffer.append("SELECT * FROM user WHERE 1=1 ");

if(query.get("id")!=null){
buffer.append("AND id = #{id} ");
}
if(query.get("username")!=null){
buffer.append("AND username = #{id} ");
}
if(query.get("gender")!=null){
buffer.append("AND gender = #{gender} ");
}
if(query.get("email")!=null){
buffer.append("AND email = #{email} ");
}
return buffer.toString();
}
}


service层:
@Service("userService")
public class UserServiceImpl{
@Resource
private UserMapper userMapper;

/*
* 根据query条件,查询User
*
*/
public List<User> find(Map<String,Object> query) {
return userMapper.find(query);
}
}

问题是

@SelectProvider(type=UserMapperProvider.class,method="find")
public List<User> find(Map<String,Object> query);
好像有问题,这边的参数是如何传递的呢?当条件是Map<String,Object> query或者List或者自定义的时候,如果实现?
...全文
1085 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yousite1 2012-12-19
  • 打赏
  • 举报
回复
userMapper应该这么写才对: @SelectProvider(type=UserMapperProvider.class,method="find") public List<User> find(@Param("id") Long id, @Param("username") Stirng username, @Param("gender") String gender, @Param("email") String email);
utf7 2012-10-16
  • 打赏
  • 举报
回复
有哪位大神知道的说一下啊
romanitc 2012-10-16
  • 打赏
  • 举报
回复
表示没搞过mybatis!
utf7 2012-10-16
  • 打赏
  • 举报
回复
报错为:Caused by: java.lang.IllegalAccessException: Class org.apache.ibatis.builder.annotation.ProviderSqlSource can not access a member of class UserMapperProvider with modifiers ""

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧