记录使用spring注解的事及其他注意
1.@RequestBody与@RequestParam
当前台使用json字符串提交请求参数时,这个时候请求体是request Payload形式,后台需要使用@RequestBody
当前台使用表单或?param=¶m2=形式提交请求参数,这个时候请求体是form data 形式,后台需要使用@RequestParam
2.cacheable缓存
@cacheable(value="config",key="#key"),该注解会生成key为config::#key的数据存在redis中,value和namespace含义一样,

这时,当key为null时,redis会报错,可以使用condition="#key!=null"避免
condition表示: true: 先查缓存(redis),若找不到,再执行方法,并保存结果至缓存;false:不走缓存,直接执行方法
unless与condition相反。true:不保存缓存;false:保存缓存。eg:unless="#result==null"(#result代表方法返回的结果)表示结果为null时,不存缓存。
unless:函数返回值符合条件的,不缓存。[除了符合el表达式条件的,其余的都进行缓存。
关于缓存删除,参看文章:https://www.cnblogs.com/coding-one/p/12408631.html
3.sql order by语句:如果对排序要求低,尽量不要用,使用排序,会影响选择索引的策略
4.base64
Base64并不是安全领域下的加密解密算法,只能算是一个编码算法
原理:Base64编码算法,要求把没每三个8bit的字节转换为四个6bit字节,其中转换之后的这四个字节中每6个有效bit为有效数据,空余的两个bit用0补上成为一个字节。
5.mybatis批量插入的时候,id不存在时,会为每条记录返回自增长主键id
验证语句:
验证结果:
这里需要注意一个坑:sql语句如下,功能是批量插入操作,当有ID时,使用之前的ID,没有,插入后返回自增主键ID,这里往mysql数据库插入没有问题,但是id的有问题。
问题是:有id的数据插入后,返回了本来是没有id数据插入后的id,但是数据库里使用的却是传入的id,导致了id不一致,后面如果有跟id关联的操作时会不正常。
同时说明一下,这次返回的自增id并没有用到,下次使用正常的数据插入数据后,依旧会得到这个id。如果部分新增数据有id,部分(假设n个)没有id,数据库里的数据id会出现n个断层

解决:插入后,查询数据库把真实的id查出来,赋值

6.流操作的forEach不可中途因为return,break停止,foreach操作全部执行。另外当需要将一个集合变成多个集合并有其他操作时,最好不要使用流,而是使用iter来循环这个集合得到相要的结果和进行操作。(一个流操作只能进行一种行为,想进行多种行为,就需要多次遍历,浪费资源)
7.PROPAGATION_REQUIRES_NEW注解,外部事务不会影响内部事务;内部事务抛出异常,回滚,外部事务tryctach处理异常后,外部事务不会回滚。
参看:https://www.cnblogs.com/dangjunhui/p/5477480.html

当方法很多的时候,要注意是哪个事务抛的异常,handleException是记录异常信息,跑的时候出现了rollback-only那个异常,一开始一直以为是(1)操作导致的,最后发现是(2)操作导致的。2和3是一个事务,所有2出现异常的时候,3操作也提交不了
8.mysql级联删除使用表名 (别名,没验证过,网上说不行)
<delete id="deleteByPlatformOrderCodes">
DELETE doc_out_temp_so.*,doc_out_temp_so_item.* FROM doc_out_temp_so LEFT JOIN doc_out_temp_so_item ON doc_out_temp_so.id= doc_out_temp_so_item.temp_so_id WHERE doc_out_temp_so.platform_order_code IN
<foreach collection="set" item="code" separator="," close=")" open="(">
#{code}
</foreach>
</delete>
浙公网安备 33010602011771号