今天开始做管理后台中一个页面。管理后台视图技术用的是 JSP + JSTL。好久不写了,好多地方搞的不是特别清楚。所以,写代码就各种查。D瓜哥做了汇总,省得以后还要东找西找!
简单配置
需要在使用的页面加上相应的标签声明:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
公司原有项目中,因为以前赶时间,有些地方做的稍微粗糙了一些,某些地方存在 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);
结果一运行,代码妥妥地 阅读全文…
在写 Java 项目时,很多时候我们都必须判断一下对象是否为 null
。这个在 Java 代码中,很容易实现。在使用 Velocity 的 Java Web 项目中,很多时候,需要在 Velocity 的模板中,判断一个对象是否为空。那么这时,该如何判断呢?今天D瓜哥就来给大家简单介绍介绍!
方式一
事实上,在 Velocity 中 null
对象是作为 阅读全文…
最近项目中一个问题:在常量类 GlobalConstants
中定义了许多关于订单状态的常量(使用public static final
修饰),这些常量,某些情况也许有在 Velocity 模板中访问。请问,该如何访问?
由上面的问题,引申出另外一个问题:又该如何访问静态方法呢?
今天先来解决其中的一个问题。
访问常量
Velocity Tool 中提供了相应的 阅读全文…
昨天D瓜哥参加了一个Java工程师面试,具体公司名称就不透露了。感觉被问的问题挺有代表性。简单整理一下,发布出来,给需要的朋友一个参考吧。暂时没有解答,抱歉!
-
以前工作中收获最大的一次经历是什么?
这里只说明一下收获吧。
- 高性能网站的十四条黄金法则
- 高性能JavaScript
-
所需知识哪些 阅读全文…
最近在帮朋友做个小网站。因为感觉Rails太好玩了。所以,就准备使用Rails来搞。但是,有时因为D瓜哥刚刚学习Rails。所以,就遇到了各种各样的诡异问题。今天就来讲解一个D瓜哥纳闷很久的问题: 如何让前台浏览页面和后台管理页面使用不同的layout(窃译为“布局”)文件?
简介
Markdown 是一种轻量级标记语言,由John Gruber和Aaron Swartz创建,使其成为可读性最大并可再发行的可输入输出的格式。
Markdown 并不是为了取代 Html,因为根本取代不了。Markdown 的理念是,
能让文档更容易读、写和随意改。HTML 是一种发布的格式,Markdown 阅读全文…
《Agile Web Development with Rails》抄书笔记系列
“《Agile Web Development with Rails》抄书笔记系列”目录
上一节提到,客户希望我们的网店使用Ajax来实现。那么神马是Ajax呢?
在过去(2005年以前),浏览器被我们当作一个聋哑人。当我们开发一个基于浏览器的应用时,我们会发送一个页面到浏览器,然后忽略这次会话。曾几何时,用户填写一些表单信息,然后点击链接,接着应用被进来的请求唤醒,开始处理请求。最后,应用返回一个完整页面给用户,冗长的处理过程还要再度开始。在此之前,我们的Depot应用也是如此。
但是,事实上浏览器并非是一个聋哑人。浏览器也可以运行代码,几乎所有的浏览器都可以运行JavaScript。另外,经试验证明,JavaScript可以在幕后和服务器进行交互,更新页面。 Jesse James Garrett将 阅读全文…
《Agile Web Development with Rails》抄书笔记系列
“《Agile Web Development with Rails》抄书笔记系列”目录
上一节,我们介绍了如何进行错误处理。另外,既然可以向购物车中添加商品,那么清空购物车也是一个必要的功能。我们这节来实现清空购物车的功能。
D呱呱
关于这节内容的代码:
- 这节开始之前:https://github.com/diguage/depot/tree/v-10.2
- 这节完成之后:https://github.com/diguage/depot/tree/v-10.3
要实现清空购物车的功能,那么我们必须 阅读全文…