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

文章介绍了如何在MyBatis的Mapper.xml中编写查询方法,允许动态指定查询的列,同时处理不同的查询条件。在Java代码中,通过SpringBoot的@Service和@RestController注解,调用这个查询方法并处理用户输入的参数,最终在Controller中接收用户请求,返回查询结果。
摘要由CSDN通过智能技术生成

假设有一个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);
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳落青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值