美文网首页javaweb收藏程序员
Java Web技术经验总结(十四)

Java Web技术经验总结(十四)

作者: 程序熊大 | 来源:发表于2016-12-06 16:13 被阅读1230次
    1. try-catch的异常打印原则:(1)优先catch具体异常,最后catch通用异常Exception;(2)异常日志打印需要将入参、结果和请求打印出来,方便排查问题;

    2. 利用HTTP CLIENT发送GET请求时,必须URL Encode.

    3. MySQL和Mybatis的批量更新操作,最近遇到一种情况,需要给多个字段更新成不同的值,最后参考:Mybatis之批量更新操作这篇文章搞定的。

    4. 利用MyBatis写批量插入或者更新的语句,假设参数列表的大小为x,则返回值的范围是[x,2x]。

    <insert id="batchInsertOrUpdateWechatFans" parameterType="java.util.List">
        INSERT INTO test(fans_id, test_id, openid, nickname, picture,update_time, create_time)
        VALUES
        <foreach collection="list" item="item" index="index" separator="," >
            (#{item.fansId}, #{item.testId}, #{item.Openid}, #{item.nickName}, #{item.picture},#{item.updateTime},#{item.createTime})
        </foreach>
        ON DUPLICATE KEY UPDATE nickname=VALUES(nickname), picture=VALUES(picture), update_time=VALUES(update_time)
    </insert>
    
    1. 关于断言的使用:我查了下资料,JVM通过-ea配置项控制断言是否打开,默认是关闭的。用在生产项目中的时候,一定不能做的事情是用断言决定业务逻辑,我下午那么用有风险。准备再梳理一遍代码,采取两个方式处理dao层的返回值:(1)上层业务明确需要知道DB操作是否成功,通过逻辑判断返回true or false;(2)上层业务不强关心DB操作是否成功,通过逻辑判断,如果db操作失败,仅仅打印warn日志。

    2. 当你想用Thread.sleep()方法的时候,可以优先使用TimeUnit.SECONDES.sleep(x)接口,代码可读性更好。参见:优先使用TimeUnit类中的sleep()

    3. 最近做一点和微信相关的工作,从微信那边取回来的粉丝昵称中如果有表情符号,存放到MySQL中的时候出现乱码,解决的办法就是:检查JDBC连接、druid连接、MYSQL表的字符集等方面。参考:微信nickname乱码(emoji)及mysql编码格式设置(utf8mb4)解决的过程

    4. 在进行数据迁移的时候,需要从某张表里查询一批数据,最先使用了普通的分页查询,代码如下:

    SELECT *
    FROM fans
    WHERE mp_id=#{mpId}LIMIT #{offset},#{count}
    

    这个语句如果只是查询前面几页,或者是表的数据量不大(小于10万),就没有问题,否则就会出现慢查询。参考文章:【MySQL】 性能优化之 延迟关联进行了优化。

    1. 今天遇到一个JSON解析失败的案例,错误表现为:
      "com.alibaba.fastjson.JSONException: unclosed string : ^Z",最后查出来是fastjson的锅,我用的fastjson为1.2.0的,版本太低,这个问题在fastjson 1.2.9解决掉了。参考:github issue

    相关文章

      网友评论

        本文标题:Java Web技术经验总结(十四)

        本文链接:https://www.haomeiwen.com/subject/kvnvpttx.html