当前位置: 首页 > news >正文

以list为输入条件,查询数据库表,java中的mapper层和mybatis层应该怎么写?

根据一个 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 字段上有索引

http://www.lryc.cn/news/571625.html

相关文章:

  • 裸金属服务器深度评测:云计算时代的性能与安全担当​​​​
  • centos 7单机安装ceph并创建rbd块设备
  • 博世X阿里云:智能座舱接入通义大模型!
  • MYSQL进阶超详细总结2.0
  • CppCon 2017 学习:CNL: A Compositional Numeric Library
  • Zephyr 高阶实践:彻底讲透 west 构建系统、模块管理与跨平台 CI/CD 配置
  • 微信小程序-数据加密
  • 数据结构 栈与队列 6.18
  • Vue3 × DataV:三步上手炫酷数据可视化组件库
  • Matplotlib快速入门
  • 2D写实交互数字人:让AI形象拥有“真人温度“的技术革命
  • 《HTTP权威指南》 第1-2章 HTTP和URL基础
  • C#实现图片文字识别
  • 【Pandas】pandas DataFrame unstack
  • LVS+Keepalived高可用群集
  • 【请关注】真实案例pg及kong安装部署
  • CppCon 2017 学习:C++ in Academia
  • GNU Octave 基础教程(2):变量与数据类型详解(一)
  • 技术与情感交织的一生 (八)
  • Git中新创建分支是否为空?这可得视情况而定!
  • JVM-类加载机制
  • 论文笔记 <交通灯><多智能体>MetaLight:基于价值的元强化学习用于交通信号控制
  • 20.jsBridge多页面交互与原生事件监听冲突问题
  • 锂电池充电管理芯片XSP30 适用于2-3节串联锂电池升降压快速充电
  • 新发布的一款使用ReactNative新架构加载Svga动画的开源插件[android/ios]
  • 【解决方案】Java 11 报错 <javax.net.ssl.SSLException: Tag mismatch!>,Java 8 却没问题?
  • 二分K-means:让聚类更高效、更精准!
  • Alpine Docker 容器中安装包缓存与 C/C++ 运行问题
  • 2025年暑期在线实习项目分享
  • 专业音乐播放器分享,Foobar2000多格式解码的技术实现,界面自定义的实用技巧