MyBatis中xml文件参数为map时高级用法
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
下面是使用场景
假设前端将许多的参数以Vo的形式传入,我们在Service蹭、Mapper层都传入Vo,我们在xml中就需要对多个查询参数进行判空,比如下面这样:
1 | <select id = "testXml" paramsType = "xxx.xxx.Vo" resultType = "xxx.xxx.Vo"> |
这种方式实现没有问题,但是有一个小小的弊端就是如果查询参数很多的话,那就要写很多很多的if标签,那么有没有一种类似于循环判断的方式从而不用写那么多if呢?当然有!
在Service层里面将Vo转成Map后传入Mapper层即可,具体实现如下:
这是Service层
1 | public List<UserDepte> getByMap(UserQueryParams params){ |
这是Mapper层
1 | int getByMap( Map<String,Object> map) |
这是对应的XML文件
1 | <foreach collection="paramsMap.keys" item="k" separator=","> |
这样就一个循环解决参数判空的问题,而不再需要写一堆if