一,. request session application生命周期
1, request存活于客户端与服务器端每次页面请求中。
2, session会话结束于客户端的断开,即浏览器的关闭。
3,application 结束于服务器的关闭,客户端浏览器重新打开依然能访问application的历史数据。
二,国际化资源文件的使用
即为后缀名为 .properties 的配置文件,包含一些键值对,实现一些参数的设置。例如网页国家语言的设置,用户信息设置
三,内建转换器:即实现程序中数据的类型与网页要求的字符串类型的转换。
数据校验:为了实现客户端用户输入的数据满足程序要求,客户端通常使用Javascript添加数据校验功能,例如用户名字符位数验证,邮箱格式验证。但是为了防止黑客使用非法输入攻击,例如给客户端网页做手脚,删掉客户端的javascript数据校验,非法输入,向服务器提交网页请求,给服务器造成伤害。为了防止非法输入,服务器端往往也需要添加输入校验,这种检验方式需向服务器端进行多次请求,校验效率低于客户端校验。
四,hibernate中对象的三种状态:
1,临时状态,即为刚刚实例化的对象
2,持久化状态,临时对象对象数据已经写入到数据库
3,托管状态,session关闭之后,与session关联的持久化对象变为托管对象。如果托管对象重新关联到某个新的session上,会再次转为持久化对象。
三种状态转换图如下:
四,hibernate 数据库操作语句用的最多的还是HQL QBC 有参考博文:点击打开链接
QBC(Qurey By Criteria)检索方式
采用HQL检索方式时,在应用程序中需要定义基于字符串形式的HQL查询语句。QBC API提供了检索对象的另一种方式,它主要由Criteria接口、Criterion接口和Expression类组成,它支持在运行时动态生成查询语句。
示例代码:
Criteria criteria = session.createCriteria(Customer.class); Criterion criterion1 = Expression.like("namr", "T%"); Criterion criterion2 = Expression.eq("age", new Integer(21)); criteria = criteria.add(criterion1); criteria = criteria.add(criterion2); // 执行检索 List result = criteria.list(); // 方法链编程风格 List result1 = session.createCriteria(Customer.class).add(Expression.like("namr""T%")).add(Expression. eq("age", new Integer(21))).list(); Hibernate还提供了QBE(Qurey By Example)检索方式,它是QBC的子功能。QBE允许先创建一个随想模板,然后检索出和这个样板相同的对象。 示例代码: Customer exampleCustomer=new Customer(); exampleCustomer.setAge(21); List result1 = session.createCriteria(Customer.class).add( Example.create(exampleCustomer)).list();
HQL检索方式
HQL(Hibernate Query Language)是面向对象的查询语言,它和SQL查询语言有些相似。在Hibernate提供的各种检索方式中,HQL是使用最广的一种检索方式。它具有以下功能:
在查询语句中设定各种查询条件。
支持投影查询,即仅检索出对象的部分属性。
支持分页查询。
支持分组查询,允许使用group by和having关键字。
提供内置聚集函数,如sum()、min()和max()。
能够调用用户定义的SQL函数。
支持子查询,即嵌套查询。
支持动态绑定参数。
Session类的Qurey接口支持HQL检索方式,它提供了以上列出的各种查询功能。
注:Qurey接口支持方法链编程风格,它的set方法都返回自身实例,而不是返回void类型。方法链编程风格能使程序代码更加简洁。
示例代码:
Query query = session.createQuery("from Customer as c where " +"c.name=:customerName and c.age=:customerAge"); // 动态绑定参数 query.setString("customerName", "Test"); query.setInteger("customerAge", 21); // 执行检索 List result = query.list(); // 方法链编程风格 List result1 = session.createQuery( "from Customer as c where c.name=:customerName and c.age=:customerAge").setString( "customerName", "Test").setInteger("customerAge", 21) .list();
依赖注入:通俗讲,更加灵活的给服务使用者注入服务实例,而不用事先实例化服务实例,大大降低了代码之间的耦合性,实现了代码和功能的分离。服务使用者,例如SSH中action,只需声明服务的接口变量,程序通过配置文件set 或者构造器操作 (两种注入方式)实现服务对象的注入(实例化)。
AOP:切面是一个抽象出来的功能模块的实现,通俗讲就是每一次功能实现的操作,完成该功能所需要的一系列操作可以看成是一个面,面向切面编程就是在这个面的之前之后或者添加你需要的其他功能实现。可以看成是切面的功能模块,例如用户登录的功能,客户端的每次请求操作等等。
根据切面的不同切入点,看可以分为:前置通知,后置通知,拦截通知和异常通知。前两者通知的调用分别在切面的前和后,后两者的调用可以在切面的前和后两个方位。