spring boot中的动态sql

**用动态sql实现下图查询

where choose

**
choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。

按照这上图五个条件查询数据

XML文件


<!-- 动态SQL -->
  <select id="find" resultType="com.szt.shop.entity.Goods">
     select id,gname,price,unit from goods 
     <where>
      <choose>
       <when test="id != null">
        id=#{id}     
       </when>
       <when test="gname != null">
        gname like CONCAT(CONCAT('%',#{gname},'%'))   
       </when>    
       <when test="price != null">
        price=#{price}    
       </when>
       <when test="more != null">
        price>#{more}    
       </when>
       <when test="less != null">
        price&lt;#{less}    
       </when>
       <otherwise>
                  and unit=#{unit}
              </otherwise>
      </choose> 
     </where>
 </select>

mapper 层

这里的id不能用int类型,如果查询时用了id之外的任何一个条件,就会出现空指针异常,因为int类型不能是null,我们必须给他一个值。而intege类型默认为null。

 List<Goods> find(@Param("id") Integer id,
     @Param("gname") String gname,
     @Param("price") Double price,
     @Param("more") Double more,
     @Param("less") Double less,
     @Param("unit") String unit);
 }

单元测试
查询价格小于10的商品信息

@Test
 public void find(){
  Integer id=null;
  String gname=null;
  Double price=null;
  Double more=null;
  Double less=10.0;
  String unit=null;
  List<Goods>list=goodsMapper.find(id,gname, price,more,less, unit);
  for (Goods goods : list) {
   System.err.println(goods);
  }
 }

价格小于10的商品信息(当然我都测试过,不一一举出)

在这里插入图片描述

service

List<Goods> dynamicSql(
   Integer id,String gname,Double price,Double more,Double less,String unit);
}

service实现

@Override
 public List<Goods> dynamicSql(
   Integer id, String gname, Double price, Double more, Double less, String unit) {
  
  return gService.dynamicSql(id, gname, price, more, less, unit);
 }

controller

@RequestMapping("sql")
 public List<Goods> dynamicSql(Integer id, String gname, Double price, Double more, Double less, String unit){
  return gMapper.find(id, gname, price, more, less, unit);
 }

页面测试

价格大于8的json数据
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值