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

【Java】MyBatis动态SQL

在MyBatis中使用动态SQL语句。
动态SQL是指根据参数数据动态组织SQL的技术。
生活中的案例:

在京东上买东西时,用户搜索商品,可以选择筛选条件,比如品牌,价格,材质等,也可以不使用筛选条件。这时候后台需要写多个查询模块吗?其实不需要,这时候可以用动态SQL语句,使用if标签决定在什么条件下要SQL语句要包含的内容。

if标签:

<if test="">  ...
</if>

这个标签的作用可以理解为C++中的 #if ... #endif

示例:

<select id="selectDynamicSQL" parameterType="java.util.Map" resultType="com.hust.mybatis.entity.Goods">  select * from t_goods  where   <if test="categoryId != null">  <!--如果参数中:categoryId != null-->  category_id = #{categoryId} <!--则sql语句包含这句话-->  </if>  <if test="currentPrice != null">  and current_price &lt; #{currentPrice}  </if>  
</select>

可以在MyBatis中正常使用

@Test  
public void testDynamicSQL() throws Exception {  SqlSession sqlSession = null;  try {  sqlSession = MyBatisUtils.openSession();  
//            Map param = new HashMap();  Map<String, Object> param = new HashMap<String, Object>();  param.put("categoryId", 44);  // 查询条件  param.put("currentPrice", 500);  List<Goods> list = sqlSession.selectList("com.hust.mybatis.entity.Goods.selectDynamicSQL", param);  for (Goods g : list) {  System.out.println(g.getTitle() + ": 【" + g.getCurrentPrice() + "】 -- " + g.getGoodsId());  }  } catch (Exception e) {  throw new RuntimeException(e);  } finally {  if (sqlSession != null) MyBatisUtils.closeSession(sqlSession);  }  
}

如果出现了报错,请检查一下这几个if标签有没有用逻辑运算符连接(and,or等)。

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

相关文章:

  • 旅行社项目展示微信小程序功能模块和开发流程
  • litemall,又一个小商场系统
  • WGCLOUD监控系统部署教程
  • Python大数据可视化:基于Python的王者荣耀战队的数据分析系统设计与实现_flask+hadoop+spider
  • (苍穹外卖)项目结构
  • ASP.NET Core筛选器Filter
  • ChatGPT怎么回事?
  • 软件工程-可行性研究
  • 园区网设计与实战
  • spy-debugger + Charles 调试移动端/内嵌小程序H5
  • 4.攻防世界 unseping
  • 安装和使用 Ollama(实验环境windows)
  • (一)DeepSeek大模型安装部署-Ollama安装
  • 【大数据技术】搭建完全分布式高可用大数据集群(ZooKeeper)
  • 前端学习-tab栏切换改造项目(三十一)
  • 高性能 AI 处理器亲和性调度算法实现
  • mq消息丢了,有哪些现象?有什么补救措施
  • Java面试场景题分享
  • 《ISO/SAE 21434-2021 道路汽车--网络安全工程》标准解读
  • 【BUUCTF逆向题】[MRCTF2020]Transform
  • 漏洞挖掘 | 基于mssql数据库的sql注入
  • Java 中 LinkedList 的底层源码
  • 使用服务器部署DeepSeek-R1模型【详细版】
  • k8s,1.修改容器内主机名和/etc/hosts 文件,2.root特权容器,3.pod安全策略(基于名称空间
  • MSPFN 代码复现
  • 除了console.error,还有什么更好的错误处理方式?
  • 力扣.270. 最接近的二叉搜索树值(中序遍历思想)
  • Yageo国巨的RC系列0402封装1%电阻库来了
  • wait/notify/join/设计模式
  • Windows Docker笔记-Docker拉取镜像