Mybatis和SpringBoot 如何通过动态列查询

假设有一个User表,包含以下字段:id、name、age、gender、phone。现在要编写一个查询方法,查询User表中符合条件的记录,但是查询的列是动态的,即不确定查询哪些列,可以根据用户传入的参数决定。

首先,在MyBatis中编写Mapper.xml文件,定义查询方法如下:

<select id="getUserList" parameterType="map" resultMap="userResultMap">
    SELECT
    <foreach collection="columns" item="column" separator=",">
        ${column}
    foreach>
    FROM user
    WHERE 1=1
    <if test="name != null">
        AND name=#{name}
    if>
    <if test="age != null">
        AND age=#{age}
    if>
    <if test="gender != null">
        AND gender=#{gender}
    if>
    <if test="phone != null">
        AND phone=#{phone}
    if>
select>

其中,columns是一个List类型的参数,用于存放要查询的列名;name、age、gender、phone是查询条件,可以根据具体需要进行修改。

然后,在Java代码中,使用Spring Boot的方式调用MyBatis的查询方法,示例代码如下:

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<User> getUserList(List<String> columns, String name, Integer age, String gender, String phone) {
        Map<String, Object> params = new HashMap<>();
        params.put("columns", columns);
        params.put("name", name);
        params.put("age", age);
        params.put("gender", gender);
        params.put("phone", phone);
        return userMapper.getUserList(params);
    }
}

以上代码中,getUserList()方法的参数包括columns、name、age、gender、phone,其中columns是要查询的列名列表。在方法内部,将参数封装成一个Map对象,然后调用MyBatis的查询方法getUserList()。

最后,在Controller中,将用户传入的参数转换为Java对象,然后调用UserService中的getUserList()方法,示例代码如下:

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/user/list")
    public List<User> getUserList(@RequestParam(required = false) List<String> columns,
                                  @RequestParam(required = false) String name,
                                  @RequestParam(required = false) Integer age,
                                  @RequestParam(required = false) String gender,
                                  @RequestParam(required = false) String phone) {
        return userService.getUserList(columns, name, age, gender, phone);
    }
}

你可能感兴趣的:(SpringBoot,mybatis,spring,boot,java)