方式一:使用脚本
下面是用<script>
的方式把XML配置方式的动态SQL照搬过来,用注解来实现。适用于xml配置转换到注解配置
@Select("<script>select * from user <if test=\"id !=null \">where id = #{id} </if></script>")
public List<User> findUserById(User user);
方式二:使用相应的Provider注解
@Mapper
public interface ImageMapper {
@Select("select * from image where isShow=0")
List<Image> selectAllImage();
@Insert("insert into image(id, title, remark, url, isShow) values(#{image.id},#{image.title},#{image.remark},#{image.url},#{image.isShow})")
int insertImage(@Param("image") Image image);
/**
* 更新图片的isShow字段,0代表展示,1代表不展示,即删除
* @param list
* @return
*/
@UpdateProvider(type = ImageProvider.class, method = "updateImageIsShow")
int updateImageIsShow(List<String> list);
class ImageProvider{
// 注意:public String updateImageIsShow(List<String> list){
public String updateImageIsShow(Map map){
// 注意
List<String > list = (List<String>) map.get("list");
StringBuilder builder = new StringBuilder();
builder.append("update image set isShow=1 where id in (");
if (list != null && list.size() > 0){
for (int i = 0; i < list.size(); i++) {
if(i+1 == list.size()){
builder.append("'"+list.get(i)+"'");
}else{
builder.append("'"+list.get(i)+"', ");
}
}
return builder.append(")").toString();
}
return null;
}
}
}
注意:这是一个最简单的list传参,但是在运行时会报传参错误。这是mybatis内部机制造成的,其参数需要是key/value结构,当遇到这里不是key/value结构的list时,mybatis会自己把它转换成key/value结构,key就是他的名字”list”,value就是他的值List,要正确传参需要使用key/value结构的map