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

  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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏皮皮之路

【MySQL】通过Binary Log简单实现数据回滚(一)

34960
来自专栏公众号_薛勤的博客

Hibernate各种主键生成策略与配置详解

主键由外部程序负责生成,在 save() 之前必须指定一个。Hibernate不负责维护主键生成。与Hibernate和底层数据库都无关,可以跨数据库。在存储对...

14720
来自专栏hbbliyong

ShellExecute 启动外部程序 参数详细介绍

ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。 目录 1基本简介 2...

558100
来自专栏NetCore

[实录]解决Migrator.Net 小bug

好久没写了,平时比较忙,只能趁周末的时候,写一点小东西,自己也记录一下。 平时我们做项目的时候,都会有自己的数据访问层,为了能方便以后的升级,我们一般会抽象出数...

25250
来自专栏MYSQL轻松学

load data部分字段的正确写法

在日常运维中,会经常遇到将文件中数据导入到数据库中,如果是.sql文件,直接采用source方式即可;如果是.csv、.txt文件,可以采用 load data...

15920
来自专栏恰童鞋骚年

.NET基础拾遗(6)ADO.NET与数据库开发基础

  SQL语句时操作关系型数据库的基础,在开发数据访问层、调试系统等工作中十分常用,掌握SQL对于每一个程序员(无论是.NET、Java还是C++等)都非常重要...

14730
来自专栏程序员的SOD蜜

EF+MySQL乐观锁控制电商并发下单扣减库存,在高并发下的问题

下订单减库存的方式 现在,连农村的大姐都会用手机上淘宝购物了,相信电商对大家已经非常熟悉了,如果熟悉电商开发的同学,就知道在买家下单购买商品的时候,是需要扣减库...

79880
来自专栏MasiMaro 的技术博文

OLEDB 参数化查询

一般情况下,SQL查询是相对固定的,一条语句变化的可能只是条件值,比如之前要求查询二年级学生信息,而后面需要查询三年级的信息,这样的查询一般查询的列不变,后面的...

16230
来自专栏xiaoheike

Neo4j 查询已经创建的索引与约束

在Neo4j 2.0之后为cypher语法增加了一些类似于DDL的语法,能够自己创建索引,约束等等。

45720
来自专栏微信公众号:Java团长

彻底解决MySQL中文乱码

mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。

33420

扫码关注云+社区

领取腾讯云代金券