java获取时间+事务+mybatis批量更新+前后端传值换行符问题=2020/12/14~12/18

一、java 获取时间的办法

java.util.Date
java.text.DateFormat(抽象类);
java.text.SimpleDateFormat (DateFormat的直接子类);
java.util.Calendar(抽象类)。

因为Date的设计具有"千年虫"以及"时区"的问题,所以Date中的大部分方法已经不建议使用了,它们都被java.util.Calendar类所取代。

Calendar 类用于封装日历信息,其主要作用在于其方法可以对时间分量进行运算。

另外:获取时间的话, System.currentTimeMillis()new Date().getTime()Calendar.getInstance().getTime() 3个API的结果是一致的,除了计时方式UTC、GMT,和包装器以外,其余没啥区别。

System.currentTimeMillis() 耗时很少,几乎不用创建对象,所以比较快(是calendar的两三千倍),我们项目上都是用的这个。

参考:JAVA中关于获取时间(日期)的总结大全
JAVA中 System.currentTimeMillis() 与 new Date().getTime() 与Calendar.getInstance().getTimeInMillis()区别

二、事务

事务:要么是xml、要么是注解方式,我们用的是注解的方式。@Transactional,设置的是 rollbackFor = {BizException.class}来回滚。被catch处理了的异常,不会被事物作为判断依据; 如果异常被catch 了,但是又在catch中抛出了新的异常,那么事物会以这个新的异常作为是否进行回滚的判断依据。
我们的做法是在catch里面写TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();throw new BizException;(自定义业务异常)
我只在总的方法上加了注解,事务的策略默认的是PROPAGATION_REQUIRED,意思是:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。所以有多个事务也会合成一个。
不过,阿里巴巴规范中推荐:事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。这样的话会让我们更清楚整个事务的流程吧,从注入事务管理器,到配置事务策略,设置状态点,到手动提交,如果有异常就手动回滚。当然这样就不要用注解了。

参考:SpringBoot声明式事务的简单运用
Spring事务的传播:PROPAGATION_REQUIRED

三、 mybatis批量更新

一种 用for循环通过循环传过来的参数集合,循环出N条sql,(url加 &allowMultiQueries=true)

<update id="updateBatch"  parameterType="java.util.List">  
    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        update course
        <set>
            name=${item.name}
        </set>
        where id = ${item.id}
    </foreach>      
</update>

另一种 用mysql的case when 条件判断变相的进行批量更新

UPDATE course
    SET name = CASE id 
        WHEN 1 THEN 'name1'
        WHEN 2 THEN 'name2'
        WHEN 3 THEN 'name3'
    END, 
    title = CASE id 
        WHEN 1 THEN 'New Title 1'
        WHEN 2 THEN 'New Title 2'
        WHEN 3 THEN 'New Title 3'
    END
WHERE id IN (1,2,3)

第一种效率其实相当高的,因为它仅仅有一个循环体,只不过最后update语句比较多,量大了就有可能造成sql阻塞。

第二种虽然最后只会有一条更新语句,但是xml中的循环体有点多,每一个case when 都要循环一遍list集合,所以大批量拼sql的时候会比较慢,所以效率问题严重。使用的时候建议分批插入。

参考:批量更新数据两种方法效率对比
mybatis高效率批量update

另:MySQL事务锁问题-Lock wait timeout exceeded

四、前后台传换行符的问题

这个问题还没处理,处理后更新
(20210116更新:该问题已被前端悄悄搞定了,具体没问咋搞的。)

参考:前后台传换行符的问题
传值包含换行符问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值