栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis实现(指标状态)的动态sql

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis实现(指标状态)的动态sql

Mybatis实现(指标/状态)的动态sql 零、前言

97后小同事跟我抱怨,指标老是变化,今天指标有正常、低风险、高风险、明天指标有正常、低风险、中风险、高风险;后天指标的参数变化,导致一个功能老是需要修改sql.甲方脑子都有*。一切恐惧皆因火力不足。

我们通常会遇到指标会调整的问题,如指标<=0.1 为正常;0.1<指标<=0.2为低危;0.2<指标<=0.4为中危;0.4<指标为高危;后面根据业务调整指标进行调整。如果不想修改sql也不需要重启服务的情况下快速修改指标呢。则需要使用动态sql.使用mybatis的foreach配合case-when-then-else-end就可以实现,foreach不仅仅可以用来做批量插入,也可以用来做动态sql哦!

一、数据&规则 1.数据

2.规则
0~2(包括2):为正常,2~4(包括4)为低危;4~6(包括6)为中危;大于6为高危
二、代码实现 1.Java
@GetMapping("test")
@ResponseBody
public List test(){
    //todo 从数据库或缓存中读取指标数据
  
  	//模拟
    //需要保证指标的顺序所以需要使用LinkedHashMap,保证顺序也可以减少sql的负责度。
    Map map = new LinkedHashMap<>();
    map.put("正常",2);
    map.put("低风险",4);
    map.put("中风险",6);
    //最后的else使用null作为判断
    map.put("高风险",null);
    
  return otherMapper.BDFX2(map);
}

//dao层
public interface OtherMapper {
    public List BDFX2(@Param("map") Map map);
}
2.mapper.xml

        SELECT
        num,
        
            
                
                    when num <= #{value} then #{index}
                
                
                    else #{index}
                
            
        
        FROM
        (
        SELECT
        1 num UNIOn ALL
        SELECT
        2 num UNIOn ALL
        SELECT
        3 num UNIOn ALL
        SELECT
        4 num UNIOn ALL
        SELECT
        5 num UNIOn ALL
        SELECT
        6 num UNIOn ALL
        SELECT
        7 num
        ) a

三、效果

四、原理





     
       	 
         
             when num <= #{value} then #{index}
         
         
         
             else #{index}
         
    

五、批量插入

顾名思义批量插入,结合insert into tablename () values()使用

1.dao层代码
public int insertDemos(@Param("list")List demo);
2.mapper.xml

  insert into tablename(c1,c2,c3,c4) values
  
  	(#{demo.c1},#{demo.c2},#{demo.c3},#{demo.c4})
   

六、动态插入

一个对象在创建时有可能只需要部分的属性或者业务确定只需要某些属性我们可以使用动态的方式进行插入

1.dao层代码
public int insertDemos(@Param("map")Map demo);
2.mapper.xml

  insert into tablename 
   
   
  	#{k}
  
  values
  
  
  	#{v}
  

七、最后

Mybatis的foreach可以处理List,Map,数组。只要是能有固定形式的都可以使用foreach来实现动态SQL。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1023829.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号