根據一個 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 {@Autowiredprivate 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 字段上有索引