根据一个 List 中的两个字段 rangeCode 和 unitcd,查询数据库表 model_engineering_spatial_unit。这个需求在 Java + MyBatis 项目中非常常见,下面我将为你详细写出 Mapper 接口(Java) 和 MyBatis XML 映射文件 的写法。
✅ 前提说明实体类:PlanSchemeProductionGongkuangStatus
public class PlanSchemeProductionGongkuangStatus {
private String rangeCode;
private String unitcd;
// getter and setter...
}
查询目标表:model_engineering_spatial_unit
假设你要查询的是:
SELECT *
FROM model_engineering_spatial_unit
WHERE range_code = ? AND unitcd = ?
对于多个对象的情况,是多个 (range_code, unitcd) 对组合。
✅ Mapper 层接口定义(Java)
import java.util.List;
public interface SpatialUnitMapper {
/**
* 根据 rangeCode 和 unitcd 列表查询数据
*/
List<ModelEngineeringSpatialUnit> queryByRangeAndUnit(List<PlanSchemeProductionGongkuangStatus> conditions);
}
✅ MyBatis XML 映射文件(XML)(重点)
<!-- Mapper Namespace: com.example.mapper.SpatialUnitMapper -->
<mapper namespace="com.example.mapper.SpatialUnitMapper">
<select id="queryByRangeAndUnit" resultType="com.example.model.ModelEngineeringSpatialUnit">
SELECT *
FROM model_engineering_spatial_unit
<where>
<foreach collection="conditions" item="item" separator=" OR ">
(range_code = #{item.rangeCode} AND unitcd = #{item.unitcd})
</foreach>
</where>
</select>
</mapper>
✅ 使用说明
• 遍历传入的 List。
•每个元素取出 rangeCode 和 unitcd,作为一组条件拼接成 (range_code = ? AND unitcd = ?)。
•多组条件用 OR 连接,最终实现批量查询。
• 标签会自动处理 AND / OR 开头的问题,避免 SQL 错误。
✅ 示例调用代码(Service 层)
@Service
public class SpatialUnitService {
@Autowired
private SpatialUnitMapper spatialUnitMapper;
public void testQuery() {
List<PlanSchemeProductionGongkuangStatus> conditions = new ArrayList<>();
conditions.add(new PlanSchemeProductionGongkuangStatus("R001", "U001"));
conditions.add(new PlanSchemeProductionGongkuangStatus("R002", "U002"));
List<ModelEngineeringSpatialUnit> result = spatialUnitMapper.queryByRangeAndUnit(conditions);
// 输出结果
result.forEach(System.out::println);
}
}
✅ 如果你使用的是 MyBatis Plus如果你使用的是 MyBatis Plus,可以结合 QueryWrapper 或 LambdaQueryWrapper 实现动态构建查询条件,但上面这种方式更适合直接传递 List 对象进行多条件匹配。
✅ 小贴士
场景 推荐方式
单条记录查询 selectOne()
多个 (rangeCode, unitcd) 组合查询 使用 动态生成多个 OR 条件
查询性能优化 确保 range_code 和 unitcd 字段上有索引