@CachePut 如何只更新 bean 中值不为 null 的属性 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zhady009
V2EX    Java

@CachePut 如何只更新 bean 中值不为 null 的属性

  •  
  •   zhady009 Sep 17, 2018 3732 views
    This topic created in 2781 days ago, the information mentioned may be changed or developed.
     @Override // @CacheEvict(key = "#root.targetClass.simpleName + #record.id") @CachePut(key = "#root.targetClass.simpleName + #record.id") public T updateById(T record) { baseMapper.updateByPrimaryKeySelective(record); return record; } 

    原本是更新数据就直接删除缓存 但是感觉不是合理 试了一下 CachePut 即使是 null 也会更新 不过后来想到应该可以用 condition 和 spel 来定制规则 但是又有新的问题 因为是通用 service 里面 具体的 bean 的是未知的 想不到有什么思路可以实现

    8 replies    2018-09-18 00:49:18 +08:00
    xuanbg
        1
    xuanbg  
       Sep 17, 2018
    这个注解是没办法了,只能自己通过反射来解决
    zjp
        2
    zjp  
       Sep 17, 2018
    @CachePut( unless = "#record == null")
    record 是泛型也能判空,有什么问题?
    zhady009
        3
    zhady009  
    OP
       Sep 17, 2018
    @zjp record
    比如是一个 User 里面有 username password 等属性
    比如我只更新 password 其他的属性就会是 null 如何让他不更新 Null 的值
    zjp
        4
    zjp  
       Sep 17, 2018 via Android
    @zhady009 如果是 RedisCacheManager 之类的做不到,缓存的是序列化后的数据。用 ConcurrentMapCacheManager 好像也得手工操作… condition 和 unless 都只能用字符串配置
    xbigfat
        5
    xbigfat  
       Sep 17, 2018
    楼主你好,你讲的这个我刚刚好在写~按照我的理解来说,其实是一个 Query 操作。
    给定一个 T element 对象,element 中填充了部分成员,返回一个 List<T> 中就是楼主需要的结果了。
    首先要根据现有的 element 组成一个 SQL 语句,执行查询之后,返回到 ResultSet rs。
    然后用这个 rs 生成 List<T> 即可;
    我刚刚写到最后一步,就看到你的帖子了,希望对你有帮助~(这个最后一步我还没写好,但是是用反射,直接赋)
    xbigfat
        6
    xbigfat  
       Sep 17, 2018
    又看了一遍,如果我理解错了请轻拍。
    zhady009
        7
    zhady009  
    OP
       Sep 18, 2018
    @xbigfat 如果要多一次查询的话那感觉还是更新数据的时候把缓存删了好

    下一次查询 @Cacheable 也是这种效果, 我只是想减少一次对数据库的查询操作

    不管怎么说感谢了
    xbigfat
        8
    xbigfat  
       Sep 18, 2018
    @zhady009
    Sorry,刚刚查了一下 Cacheable 注解,原来是 Spring 的项目,我是一个 Android 开发者,最近刚学 J2EE 还在手写 ORM 阶段,没用过 Spring 所以。。你刚刚写的这个注解我没注意以为你 @的某个人,原来我们讨论的不是一个层次的问题。。看来是我想多啦~ Spring 我还不会
    About     Help     Advertise     Blog     API     FAQ     Solana     1094 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 22:52 PVG 06:52 LAX 15:52 JFK 18:52 Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86