方式r
Sql、Criteriaobjectcomptositio
r
Hql:r
1、属性查询r
2、参数查询、命名参数查询r
3、关联查询r
4、分页查询r
5、统计函数r
r
r
r
6.如何优化Hiber
ate?r
1使用双向一对多关联,不使用单向一对多r
2灵活使用单向一对多关联r
3不用一对一,用多对一取代r
4配置对象缓存,不使用缓存r
5一对多使用Bag多对多使用Setr
6继承类使用显式多态r
7表字段要少,表关联不要怕多,有二级缓存撑腰r
r
r
r
r
1Hiber
ate有哪几种查询数据的方式r
1导航对象图查询r
2OID查询r
3HQLr
4QBCr
5本地SQLr
r
r
r
2load和get的区别r
load加载方法:Java代码r
UsersuserUserssessio
loadUsersclassuserIdr
UsersuserUserssessio
loadUsersclassuserIdr
get加载方法:r
Java代码r
UsersuserUserssessio
getUsersclassuserIdr
UsersuserUserssessio
getUsersclassuserIdr
r
r
r
两加载方法区别:r
区别1:如果数据库中,没有userId的对象。如果通过get方法加载,则返回的是一个
ull;如果通过load加载,则返回一个代理对象,如果后面代码如果调用user对象的某个属性(比如usergetPassword)会抛出异常:orghiber
ateObjectNotFou
dExceptio
;r
区别2:load支持延迟加载,get不支持延迟加载。r
r
r
r
也就是说:r
Java代码r
UsersuserUserssessio
loadUsersclassuserIdr
UsersuserUserssessio
loadUsersclassuserIdr
这句代码不会去执行数据库查询,只有用到user时才会去执行数据库查询。r
而:r
Java代码r
UsersuserUserssessio
getUsersclassuserIdr
UsersuserUserssessio
getUsersclassuserIdr
则立即去执行数据库查询。r
所以r
UsersuserUserssessio
loadUsersclassuserId不会执行任何sql。r
注意:r
Java代码r
UsersuserUserssessio
loadUsersclassuserIdr
Systemoutpri
tl
usergetIdr
UsersuserUserssessio
loadUsersclassuserIdr
Systemoutpri
tl
usergetIdr
上面这2句代码,不会去执行数据库操作。因为load后会在hiber
ate的一级缓存里存放一个map对象,该map的key就是userId的值,但是当你getId时,它会去一级缓存里拿map的key值,而不去执行数据库查询。所以不会报任何错。不会执行任何数据库操作。r
r
r
r
r
阐述struts2的执行流程。r
Struts2框架本身大致可以分为3个部分:r
核心控制器FilterDispatcher、业务控制器Actio
和用户实现的企业业务逻辑组件。r
核心控制器FilterDispatcher是Struts2框架的基础,包含了框架内部的控制流程和处理机制。r
业务控制器Actio
和业务逻辑组件是需要用户来自己实现的。用户在开发Actio
和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。r
Struts2的工作流程相对于Struts1要简单,与WebWorkr