`
laoaenna
  • 浏览: 22928 次
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
struts2.2.3.1 struts
关于struts2.2.3.1
通过小例子对struts框架有了新的认识 :
一个简答的访问过程:通过jsp页面的请求,然后struts.xml会通过请求的action,选择相应的配置,然后执行相应的action,根据相应的action返回不同的结果,然后struts.xml再通过返回的result 回复给用户不同的几面

Action.java

我用的这个版本的struts在写action的时候没有actionForm, 而是在action将这两个东西归到一个action里边,而这个action继承ActionSupport这个基类,这个基类里边定义了几个返回值,有SUCCESS ,INPUT ERROR NONE LOGIN 还有一个execute()方法 

struts.xml

新版的struts.xml配置文件当中简化了很多,他把每一个配置文件看成是一个包package,然后struts.xml这个总包可以加载多个通过include file=XXX.xml文件,从而避免了这个主配置文件的庞大复杂,而且这个配置文件也不再像以前那样配置好多参数,这个简单 
<package name="" extends="">
<action  name="" class="" method="">
<result name=""></result>
</action>
<include file="">
......

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>
  	<filter-name>struts2</filter-name>
  	<filter-class>
  		org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  	</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>struts2</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping></web-app>


一般不用做修改只需将struts2.2.3.1中拷贝一个就可以,然后这个拦截器和以前也不一样了执行的是org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter类

开发时常用的一些JAR包

commons-fileupload-1.2.2.jar  //文件上传

commons-io-2.0.1.jar // IO处理

commons-logging-1.1.1.jar  //日志

freemarker-2.3.16.jar  

javassist-3.7.ga.jar  //解析

ognl-3.0.jar // ognl处理

struts2-core-2.2.3.1.jar  //核心

struts2-spring-plugin-2.2.3.1.jar  //spring下的插件

xwork-core-2.2.3.1.jar  //前身

什么是ORM orm
ORM框架是 对象/关系数据库映射(object/relational mapping(ORM)) 用来把对象模型表示的对象映射到基于SQL的关系模型数据库结构中去。ORM 即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了

 对象关系映射(ORM)提供了概念性的、易于理解的模型化数据的方法。ORM方法论应当基于三个核心原则: 
        简单:以最基本的形式建模数据。 
        传达性:数据库结构被任何人都能理解的语言文档化。 
        精确性:基于数据模型创建正确标准化了的结构。 


        基于三项原则,一方面,建模者通过收集来自那些熟悉应用程序但不熟练的数据建模者的人的信息开发企业实体模型,业务实体的设计者也可以在完全脱离数据结构构架的基础上应用这些业务实体并构筑企业的应用系统。另一方面我们可以将那些简单而又枯草地SQL语句完全忘却,在ORM的构架中,它们对于建模者应用来说完全是多余的。

ORM数据库有 ORACLE DB2 SQLSERVER MYDQL ACCESS
ORM框架有  hibernate toplink jpa
集群技术(自己的话说) 集群技术
一、什么是集群?

  集群(Cluster)是由两台或多台节点机(服务器)构成的一种松散耦合的计算节点集合,为用户提

供网络服务或应用程序(包括数据库、Web服务和文件服务等)的单一客户视图,同时提供接近容错机的故

障恢复能力。集群系统一般通过两台或多台节点服务器系统通过相应的硬件及软件互连,每个群集节点都

是运行其自己进程的独立服务器。这些进程可以彼此通信,对网络客户机来说就像是形成了一个单一系统,

协同起来向用户提供应用程序、系统资源和数据。除了作为单一系统提供服务,集群系统还具有恢复服务

器级故障的能力。集群系统还可通过在集群中继续增加服务器的方式,从内部增加服务器的处理能力,并

通过系统级的冗余提供固有的可靠性和可用性。

二、集群的分类:

1、高性能计算科学集群:  

  以解决复杂的科学计算问题为目的的IA集群系统。是并行计算的基础,它可以不使用专门的由十至

上万个独立处理器组成的并行超级计算机,而是采用通过高速连接来链接的一组1/2/4 CPU的IA服务器,

并且在公共消息传递层上进行通信以运行并行应用程序。这样的计算集群,其处理能力与真正超级并行

机相等,并且具有优良的性价比。   

2、负载均衡集群:  

  负载均衡集群为企业需求提供更实用的系统。该系统使各节点的负载流量可以在服务器集群中尽可

能平均合理地分摊处理。该负载需要均衡计算的应用程序处理端口负载或网络流量负载。这样的系统非

常适合于运行同一组应用程序的大量用户。每个节点都可以处理一部分负载,并且可以在节点之间动态

分配负载,以实现平衡。对于网络流量也如此。通常,网络服务器应用程序接受了大量入网流量,无法

迅速处理,这就需要将流量发送给在其它节点。负载均衡算法还可以根据每个节点不同的可用资源或网

络的特殊环境来进行优化。  

3、高可用性集群:  

  为保证集群整体服务的高可用,考虑计算硬件和软件的容错性。如果高可用性群集中的某个节点发

生了故障,那么将由另外的节点代替它。整个系统环境对于用户是一致的。  

  实际应用的集群系统中,这三种基本类型经常会发生混合与交杂。

 三、典型集群:

科学计算集群:

1、Beowulf
当谈到 Linux 集群时,许多人的第一反映是 Beowulf。那是最著名的 Linux  

科学软件集群系统。实际上,它是一组适用于在 Linux 内核上运行的公共软件包的通称。其中包括

流行的软件消息传递 API,如“消息传送接口”(MPI) 或“并行虚拟机”

(PVM),对 Linux 内核的修改,以允许结合几个以太网接口、高性能网络驱动器,对虚拟内存管理器

的更改,以及分布式进程间通信 (DIPC) 服务。公共全局进程标识空间允许使用 DIPC 机制从任何节

点访问任何进程。

2、MOSIX

Beowulf类似于给系统安装的一个支持集群的外挂软件,提供了应用级的集群能力。而MOSIX是彻底修

改Linux的内核,从系统级提供了集群能力,它对应用而言是完全透明的,原有的应用程序,可以不经改

动,就能正常运行在MOSIX系统之上。集群中的任何节点都可以自由地加入和移除,来接替其它节点的工

作,或是扩充系统。MOSIX 使用自适应进程负载均衡和内存引导算法使整体性能最大化。应用程序进

程可以在节点之间实现迁移,以利用最好的资源,这类似于对称多处理器系统可以在各个处理器之间切换

应用程序。由于MOSIX通过修改内核来实现集群功能,所以存在兼容性问题,部分系统级应用程序将无法

正常运行。

 

负载均衡/高可用性集群

3、LVS(Linux Virtual Server)

这是一个由国人主持的项目。

它是一个负载均衡/高可用性集群,主要针对大业务量的网络应用(如新闻服务、网上银行、电子商务等)。

LVS是建立在一个主控服务器(通常为双机)(director)及若干真实服务器(real-server)所组成

的集群之上。real-server负责实际提供服务,主控服务器根据指定的调度算法对real-server进

行控制。而集群的结构对于用户来说是透明的,客户端只与单个的IP(集群系统的虚拟IP)进行通信,

也就是说从客户端的视角来看,这里只存在单个服务器。

Real-server可以提供众多服务,如ftp, http, dns, telnet, nntp, smtp 等。主控服务器负责对Real-Server进

行控制。客户端在向LVS发出服务请求时,Director会通过特定的调度算法来指定由某个Real-Server

来应答请求,而客户端只与Load Balancer的IP(即虚拟IP,VIP)进行通信。



其他集群:

现在集群系统可谓五花八门,绝大部分的OS开发商,服务器开发商都提供了系统级的集群产品,最典型的

是各类双机系统,还有各类科研院校提供的集群系统。以及各类软件开发商提供的应用级别的集群系统,如

数据库集群,Application Server 集群,Web Server集群,邮件集群等等
查询oracle时间 oracle
select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') from dual;

或者先设置会话 alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
             select sysdate from dual;
oracle配置会话环境 oracle
oracle配置会话环境(set命令)  
2008-09-09 17:08:55|  分类: oracle数据库 |  标签: |字号大中小 订阅 


本文来自:http://www.popday.net/www/oracle/2007-10/118.html

一般在SQL>下进行SQLPLUS 操作,都需要进行必要的环境设置才能完成我们所需要的输出。所有环境的设置由 SET命令加相应的环境变量来完成。下面是常用的环境设置:

§2.5.1   ARRAYSIZE(取回的行数)
SET ARRAY[SIZE]{integer}
一次可以提取(Fetch)的行的数目,1->5000,当有较长字段时应设小些。
§2.5.2   AUTOCOMMIT(自动提交)
SET AUTO [COMMIT] { [ OFF | ON | IMM | n] }
用于在操作中是自动提交或是部分提交或是不自动提交。
1) 或IMM使得在完成每条SQL语句时将未提交的改变立刻提交给数据库系统。ON
2) 允许在用户发出COMMIT后,可以执行命令的数量(将n条SQL语句所做的改变进行提交)。N 
3) 停止自动提交,用户必须用COMMIT命令才能被提交。OFF 
§2.5.3   LINESIZE(行显示宽度)
可以设置 LINESIZE 环境变量来控制行的显示宽度,缺省是80个字符。
SET    Lin[esize]{80|integer}
Integer = 设置行宽度(字符个数),最大值999,如:
SQL>set linesize 160
§2.5.4   LONG(长类型显示字节数)
在缺省的SQL> 状态下,SQL>缓冲区用于显示LONG 的字节数只有80个字符。如果我们需要查询的列中含有 LONG类型的字段的话,就需要将LONG缓冲区设置大些。
SET LONG{80|integer}
Integer 是 显示或拷贝long值的最大宽度, n=1->32767(但必须小于Maxdata值)
SQL>show Maxdata (最大行宽)
SQL>set long 2000
§2.5.5   PAGESIZE(页行数)
在缺省的SQL> 状态下,SQL>缓冲区显示页的行数是24行,其中22行显示数据,2行显示标题和横线。我们将pagesize 设置大些以减少提示标题和横线。
SET pag[esize]   {24|integer}
SQL>SET pagesize 66
§2.5.6   PAUSE(暂停)
可以设置 PAUSE 为ON 或OFF来控制屏幕显示。当设置为ON 时,在select 语句发出后需要按Enter键才能显示一屏。
SET PAUSE [ ON | OFF ]
SQL> set pause on
提示:在发出select 语句并按Enter键后 还要再按Enter键才能显示结果.
§2.5.7   SPACE(列间空格)
可用 set space 来设置各列间的空格数,语法为:
SET   SPA[CE]    {1|n}
N为设置输出行列间的空格数,最大为10。
SQL>set space 2
建议:在一般情况下,不用设置space参数。
§2.5.8   Termout (启/停屏幕显示)
TERMOUT用于设置在屏幕上显示或不显示所输出的信息。
SET TERMOUT { ON | OFF }
set    termout off
set    termout on 
set   termout off   常用SPOOL XXX时,即关闭报表在屏幕上的显示(节省时间)
set   termout on    常用SPOOL   off之后,即恢复报表在屏幕上的显示
§2.5.9   ECHO (启/停命令显示)
可以用ECHO命令来显示或不显示所执行的SQL命令。语法如:
SET   ECHO{OFF|ON}
显示执行当中的各命令( 即用start 时)
set   echo    受到   set   termout 的影响
set pagesize 100
set echo on
select table_name from dict where rownum<20;
select * from cat where rownum<30;
set echo off 
--下面只显示结果不显示命令:
select table_name from dict where rownum<20;
select * from cat where rownum<30;
§2.5.10 TRANSACTION (启动事务)
一个很重要的事务环境设置是TRANSACTION。它包括两个部分的内容:
SET TRANSACTION { READ ONLY | USE ROLLBACK SEGMENT segment_name }
READ ONLY 是用于保证读的一致性。即其他用户的修改不影响当前查询结果。
USE ROLLBACK SEGMENT segment_name 是为当前所处理的事务指定专门的回滚段。这主要是在进行大量的Insert 或Delete 或Update时,需要一个大的回滚段以保证事务正常完成。详细见数据库管理员。
§2.5.11 SHOW ALL(列出所有参数)
可以用SHOW ALL 来显示当前的所有参数情况。它的用法很简单。比如:
SQL> show all
appinfo为ON并且已设置为"SQL*Plus"
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFF
autotrace OFF
blockterminator "." (hex 2e)
btitle OFF and 为下一条 SELECT 语句的前几个字符
cmdsep OFF
colsep " "
compatibility version NATIVE
concat "." (hex 2e)
copycommit 0
COPYTYPECHECK 为 ON
define "&" (hex 26)
describe DEPTH 1 LINENUM OFF INDENT ON
markup HTML OFF SPOOL OFF ENTMAP ON PREFORMAT OFF
echo OFF
editfile "afiedt.buf"
embedded OFF
escape OFF
flagger OFF
flush ON
heading ON
headsep "|" (hex 7c)
instance "local"
linesize 80
lno 14
loboffset 1
logsource ""
long 80
longchunksize 80
newpage 1
null ""
numformat ""
numwidth 10
pagesize 14
PAUSE 为OFF
pno 0
recsep WRAP
recsepchar " " (hex 20)
release 801070000
repfooter OFF and 为 NULL
repheader OFF and 为 NULL
serveroutput OFF
shiftinout INVISIBLE
showmode OFF
spool OFF
sqlblanklines OFF
sqlcase MIXED
sqlcode 0
sqlcontinue "> "
sqlnumber ON
sqlprefix "#" (hex 23)
sqlprompt "SQL> "
sqlterminator ";" (hex 3b)
suffix "sql"
tab ON
termout ON
time OFF
timing OFF
trimout ON
trimspool OFF
ttitle OFF and 为下一条 SELECT 语句的前几个字符
underline "-" (hex 2d)
USER 为"SYS"
verify ON
wrap : 行将为已换行
SQL>
你可以从上面的参数中看到其当前值,也可以修改某些参数的值。

启用“快速启动栏”提示“无法创建工具栏”的一个解决方案 windows
1. 右键单击任务栏 --> 工具栏 --> 快速启动,提示“无法创建工具栏”;
    
2. 右键单击任务栏 --> 属性 --> 钩选“显示快速启动” --> 确定,却无法保存设置;
 
解决方案: 
    
1.确认快速启动的目录是否存在:对于WinXP或Win2000而言,目录均是在C:\documents and settings\[username]\Application Data\Microsoft\Internet Explorer\Quick Launch。
    
2.如果Quick Launch这个目录不存在,可直接在Internet Explorer目录下新建一个名为Quick Launch文件夹,再把需要的快捷图标拖到Quick Launch文件夹内。
    
也可以单击开始选择运行,输入: ie4uinit.exe后回车(ie4uinit.exe该文件在系统system32里面),即可自动创建Quick Launch文件夹(桌面上的ie图标可能会丢失,此时右键桌面空白区域 --> 属性 --> 桌面 --> 自定义桌面 --> 勾选Internet Explorer->确定->确定,即可重新在桌面上显示ie图标)。
    
3. 右键单击任务栏 --> 工具栏 --> 快速启动或是右键单击任务栏 --> 属性 --> 勾选“显示快速启动”->确定,快速启动栏就重新出现了。
      
4.快速启动栏中“显示桌面”图标比较特殊,可用命令恢复,单击开始选择运行,输入: regsvr32 /N /I:U SHELL32后回车, “显示桌面”图标便重新回到快快速启动栏中了(参考知识编号:22309)   
   
注:可备份Quick Launch文件夹,丢失时候可以直接恢复。
struts2.2 Hibernate对数据库的增删改查 struts,hibernate,oracle
struts2.2.3.1 + oracle10g + hibernate3.3
通过这个小例子让我对框架有了新的认识
1.hibernate开发常用的jar包
hibernate3.jar
hibernate-annotations.jar,
hibernate-cglib-repack-2.1_3.har,
hibernate-commons-anntations.jar;
hibernate-entitymanager.jar,
log4j.jar,
2.hibernate对数据库的增删改查
hibernate通过session自己的内置的方法
1.hibernate运行机制
 读取并解析配置文件(hibenate.cfg.xml)此文件放于工程的src目录下,配置了连接数据库的一些信息:如:连接那个数据库url、user、password、table、等
2.读取并解析映射信息,创建SessionFactory
  映射文件一般是关于表的文件,对一个表添加了hibernate以后一般会产生三个文件一个是实体的java一个是hbm.xml一个是sessionFactory.java,实体java是关于表和的一个类,而
3.打开Sesssion 创建一个实例然后通过这个实例对象对数据库操作
4. 创建事务Transation 用来提交事物 tx.begainTransaction()
5.持久化操作 
6.提交事务tx.commit;
7.关闭Session  session.close();
8.关闭SesstionFactory
工作流程:(1)先是创建pojo类(javaBean)
         (2)再是创建映射文件(.hbm.xml)
         (3)创建配置文件(hibernate.hbm.xml) 
         (4)最后调用Hibernate API对数据库进行CRUD操作.

hibernate 缓存机制
缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。 
  缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。

  Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory不需要进行内置缓存与映射文件的同步。SessionFactory的外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个插件。外置缓存的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬盘。SessionFactory的外置缓存也被称为Hibernate的第二级缓存。

  Hibernate的这两级缓存都位于持久化层,存放的都是数据库数据的拷贝,那么它们之间的区别是什么呢?为了理解二者的区别,需要深入理解持久化层的缓存的两个特性:缓存的范围和缓存的并发访问策略。

持久化层的缓存的范围
  缓存的范围决定了缓存的生命周期以及可以被谁访问。缓存的范围分为三类。
  1 事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,当事务结束时,缓存也就结束生命周期。在此范围下,缓存的介质是内存。事务可以是数据库事务或者应用事务,每个事务都有独自的缓存,缓存内的数据通常采用相互关联的的对象形式。
  2 进程范围:缓存被进程内的所有事务共享。这些事务有可能是并发访问缓存,因此必须对缓存采取必要的事务隔离机制。缓存的生命周期依赖于进程的生命周期,进程结束时,缓存也就结束了生命周期。进程范围的缓存可能会存放大量的数据,所以存放的介质可以是内存或硬盘。缓存内的数据既可以是相互关联的对象形式也可以是对象的松散数据形式。松散的对象数据形式有点类似于对象的序列化数据,但是对象分解为松散的算法比对象序列化的算法要求更快。
  3 集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致性,缓存中的数据通常采用对象的松散数据形式。
  对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存,因为访问的速度不一定会比直接访问数据库数据的速度快多少。
  持久化层可以提供多种范围的缓存。如果在事务范围的缓存中没有查到相应的数据,还可以到进程范围或集群范围的缓存内查询,如果还是没有查到,那么只有到数据库中查询。事务范围的缓存是持久化层的第一级缓存,通常它是必需的;进程范围或集群范围的缓存是持久化层的第二级缓存,通常是可选的。
持久化层的缓存的并发访问策略
  当多个并发的事务同时访问持久化层的缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。
  在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。因此可以设定以下四种类型的并发访问策略,每一种策略对应一种事务隔离级别。
  事务型:仅仅在受管理环境中适用。它提供了Repeatable Read事务隔离级别。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读这类的并发问题。
  读写型:提供了Read Committed事务隔离级别。仅仅在非集群的环境中适用。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。
  非严格读写型:不保证缓存与数据库中数据的一致性。如果存在两个事务同时访问缓存中相同数据的可能,必须为该数据配置一个很短的数据过期时间,从而尽量避免脏读。对于极少被修改,并且允许偶尔脏读的数据,可以采用这种并发访问策略。
  只读型:对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。
  事务型并发访问策略是事务隔离级别最高,只读型的隔离级别最低。事务隔离级别越高,并发性能就越低。
什么样的数据适合存放到第二级缓存中?
1 很少被修改的数据
2 不是很重要的数据,允许出现偶尔并发的数据
3 不会被并发访问的数据
4 参考数据
不适合存放到第二级缓存的数据?
1 经常被修改的数据
2 财务数据,绝对不允许出现并发
3 与其他应用共享的数据。
Hibernate的二级缓存
  如前所述,Hibernate提供了两级缓存,第一级是Session的缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必需的,不允许而且事实上也无法比卸除。在第一级缓存中,持久化类的每个实例都具有唯一的OID。
  第二级缓存是一个可插拔的的缓存插件,它是由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此第二级缓存是进程范围或者集群范围的缓存。这个缓存中存放的对象的松散数据。第二级对象有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。缓存适配器用于把具体的缓存实现软件与Hibernate集成。第二级缓存是可选的,可以在每个类或每个集合的粒度上配置第二级缓存
Hibernate的二级缓存策略的一般过程如下:
1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。
2) 把获得的所有数据对象根据ID放入到第二级缓存中。
3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询数据库,把结果按照ID放入到缓存。
4) 删除、更新、增加数据的时候,同时更新缓存。
  Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query缓存。
Hibernate的Query缓存策略的过程如下:
1) Hibernate首先根据这些信息组成一个Query Key,Query Key包括条件查询的请求一般信息:SQL, SQL需要的参数,记录范围(起始位置rowStart,最大记录个数maxRows),等。
2) Hibernate根据这个Query Key到Query缓存中查找对应的结果列表。如果存在,那么返回这个结果列表;如果不存在,查询数据库,获取结果列表,把整个结果列表根据Query Key放入到Query缓存中。
3) Query Key中的SQL涉及到一些表名,如果这些表的任何数据发生修改、删除、增加等操作,这些相关的Query Key都要从缓存中清空。

Global site tag (gtag.js) - Google Analytics