关于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或者自定义的时候,如果实现?