1.hiberbate整合spring实现增删改查有两种方法,一是HibernateDaoSupport,二是hibernateTemplate。区别在于HibernateDaoSupport无法使用注解,hibernateTemplate可以使用注解功能。但在xml配置时,HibernateDaoSupport较灵活。
2..hibernate整合spring时就无需再写hibernate.cfg.xml配置文件了。原来的内容都可以添加到applicationContext.xml中。
3.利用el表达式可以获取项目的名称,如可以用
${pageContext.request.contextPath}
来显示。如项目名称为test,则加入该段代码后,页面显示为
/test
而要用java代码显示项目名,则可以用
<%= request.getContextPath() %>
实现类似的功能。
4.String型转换为long型。如从后台接收long型的id,在java中直接接受的为String型,这时就需要转换
long userID = Long.parseLong(request.getParameters("userId"));
5.点击按钮返回上一步,可以用
οnclick="history.go(-1)"
或者用javascript;来写
<a href="javascript:history.go(-1)">返回上一步</a>
6.使用
private static final long serialVersionUID = 1L;
serialVersionUID用来表明类的不同版本间的兼容性。就是说java的序列化机制是通过在运行时判断类的serivalVersionUID来验证版本一致性。只有同一次编译生成的class才会生成相同的serivalVersionUID。
7.hibernate的hql语句中“=:”是占位符,表示要赋的值,这个和占位符“?”作用相同,只是用法略有差别。注意“=:”两边不能有空格。如
String hql ="from Cart as a where a.member=:member and a.cartStatus=0";
中a.member后要传入参数,而这种参数是以键值对形式定义的。可以为setParameter("member",value);
若为"?"的话,则为setParameter(1,value);
8.关于日期的格式问题
如果MySQL中日期格式为dateTime,那么在jsp页面显示的也为dateTime类型,日期接受的为String型。
比如createDate在数据库显示的为2013-11-12 00:00:00,利用${order.createDate}显示的为2013-11-12 00:00:00。这时可以格式化显示,方法也很简单。
在jsp页面引入
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
显示时,可以用
<fmt:formatDate value="${order.createDate}" pattern="yyyy-MM-dd" />
然后显示的只有日期2013-11-12
当然,也可以在从数据库接收时用simpleDateFormate直接格式化时间,但是还得转码,相对来说比较麻烦。
9.两张表order和suppliers,order表存储的是suppliers的id,那么在jsp页面怎么显示suppliers的name属性(即根据order的suppliersId查询出相应的suppliersName)?可以用如下方法
List<Order> list = this.orderManager.getOrderById(id);
for(Order order : list){
Suppliers suppliers = this.suppliersManager.getSuppliersName(order.getSuppliersId());
order.setSuppliersName(suppliers.getSuppliersName());
}
而不用另外写什么复杂的方法。
order表存储的只是suppliersId,没有suppliersName。此时为了方便,需要在jsp页面显示suppliersName,而不是suppliersId。就有了该过程,整个流程是先对order对象进行遍历,找出表中存储的suppliersId,根据suppliersId找出suppliersName,再把suppliersName这个属性set进order对象即可。
10.jsp页面做判断,根据不同的值显示不同的内容。
比如说“状态”,数据库存储的只是数字,0表示“进行中”,1表示“已完成”。那么为了在页面看着较直观,可以用c标签做判断,而且可以直接用,无需先导入标签库。
<c:choose>
<c:when test = "${order.orderStatus == 0 }" ><!-- 注意该处写法-->
<c:out value = "进行中"></c:out>
</c:when>
<c:otherwise>
<c:out value="已完成"></c:out>
</c:otherwise>
</c:choose>