Hibernate学习3:多对一关联映射
多对一关联关系是Hibernate中很重要的一种关联关系。下面我们举例说明Hibernate中多对一的关联关系。
ER图
部门表有两个字段,id和部门名称name,id是主键;
员工表的主键是id,name指的是员工姓名,department_id是外键。
员工和部门就是多对一的关联关系。
多对一关联关系是Hibernate中很重要的一种关联关系。下面我们举例说明Hibernate中多对一的关联关系。
部门表有两个字段,id和部门名称name,id是主键;
员工表的主键是id,name指的是员工姓名,department_id是外键。
员工和部门就是多对一的关联关系。
struts2提供了功能强大的输入校验机制,通过struts2内建的输入校验器,可完成大部分的校验功能,并可以同时完成客户端和服务器端的校验。如果应用的输入校验规则特别,struts2也允许通过重写validate方法来完成自定义校验。
通过例子可以很好理解struts2中的自定义拦截器,如果用户登录成功可以访问action中的所有方法,如果用户没有登录则不可以访问action中的方法,并且提示“没有权限执行该操作”。
本例子重点说明自定义拦截器的使用方法,对于登录等界面不做过多的代码编写。
user.jsp,用来实现用户登录功能,代码如下:1
2
3
4
5<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
request,getSession().setAttribute("user","zju");
%>
用户已经登录
在struts开发中,有时会遇到这样的情况:
如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用date类型是可以接收到的,但是如果传的是20101112这样类型的字符串,用date类型是获取不到,并且会出现错误的,struts2提供了一种类型转换器供我们使用。
我们用如下代码定义类型转换器,用来实现字符串格式(“20150601”)和日期格式之间的双向转换,自定类型转换器要继承DefaultTypeConverter:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18public class TypeConverter extends DefaultTypeConverter{
@Override
public Object convertValue(Map<String, Object> context, Object value,Class toType) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
try{
if(toType==Date.class){
String[] params = (String[]) value;
return dateFormat.parse(params[0]);
}
else if(toType==String.class){
Date date = (Date)value;
return dateFormat.format(date);
}
}
catch (Exception e) {}
return null;
}
}
Action是struts2的核心内容,接下来我们将学习一下struts2中的Action。
1 | <action name="helloworld"> |
class的默认值是ActionSupport,method的默认值是execute、result中name的默认值是success。
在这种配置情况下,当浏览器请求helloworld(action)时,可以直接请求转发到hello.jsp界面。
Struts2是在WebWork2基础上发展而来,属于MVC框架。优点:
学习AOP之前,先了解AOP中常用术语
切入点(Pointcut)
切入点是连接点的集合,通知将在满足一个切入点表达式的所有连接点上运行。
举例:
在拦截器中,有一系列判断性的内容
1 | if(method.equals("savePerson")||method.equals("updatePerson") ||method.equals("deletePerson")){ ... } |
满足了上面三个方法才能开启事务,这些判断条件就为切入点
所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式是一种结构性设计模式。当客户端不想直接调用主题对象,而希望主题对象的行为前后加上预处理或者后续处理时,则可以使用代理模式。