Spring Boot + Mybatis SQL语句中使用List

# 表结构

现有一个列表,存放了3个手机号码: [1311, 1451, 2334] ,输入以下即可得结果

1
SELECT * FROM user_info where phone in (1311,1451,2334)

现在需求是我们有一个列表,其中存放电话号码,且个数不定,由此查出对应的个人信息。

# 代码部分

首先编写xml部分

1
2
3
4
5
6
7
<!--    接收一个list,返回一个list<map>-->
<select id="getUserInfoByPhone" parameterType="list" resultType="map">
        SELECT * FROM user_info where phone in
        <foreach collection="list" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
</select>

将mybatis的xml文件和mapper接口,对应起来。如果对应不起来的话,会报找不到方法的错误

1
2
3
#application.yml
mybatis:
  mapper-locations: classpath:mapper/**/*.xml

然后在Mapper部分

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

@Mapper
public interface ListInSqlMapper {
    List<Map<String, Object>> getUserInfoByPhone(@Param("list") List<String> phoneNum);
}

然后写Controller

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
@RestController
public class ListInSqlController {

    @Autowired
    private ListInSqlMapper listInSqlMapper;

    @GetMapping(value = "/userbyphone")
    public List<Map<String, Object>> getUserInfoByPhone() {
        //其中为了测试,直接在本地指定几个号码
        List<String> phoneNum = new ArrayList<>();
        phoneNum.add("1311");
        phoneNum.add("1451");
        phoneNum.add("2334");
        phoneNum.add("2333");
        return listInSqlMapper.getUserInfoByPhone(phoneNum);
    }
}

# 查询结果

接下来用postman测试一下

测试成功。

转载请保留本文转载地址,著作权归作者所有
使用 Hugo 构建 主题 StackJimmy 设计