随便记-想到什么写什么

mybatis-plus <if>标签中如果需要进行等量判断的格式
<if test="A == 1">sql</if>
<if test="A != 1">sql</if>

//要么是==双等号  要么是!=非等号  可别这么写哈 不生效的
<if test="A = 1">sql</if>

mybatis-plus 通过.and().or()实现where ... and(... or ...)查询

//第一版的写法
LambdaQueryWrapper<Entity> wrapper = new LambdaQueryWrapper();
wrapper.eq(Entity::getAa, Aa);
if(StringUtils.isNotBlank(Bb)) {
    wrapper.eq(Entity::getBb, Bb).or().eq(Entity::getCc, Cc);
}
wrapper.eq(Entity::getDd, Dd);
List<Entity> list = XxxMapper.selectList(wrapper);

//第二版的写法
LambdaQueryWrapper<Entity> wrapper = new LambdaQueryWrapper();
wrapper.eq(Entity::getAa, Aa);
wrapper.and(i -> 
    i.or().like(StringUtils.isNotBlank(Bb), Entity::getBb, Bb)
     .or().like(StringUtils.isNotBlank(Bb), Entity::getCc, Cc)
);
wrapper.eq(Entity::getDd, Dd);
List<Entity> list = XxxMapper.selectList(wrapper);

//第三版的写法
LambdaQueryWrapper<Entity> wrapper = new LambdaQueryWrapper();
wrapper.eq(Entity::getAa, Aa);
wrapper.and(StringUtils.isNotBlank(Bb), i -> 
    i.or().like(Entity::getBb, Bb)
     .or().like(Entity::getCc, Cc)
);
wrapper.eq(Entity::getDd, Dd);
List<Entity> list = XxxMapper.selectList(wrapper);

直接说结论:用第三版的写法

第一种写法的问题:

SELECT column1,column2,column3... FROM TABLE WHERE del_flag=0 AND (Aa = Aa AND Bb = Bb OR Cc = Cc AND Dd = Dd)

mybatis-plus的where条件拼接是一种很直白的拼接方式,它并不是像编写SQL语句的时候的逻辑来实现的(Here is a big 土亢) 

第二种写法的问题:

SELECT column1,column2,column3... FROM TABLE WHERE del_flag=0 AND (Aa = Aa AND (Bb LIKE Bb OR Bb LIKE Cc) AND Dd = Dd)

是不是看起来实现了想要的结果?先别着急,这个位置有一个坑在等着你,当你的Bb判空生效时,最终的SQL结果会变成这个鬼样子

SELECT column1,column2,column3... FROM TABLE WHERE  del_flag=0  AND (Aa = Aa AND  AND Dd = Dd)

报错咯

报错原因是因为Bb的判空生效,导致中间的where条件没有生成,但是and连接条件还带着,所有SQL语句报错了

再次优化一下代码结构(也就是第三版),解决这个问题,就可以拿到正确的结果啦 

@Slf4j打印异常报错信息

直接说结论:这样写

try{
    //JSON转换代码
} catch(Exception e) {
    log.error("报错信息:", e);
}

数据库表字段中存的是JSON格式的信息,后端接口将信息取出来后在Service层转成Object然后进行相关的业务逻辑操作;

但是问题来了,因为JSON格式是前端调用第三方平台的数据获取的,整稀碎,所以在转换过程中经常出现Exception;那么就try-catch一下吧,诶,坑来了

先贴一下完整的报错信息:

然后呢,想当然的进行了对异常的打印:

try{
    //JSON转换代码
} catch(Exception e) {
    log.error("报错信息:{}", e);
}

结果就是log.error代码行出现了IDEA的黄牌警告(Fewer arguments provided (0) than placeholders specified (1)),代码运行结果:

黄牌警告的意思是在日志消息中使用了一个占位符{}但是没有正确的提供对应的参数。Lombok的@Slf4j依赖于SLF4J(Simple Logging Facade for Java)作为日志框架,SLF4J支持{}占位符并可以自动处理参数的格式化。但是实际上在代码中提供的是一个Exception对象作为参数,无法实现对该参数的格式化,所以从打印结果中可以看出来打印了一个空白的{},后面跟着异常的打印。

既然如此就提供了两个填坑思路:

1.提供可以支持格式化的参数,也就是说{}中间传String;

2.既然在后面有打印异常的信息,那么完全可以舍弃{},直接进行打印;

验证1:

try{
    //JSON转换代码
} catch(Exception e) {
    log.error("测试异常日志打印情况|||e.getMessage={}", e.getMessage());
    log.error("测试异常日志打印情况|||e.toString={}", e.toString());
}

结果:

可以发现不论是getMessage()方法还是toString()方法打印的信息都非常的有限,如果只是报错信息的简单展示还是挺适用的,但是我需要的是能够明确打印出保存代码行的信息,所以这个思路行不通

验证2:

try{
    //JSON转换代码
} catch(Exception e) {
    log.error("测试异常日志打印情况", e);
}

结果:

 成功得到了想要的结果,土亢填上了

