Spring JdbcTemplate 具名参数使用简介
公司原有项目中,因为以前赶时间,有些地方做的稍微粗糙了一些,某些地方存在 N+1查询问题。最近这两个月再做一个新项目。所有,以前踩过的坑,希望这次能尽量避免。比如 N+1查询问题。
公司技术方面,Dao 层使用的是 Spring JdbcTemplate;数据库使用的是 MySQL。所以,关于这次的主题,D瓜哥 也只关注 Spring JdbcTemplate 和 MySQL。
从出坑到入坑
讲述解决办法之前,D瓜哥 先说明一下背景问题:一个订单 Order
中,会有多个订单元素 OrderItem
,在查看订单列表时,需要根据订单 ID 查询相关的订单元素信息。查询方式有两种:一、在循环中,每次循环根据一个订单 ID 查询一个订单对应的订单元素信息。这就是典型的 N+1查询问题。另外一种方式,根据查询出来的所有的订单 ID 一次查询出所有相关的订单元素信息。显然,第二种方式要比第一种方式效率上高很多。这是基本的背景问题。下面来说明一下 D瓜哥 在解决这个问题过程中犯的错误以及更好的解决办法。
看到上述问题时,D瓜哥的第一反应就是使用 IN
就可以很好地解决。开始噼里啪啦写代码:
1 | String sql = " SELECT * " + |
2 | " FROM `order_item` " + |
3 | " WHERE order_id IN ( ? )" ; |
4 |
5 | List<OrderItem> orderItemList = getJdbcTemplate().query(sql, new BeanPropertyRowMapper<OrderItem>(OrderItem. class ), orderItemArray); |
结果一运行,代码妥妥地 阅读全文…