存档

2016年2月 的存档

Spring JdbcTemplate 具名参数使用简介

2016年2月28日 2 条评论

公司原有项目中,因为以前赶时间,有些地方做的稍微粗糙了一些,某些地方存在 N+1查询问题。最近这两个月再做一个新项目。所有,以前踩过的坑,希望这次能尽量避免。比如 N+1查询问题

公司技术方面,Dao 层使用的是 Spring JdbcTemplate;数据库使用的是 MySQL。所以,关于这次的主题,D瓜哥 也只关注 Spring JdbcTemplate 和 MySQL。

从出坑到入坑

讲述解决办法之前,D瓜哥 先说明一下背景问题:一个订单 Order 中,会有多个订单元素 OrderItem,在查看订单列表时,需要根据订单 ID 查询相关的订单元素信息。查询方式有两种:一、在循环中,每次循环根据一个订单 ID 查询一个订单对应的订单元素信息。这就是典型的 N+1查询问题。另外一种方式,根据查询出来的所有的订单 ID 一次查询出所有相关的订单元素信息。显然,第二种方式要比第一种方式效率上高很多。这是基本的背景问题。下面来说明一下 D瓜哥 在解决这个问题过程中犯的错误以及更好的解决办法。

看到上述问题时,D瓜哥的第一反应就是使用 IN 就可以很好地解决。开始噼里啪啦写代码:

String sql = " SELECT * " +
        " FROM `order_item` " +
        " WHERE order_id IN ( ? )";

List<OrderItem> orderItemList = getJdbcTemplate().query(sql, new BeanPropertyRowMapper<OrderItem>(OrderItem.class), orderItemArray);

结果一运行,代码妥妥地 阅读全文…

Guava 小技巧三则

2016年2月26日 没有评论

最近在赶一个项目,由于D瓜哥也算是半个 Google 粉。所以,对 Google 出品的 Guava 项目可以说情有独钟。最近使用使用中遇到三个问题以及使用 Guava 的解决办法,D瓜哥觉得挺有代表性的。所以简单记录一下。

Map 相关的 JoinerSplitter

第一个问题:D瓜哥需要从 URL 中获取相关请求的参数,并且将其转化成 Key-Value 形式放到 Map对象,方便后续操作。

URL 中,参数的格式大家应该都了解:http://www.diguage.com?userName=diguage&sex=fale。以 阅读全文…

分类: Java, 挨踢(IT), 日拱一卒 标签:

在 Velocity 中判断对象为 null

2016年2月25日 没有评论

在写 Java 项目时,很多时候我们都必须判断一下对象是否为 null。这个在 Java 代码中,很容易实现。在使用 Velocity 的 Java Web 项目中,很多时候,需要在 Velocity 的模板中,判断一个对象是否为空。那么这时,该如何判断呢?今天D瓜哥就来给大家简单介绍介绍!

方式一

事实上,在 Velocity 中 null 对象是作为 阅读全文…

在 Velocity 模板中访问常量

2016年2月25日 没有评论

最近项目中一个问题:在常量类 GlobalConstants 中定义了许多关于订单状态的常量(使用public static final 修饰),这些常量,某些情况也许有在 Velocity 模板中访问。请问,该如何访问?

由上面的问题,引申出另外一个问题:又该如何访问静态方法呢?

今天先来解决其中的一个问题。

访问常量

Velocity Tool 中提供了相应的 阅读全文…

修改 Git 提交日志的作者信息

2016年2月18日 没有评论

这两天遇到一个问题,需要修改一下 Git 提交日志中的作者名称以及电子邮件。好吧,D瓜哥承认,这个需
求很奇葩。原以为不能搞,上网查了一下,可以搞。直接上代码:

#
# D瓜哥,http://www.diguage.com
#

git filter-branch -f --env-filter "
    GIT_AUTHOR_NAME='diguage'
    GIT_AUTHOR_EMAIL='leejun119@gmail.com'
    GIT_COMMITTER_NAME='diguage'
    GIT_COMMITTER_EMAIL='leejun119@gmail.com'
  " HEAD

如果需要选择一部分用户来调整,则可以 阅读全文…

分类: 挨踢(IT), 日拱一卒 标签: ,

Redis Sentinel 启动脚本

2016年2月18日 没有评论

公司项目中使用到了 Redis Sentinel。以前只用过 Reids。所以,也只了解 Redis 的关闭和启动。至于 Redis Sentinel,那就抓瞎了。每次使用,都是先用现查,特别麻烦。这次在查资料时,在 Github Gist 上查到一个非常不错的启动脚本,可以非常方便地解决这个问题。分享给大家,希望对大家有所帮助。另外, 推荐大家认真阅读一下 阅读全文…

Velocity 工具类配置

2016年2月16日 没有评论

博客又有一段时间没有更新了。前一段时间(好几个月前了,哈哈),看一个朋友的博客,内容有长有短,类似日志;最近看一个微信公众号,座右铭是:宁可十年不将军,不可一日不拱卒。所以,考虑以后把每天有趣或者有意义的东西做个小结,记录发文出来。本文章就算是第一个篇文章吧。

公司项目里使用 Velocity 。网上相关的资料很零散,相关的配置查起来挺麻烦了。而且又没有很好的示例,今天又要费心地配置 Toolbox 。所以,干脆记录下来,

工具类配置文件的位置

默认的 Velocity 工具相关的配置放在 WEB-INF/toolbox.xml。当然,也可以在 web.xml 中配置,配置片段如下:

<!-- Define Velocity template compiler -->
<servlet>
  <servlet-name>velocity</servlet-name>
  <servlet-class>
    org.apache.velocity.tools.view.servlet.VelocityViewServlet
  </servlet-class>

  <!--
    Unless you plan to put your toolbox.xml and velocity.properties
    under different folders or give them different names, then these
    two init-params are unnecessary as of VelocityTools 1.3.  The
    VelocityViewServlet will automatically look for these files in
    the following locations.
  -->
  <init-param>
    <param-name>org.apache.velocity.toolbox</param-name>
    <param-value>/WEB-INF/toolbox.xml</param-value>  <!--1-->
  </init-param>

  <init-param>
    <param-name>org.apache.velocity.properties</param-name>
    <param-value>/WEB-INF/velocity.properties</param-value>
  </init-param>
</servlet>

<!-- Map *.vm files to Velocity -->
<servlet-mapping>
  <servlet-name>velocity</servlet-name>
  <url-pattern>*.vm</url-pattern>
</servlet-mapping>
  1. 这里就是 Toolbox 的配置路径。

如果使用 Spring MVC,也可以在 Spring MVC 的配置文件中,配置 阅读全文…