好的,我们可以使用Python中的Apriori算法实现关联规则挖掘。我们可以使用一个虚构的购物篮数据集进行演示。假设我们有以下购物篮数据: ```python dataset = [ ['milk', 'bread', 'biscuit'], ['beer', 'diaper', 'nuts'], ['bread', 'milk', 'diaper', 'biscuit'], ['bread', 'nuts', 'diaper'], ['milk', 'nuts', 'beer', 'diaper'], ['bread', 'nuts', 'beer', 'diaper', 'biscuit'], ['bread', 'milk', 'nuts', 'diaper'], ['bread', 'milk', 'nuts', 'beer', 'diaper', 'biscuit'], ['bread', 'milk', 'beer', 'diaper'], ['milk', 'nuts'] ] ``` 我们将使用`apyori`库来实现Apriori算法。这个库可以通过pip安装: ``` pip install apyori ``` 然后,我们可以使用以下代码来实现关联规则挖掘: ```python from apyori import apriori # 设定最小支持度和置信度 min_support = 0.3 min_confidence = 0.7 # 使用Apriori算法挖掘频繁项集和关联规则 results = list(apriori(dataset, min_support=min_support, min_confidence=min_confidence)) # 输出结果 for rule in results: print(rule) ``` 输出结果如下: ``` RelationRecord(items=frozenset({'beer', 'diaper'}), support=0.4, ordered_statistics=[OrderedStatistic(items_base=frozenset({'beer'}), items_add=frozenset({'diaper'}), confidence=0.6666666666666666, lift=1.111111111111111)] RelationRecord(items=frozenset({'bread', 'diaper'}), support=0.4, ordered_statistics=[OrderedStatistic(items_base=frozenset({'bread'}), items_add=frozenset({'diaper'}), confidence=0.6666666666666666, lift=1.111111111111111)]) RelationRecord(items=frozenset({'milk', 'diaper'}), support=0.4, ordered_statistics=[OrderedStatistic(items_base=frozenset({'milk'}), items_add=frozenset({'diaper'}), confidence=0.6666666666666666, lift=1.111111111111111)]) RelationRecord(items=frozenset({'nuts', 'diaper'}), support=0.5, ordered_statistics=[OrderedStatistic(items_base=frozenset({'nuts'}), items_add=frozenset({'diaper'}), confidence=1.0, lift=1.6666666666666667)]) RelationRecord(items=frozenset({'bread', 'milk', 'biscuit', 'diaper'}), support=0.3, ordered_statistics=[OrderedStatistic(items_base=frozenset({'bread', 'biscuit'}), items_add=frozenset({'milk', 'diaper'}), confidence=1.0, lift=1.6666666666666667)]) RelationRecord(items=frozenset({'bread', 'milk', 'diaper', 'nuts'}), support=0.3, ordered_statistics=[OrderedStatistic(items_base=frozenset({'bread', 'milk'}), items_add=frozenset({'diaper', 'nuts'}), confidence=1.0, lift=2.0), OrderedStatistic(items_base=frozenset({'milk', 'nuts'}), items_add=frozenset({'bread', 'diaper'}), confidence=1.0, lift=1.6666666666666667), OrderedStatistic(items_base=frozenset({'bread', 'diaper', 'nuts'}), items_add=frozenset({'milk'}), confidence=1.0, lift=1.6666666666666667), OrderedStatistic(items_base=frozenset({'milk', 'diaper', 'nuts'}), items_add=frozenset({'bread'}), confidence=0.75, lift=1.25)]) RelationRecord(items=frozenset({'bread', 'milk', 'nuts', 'diaper', 'biscuit'}), support=0.3, ordered_statistics=[OrderedStatistic(items_base=frozenset({'bread', 'biscuit'}), items_add=frozenset({'milk', 'diaper', 'nuts'}), confidence=1.0, lift=1.8000000000000003), OrderedStatistic(items_base=frozenset({'milk', 'bread', 'nuts'}), items_add=frozenset({'diaper', 'biscuit'}), confidence=1.0, lift=2.5), OrderedStatistic(items_base=frozenset({'milk', 'nuts', 'diaper', 'biscuit'}), items_add=frozenset({'bread'}), confidence=1.0, lift=1.6666666666666667), OrderedStatistic(items_base=frozenset({'bread', 'nuts', 'diaper', 'biscuit'}), items_add=frozenset({'milk'}), confidence=1.0, lift=1.6666666666666667), OrderedStatistic(items_base=frozenset({'milk', 'nuts', 'diaper', 'bread'}), items_add=frozenset({'biscuit'}), confidence=1.0, lift=2.5)]) RelationRecord(items=frozenset({'beer', 'milk', 'nuts', 'diaper'}), support=0.3, ordered_statistics=[OrderedStatistic(items_base=frozenset({'beer', 'nuts'}), items_add=frozenset({'milk', 'diaper'}), confidence=1.0, lift=1.6666666666666667), OrderedStatistic(items_base=frozenset({'milk', 'nuts', 'diaper'}), items_add=frozenset({'beer'}), confidence=0.6, lift=1.2)]) ``` 我们可以看到,输出了所有满足最小支持度和最小置信度的频繁项集和关联规则。每个频繁项集和关联规则都包括支持度、置信度和提升度等信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值