??xml version="1.0" encoding="utf-8" standalone="yes"?>中文综合在线观看,91久久国产,91久久久久久久久久http://www.aygfsteel.com/liubijin/zh-cnMon, 16 Jun 2025 09:40:57 GMTMon, 16 Jun 2025 09:40:57 GMT60Oracle数据库安装及配置http://www.aygfsteel.com/liubijin/archive/2010/05/04/320051.html無所?/dc:creator>無所?/author>Tue, 04 May 2010 07:36:00 GMThttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320051.htmlhttp://www.aygfsteel.com/liubijin/comments/320051.htmlhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320051.html#Feedback1http://www.aygfsteel.com/liubijin/comments/commentRss/320051.htmlhttp://www.aygfsteel.com/liubijin/services/trackbacks/320051.html1、安?/h2>

Oracle 版本Q?span class="topstoryhead">Oracle Database 10g Release 2 (10.2.0.1)

下蝲地址Q?/p>

http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201winsoft.html

安装讄Q?/p>

1Q这里的全局数据库名即ؓ你创建的数据库名Q以后在讉K数据Q创?#8220;本地Net服务?#8221;时用刎ͼ

2Q数据库口o在登录和创徏“本地Net服务?#8221;{地方会用到?br />

 

2、创?#8220;本地Net服务?#8221;

1Q通过【程序?》【Oracle - OraDb10g_home1?》【配|和UL工具?》【Net Configuration Assistant】,q行“|络配置助手”工具Q?/p>


 

 

2Q选择“本地 Net 服务名配|?#8221;Q?/p>


 

3Q这里的“Net 服务?#8221;我们输入安装数据库时?#8220;全局数据库名”Q?/p>


 

4Q主机名我们输入本机的IP地址Q?/p>


 

5Q测试数据库q接Q用户名/密码为:System/数据库口令(安装时输入的“数据库口?#8221;Q:



 
默认的用户名/密码错误Q?


 

更改dQ输入正的用户?密码Q?/p>


 

试成功Q?/p>


 

3、PLSQL Developer q接试

输入正确的用户名/口oQ?/p>


 

成功登陆Q?/p>




4、创I间

打开sqlplus工具Q?br />
Sql代码       sqlplus /nolog  

q接数据库:
 Sql代码     conn /as sysdba

创徏表空_

 Sql代码   create tablespace camds datafile 'D:\oracle\product\10.2.0\oradata\camds\camds.dbf' size 200m autoextend on next 10m maxsize unlimited;  


5、创建新用户

q行“P/L SQL Developer”工具Q以DBAQ用户名QSystemQ的w䆾dQ?/p>

 

1Q新?#8220;UserQ用PQ?/strong>

2Q设|用户名、口令、默认表I间Q用上面新建的表空_和时表I间Q?/strong>

 

3Q设|角色权限:

 

 

4Q设|?#8221;pȝ权限“Q?/span>

 

 

 

5Q点d用后Q【应用】按钮变灎ͼ新用户创建成功:


 

6Q新用户d试Q?/span>

输入新用L“用户?口o”Q?/p>


新用?#8220;testcamds”成功登陆Q?/p>


 

6、导入导出数据库

先运行cmd命oQ进入命令行模式Q{C面的目录QD:\oracle\product\10.2.0\db_1\BIN【该目录下有exp.exe文g?/p>

1Q导?/span>

命o语法Q?br />
Sql代码   imp userid/pwd@sid file=path/file fromuser=testcamds touser=userid  


命o实例Q?br />
Sql代码   imp testcamds/123@camds file=c:\testcamds fromuser=testcamds touser=testcamds  

导入l果Q?/p>


 

2Q导出:

命o语法Q?br />
Sql代码  exp userid/pwd@sid file=path/file owner=userid  
 
命o实例Q?

导入l果Q?/p>




]]>
Mysql教程Q介lTIMESTAMP旉戳的使用 http://www.aygfsteel.com/liubijin/archive/2010/05/04/320043.html無所?/dc:creator>無所?/author>Tue, 04 May 2010 06:18:00 GMThttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320043.htmlhttp://www.aygfsteel.com/liubijin/comments/320043.htmlhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320043.html#Feedback0http://www.aygfsteel.com/liubijin/comments/commentRss/320043.htmlhttp://www.aygfsteel.com/liubijin/services/trackbacks/320043.html   如达C某列的默认gؓ当前更新日期与时间的功能,
  你可以用TIMESTAMP列类?

  下面pl说明TIMESTAMP列类?/strong>
  
  TIMESTAMP列类?
  TIMESTAMP值可以从1970的某时的开始一直到2037q__ֺZU,其g为数字显C?
  TIMESTAMP值显C尺寸的格式如下表所C:
  Q?
  +---------------+----------------+
  | 列类型    | 昄格式    |
  | TIMESTAMP(14) | YYYYMMDDHHMMSS | 
  | TIMESTAMP(12) | YYMMDDHHMMSS  |
  | TIMESTAMP(10) | YYMMDDHHMM    |
  | TIMESTAMP(8) | YYYYMMDD       |
  | TIMESTAMP(6) | YYMMDD         |
  | TIMESTAMP(4) | YYMM           |
  | TIMESTAMP(2) | YY                |
  +---------------+----------------+
  “完整”TIMESTAMP格式?4位,但TIMESTAMP列也可以用更短的昄寸创?
  最常见的显C尺寸是6??2、和14?
  你可以在创徏表时指定一个Q意的昄寸Q但是定义列长ؓ0或比14大均会被强制定义为列?4?
  列长在从1?3范围的奇数值尺寸均被强制ؓ下一个更大的偶数?
  
  列如Q?
  定义字段长度   强制字段长度
  TIMESTAMP(0) -> TIMESTAMP(14)
  TIMESTAMP(15)-> TIMESTAMP(14)
  TIMESTAMP(1) -> TIMESTAMP(2)
  TIMESTAMP(5) -> TIMESTAMP(6)
  
  所有的TIMESTAMP列都有同L存储大小Q?
  使用被指定的时期旉值的完整_ֺQ?4位)存储合法的g考虑昄寸?
  不合法的日期Q将会被强制?存储
  
  q有几个含意Q?/strong>

  1、虽然你时定义了列TIMESTAMP(8)Q但在你q行数据插入与更新时TIMESTAMP列实际上保存?4位的数据Q包括年月日时分U)Q只不过在你q行查询时MySQLq回l你的是8位的q月日数据。如果你使用ALTER TABLE拓宽一个狭H的TIMESTAMP列,以前?#8220;隐蔽”的信息将被显C?
  2、同P~小一个TIMESTAMP列不会导致信息失去,除了感觉上值在昄Ӟ较少的信息被昄出?
  3、尽TIMESTAMPD存储为完整精度,直接操作存储值的唯一函数是UNIX_TIMESTAMP()Q由于MySQLq回TIMESTAMP列的列值是q过格式化后的检索的|q意味着你可能不能用某些函数来操作TIMESTAMP列(例如HOUR()或SECOND()Q,除非 TIMESTAMP值的相关部分被包含在格式化的g。例如,一个TIMESTAMP列只有被定义为TIMESTAMP(10)以上Ӟ TIMESTAMP列的HH部分才会被显C,因此在更短的TIMESTAMPg使用HOUR()会生一个不可预知的l果?
  4、不合法TIMESTAMPD变换到适当cd?#8220;?#8221;?00000000000000)。(DATETIME,DATE亦然Q    
  
  你可以用下列语句来验证Q?
  

CREATE TABLE test ('id' INT (3) UNSIGNED AUTO_INCREMENT, 'date1' TIMESTAMP (8PRIMARY KEY('id')); 
  
INSERT INTO test SET id = 1
  
SELECT * FROM test; 

       +----+----------------+
  | id     | date1      |
  +----+----------------+
  | 1  | 20021114       |
  +----+----------------+

  ALTER TABLE test CHANGE 'date1' 'date1' TIMESTAMP(14); 
  
SELECT * FROM test; 

       +----+----------------+
  | id | date1     |
  +----+----------------+
  | 1 | 20021114093723 |
  +----+----------------+
  
  你可以用TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作?
  如果你有多个TIMESTAMP列,只有W一个自动更新?/p>

  自动更新W一个TIMESTAMP列在下列M条g下发生:
  
  1、列值没有明地在一个INSERT或LOAD DATA INFILE语句中指定?
  2、列值没有明地在一个UPDATE语句中指定且另外一些的列改变倹{(注意一个UPDATE讄一个列为它已经有的|q将不引起TIMESTAMP列被更新Q因为如果你讄一个列为它当前的|MySQLZ效率而忽略更攏V)
  3、你明确地设定TIMESTAMP列ؓNULL.
  4、除W一个以外的TIMESTAMP列也可以讄到当前的日期和时_只要列设ؓNULLQ或NOW()?
  
 

 CREATE TABLE test ( 
     
'id' INT (3) UNSIGNED AUTO_INCREMENT, 
     
'date1' TIMESTAMP (14), 
     
'date2' TIMESTAMP (14), 
     
PRIMARY KEY('id'
     ); 
   
  
INSERT INTO test (id, date1, date2) VALUES (1NULLNULL); 
  
INSERT INTO test SET id= 2

        +----+----------------+----------------+
  | id | date1     | date2       |
  +----+----------------+----------------+
  | 1 | 20021114093723 | 20021114093723 |
  | 2 | 20021114093724 | 00000000000000 |
  +----+----------------+----------------+

         ->W一条指令因设date1、date2为NULL,所以date1、date2值均为当前时?
   W二条指令因没有设date1、date2列|W一个TIMESTAMP列date1为更Cؓ当前旉Q?而二个TIMESTAMP列date2因日期不合法而变?#8220;00000000000000”
  
  

UPDATE test SET id= 3 WHERE id=1

     +----+----------------+----------------+
  | id | date1     | date2     |
  +----+----------------+----------------+
  | 3 | 20021114094009 | 20021114093723 |
  | 2 | 20021114093724 | 00000000000000 |
  +----+----------------+----------------+
  ->q条指o没有明确地设定date2的列|所以第一个TIMESTAMP列date1被更新为当前时?
  

  UPDATE test SET id= 1,date1=date1,date2=NOW() WHERE id=3

        +----+----------------+----------------+
  | id | date1     | date2     |
  +----+----------------+----------------+
  | 1 | 20021114094009 | 20021114094320 |
  | 2 | 20021114093724 | 00000000000000 |
  +----+----------------+----------------+
  ->q条指o因设定date1=date1Q所以在更新数据时date1列值ƈ不会发生改变
   而因讑֮date2=NOW()Q所以在更新数据时date2列g被更Cؓ当前旉
   此指令等效ؓ update test SET id= 1,date1=date1,date2=NULL WHERE id=3;
   
  因MySQLq回?TIMESTAMP 列ؓ数字昄形式Q?
  你可以用DATE_FROMAT()函数来格式化 TIMESTAMP ?
  

  SELECT id,DATE_FORMAT(date1,'%Y-%m-%d %H:%i:%s'As date1, 
      DATE_FORMAT(date2,
'%Y-%m-%d %H:%i:%s'As date2 FROM test; 

        +----+---------------------+---------------------+
  | id | date1        | date2     |
  +----+---------------------+---------------------+
  | 1 | 2002-11-14 09:40:09 | 2002-11-14 09:43:20 |
  | 2 | 2002-11-14 09:37:24 | 0000-00-00 00:00:00 |
  +----+---------------------+---------------------+
  
 

 SELECT id,DATE_FORMAT(date1,'%Y-%m-%d'As date1, 
      DATE_FORMAT(date2,
'%Y-%m-%d'As date2 FROM test; 

  +----+-------------+-------------+
  | id | date1    | date2    |
  +----+-------------+-------------+
  | 1 | 2002-11-14 | 2002-11-14 |
  | 2 | 2002-11-14 | 0000-00-00 |
  +----+-------------+-------------+
  
  在某U程度上Q你可以把一U日期类型的Dl一个不同的日期cd的对象?
  然而,而尤其注意的是:值有可能发生一些改变或信息的损失:
  
  1、如果你一个DATEDl一个DATETIME或TIMESTAMP对象Q结果值的旉部分被设|ؓ'00:00:00'Q因为DATEg不包含有旉信息。  
  2、如果你一个DATETIME或TIMESTAMPDl一个DATE对象Q结果值的旉部分被删除,因ؓDATEcd不存储时间信息?
  3、尽DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定,
  但所有类型不都有同样的D围?
  例如QTIMESTAMPg能比1970早,也不能比2037晚,
  q意味着Q一个日期例?1968-01-01'Q当作ؓ一个DATETIME或DATE值时它是合法的,
  但它不是一个正TIMESTAMP|q且如果这L一个对象赋值给TIMESTAMP列,它将被变换ؓ0?
  
  当指定日期值时Q当心某些缺P
  
  1、允怽为字W串指定值的宽松格式能被ƺ骗。例如,Q因?#8220;:”分隔W的使用Q?10:11:12'可能看v来像旉|但是如果在一个日期中使用Q上下文作为年份被解释?2010-11-12'。?10:45:15'被变换?0000-00-00'Q因?45'不是一个合法的月䆾?
    
  2、以2位数字指定的q值是模糊的,因ؓ世纪是未知的。MySQL使用下列规则解释2位年| ?0-69范围的年D变换?000-2069?在范?0-99的年D变换?970-1999?/p>

]]>
MySQL数据库中的Date,DateTime和TimeStampcdhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320041.html無所?/dc:creator>無所?/author>Tue, 04 May 2010 06:10:00 GMThttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320041.htmlhttp://www.aygfsteel.com/liubijin/comments/320041.htmlhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320041.html#Feedback0http://www.aygfsteel.com/liubijin/comments/commentRss/320041.htmlhttp://www.aygfsteel.com/liubijin/services/trackbacks/320041.html DATETIME, DATE和TIMESTAMPcd是相关的。本文描qC们的特征Q他们是如何cM的而又不同的?/p>

  DATETIMEcd用在你需要同时包含日期和旉信息的值时。MySQL索ƈ且以'YYYY-MM-DD HH:MM:SS'格式昄DATETIME|支持的范围是'1000-01-01 00:00:00'?9999-12-31 23:59:59'。(“支持”意味着管更早的值可能工作,但不能保证他们可以。)

  DATEcd用在你仅需要日期值时Q没有时间部分。MySQL索ƈ且以'YYYY-MM-DD'格式昄DATE|支持的范围是'1000-01-01'?9999-12-31'?/p>

  TIMESTAMP列类型提供一U类型,你可以用它自动地用当前的日期和旉标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有W一个自动更新?/p>

  自动更新W一个TIMESTAMP列在下列M条g下发生:

  列没有明地在一个INSERT或LOAD DATA INFILE语句中指定?/p>

  列没有明地在一个UPDATE语句中指定且一些另外的列改变倹{(注意一个UPDATE讄一个列为它已经有的|q将不引起TIMESTAMP列被更新Q因为如果你讄一个列为它当前的|MySQLZ效率而忽略更攏V)

  你明地讑֮TIMESTAMP列ؓNULL.

  除第一个以外的TIMESTAMP列也可以讄到当前的日期和时_只要列设ؓNULLQ或NOW()?/p>

  通过明确地设|希望的|你可以设|Q何TIMESTAMP列ؓ不同于当前日期和旉的|即对第一个TIMESTAMP列也是这栗例如,如果Q当你创Z个行Ӟ你想要一个TIMESTAMP被设|到当前的日期和旉Q但在以后无Z时行被更新时都不改变Q你可以使用q个属性:

  让MySQL在行被创建时讄列,q将初始化它为当前的日期和时间?/p>

  当你执行随后的对该行中其他列的更ҎQ明设定TIMESTAMP列ؓ它的当前倹{?/p>

  另一斚wQ你可能发现Q当行被创徏q且q离随后的更ҎQ很Ҏ用一个你用NOW()初始化的DATETIME列?/p>

  TIMESTAMP值可以从1970的某时的开始一直到2037q__ֺZU,其g为数字显C?/p>

  在MySQL索ƈ且显CTIMESTAMP值取决于昄寸的格式如下表?#8220;完整”TIMESTAMP格式?4位,但是TIMESTAMP列可以用更短的显C尺寸创造:

列类型     昄格式
TIMESTAMP(14) YYYYMMDDHHMMSS
TIMESTAMP(12) YYMMDDHHMMSS
TIMESTAMP(10) YYMMDDHHMM
TIMESTAMP(8) YYYYMMDD
TIMESTAMP(6) YYMMDD
TIMESTAMP(4) YYMM
TIMESTAMP(2) YY

  所有的TIMESTAMP列都有同L存储大小Q不考虑昄寸。最常见的显C尺寸是6??2、和14。你可以在表创徏旉指定一个Q意的昄寸Q但是?或比14大被强制?4。在??3范围的奇数值尺寸被强制Z一个更大的偶数?/p>

  使用一个常用的格式集的M一个,你可以指定DATETIME、DATE和TIMESTAMP|

  'YYYY-MM-DD HH:MM:SS'?YY-MM-DD HH:MM:SS'格式的一个字W串。允怸U?#8220;宽松”的语?-M标点可用作在日期部分和时间部分之间的分隔W。例如,'98-12-31 11:30:45'?98.12.31 11+30+45'?98/12/31 11*30*45'?98@12@31 11^30^45'是等L?/p>

  'YYYY-MM-DD'?YY-MM-DD'格式的一个字W串。允怸U?#8220;宽松”的语法。例如,'98-12-31', '98.12.31', '98/12/31'?98@12@31'是等L?/p>

  'YYYYMMDDHHMMSS'?YYMMDDHHMMSS'格式的没有Q何分隔符的一个字W串Q例如,'19970523091528'?970523091528'被解释ؓ'1997-05-23 09:15:28'Q但?971122459015'是不合法?它有毫无意义的分钟部?且变?0000-00-00 00:00:00'?/p>

  'YYYYMMDD'?YYMMDD'格式的没有Q何分隔符的一个字W串Q如果字W串认ؓ是一个日期。例如,'19970523'?970523'被解释作?1997-05-23'Q但?971332'是不合法? 它有无意义的月和天部?且变?0000-00-00'?/p>

  YYYYMMDDHHMMSS或YYMMDDHHMMSS格式的一个数字,如果数字认ؓ是一个日期。例如,19830905132800?30905132800被解释作?1983-09-05 13:28:00'?/p>

  YYYYMMDD或YYMMDD格式的一个数字,如果数字认ؓ是一个日期。例如,19830905?30905被解释作?1983-09-05'?/p>

  一个返回值可以在一个DATETIME, DATE或TIMESTAMP上下文环境中接受的函敎ͼ例如NOW()或CURRENT_DATE?/p>

  不合法DATETIME, DATE或TIMESTAMPD变换到适当cd?#8220;?#8221;?'0000-00-00 00:00:00', '0000-00-00'?0000000000000)?/p>

  对于包括的日期部分分隔符的指定ؓ字符串的|不必要ؓ于10的月或天的值指?位数字,'1979-6-9'?1979-06-09'是一L。同? 对于包括的时间部分分隔符的指定ؓ字符串的|不必为小?0的小时、月或秒指定2位数字,'1979-10-30 1:2:3'?1979-10-30 01:02:03'是一L?/p>

  指定为数字应该是6??2?4位长。如果数字是8?4位长Q它被假定以YYYYMMDD或YYYYMMDDHHMMSS格式q且q䆾由头4位数字给出。如果数字是6?2位长Q它被假定是以YYMMDD或YYMMDDHHMMSS格式且年份由?位数字给出。不是这些长度之一的数字通过填补前头的零到最接近的长度来解释?/p>

  指定为无分隔W的字符串用它们l定的长度来解释。如果字W串长度??4个字W,q䆾被假定头4个字W给出,否则q䆾被假定由?个字W给出。对于字W串中呈现的多个部分Q字W串从左到右边被解释Q以扑ևq、月、日、小时、分钟和U|q意味着Q你不应该用少?6 个字W的字符丌Ӏ例如,如果你指?9903'Q认为将代表1999q?月,你会发现MySQL把一?#8220;?#8221;日期插入C的表中,q是因ؓq䆾和月份?9?3Q但是日期部分丢??Q因此该g是一个合法的日期?/p>

  TIMESTAMP列用被指定的值的完整_ֺ的存储合法的|不考虑昄大小。这有几个含意:

  L指定q_月,和日Q即使你的列cd是TIMESTAMP(4)或TIMESTAMP(2)。否则,值将不是一个合法的日期q且0被存储?/p>

  如果你用ALTER TABLE拓宽一个狭H的TIMESTAMP列,以前?#8220;隐蔽”的信息将被显C?/p>

  同样Q羃一个TIMESTAMP列不会导致信息失去,除了感觉上值在昄Ӟ较少的信息被昄出?/p>

  管TIMESTAMPD存储为完整精度,直接操作存储值的唯一函数是UNIX_TIMESTAMP()Q其他函数操作在格式化了的检索的gQ这意味着你不能用函C如HOUR()或SECOND()Q除非TIMESTAMP值的相关部分被包含在格式化的g。例如,一个TIMESTAMP列的HH部分部被昄Q除非显C大至是10Q因此在更短的TIMESTAMPg试试使用HOUR()产生一个无意义的结果?/p>

  在某U程度上Q你可以把一U日期类型的Dl一个不同的日期cd的对象。然而,q可能值有一些改变或信息的损失:

  如果你将一个DATEDl一个DATETIME或TIMESTAMP对象Q结果值的旉部分被设|ؓ'00:00:00'Q因为DATEg包含旉信息?/p>

  如果你将一个DATETIME或TIMESTAMPDl一个DATE对象Q结果值的旉部分被删除,因ؓDATEcd不存储时间信息?/p>

  CQ尽DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定,但所有类型不都有同样的D围。例如,TIMESTAMPg能比1970早或?037|晚Q这意味着Q一个日期例?1968-01-01'Q当作ؓ一个DATETIME或DATE值合法时Q它不是一个正TIMESTAMP|q且 如果赋值给q样一个对象,它将被变换到0?/p>

  当指定日期值时Q当心某些缺P

  允许作ؓ字符串指定值的宽松格式能被ƺ骗。例如,g?10:11:12'可能看v来像旉|因ؓ“:”分隔W,但是如果在一个日期中使用Q上下文作为年份被解释?2010-11-12'。?10:45:15'被变换?0000-00-00'Q因?45'不是一个合法的月䆾?/p>

  ?位数字指定的q值是模糊的,因ؓ世纪是未知的。MySQL使用下列规则解释2位年|

  ?0-69范围的年D变换?000-2069?/p>

  ?0-99范围的年D变换?970-1999?br /> 本篇文章来源于:开发学?http://edu.codepub.com   原文链接Qhttp://edu.codepub.com/2009/1121/17945.php



]]>
js报错QObject doesn't support this property or methodhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320040.html無所?/dc:creator>無所?/author>Tue, 04 May 2010 06:09:00 GMThttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320040.htmlhttp://www.aygfsteel.com/liubijin/comments/320040.htmlhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320040.html#Feedback0http://www.aygfsteel.com/liubijin/comments/commentRss/320040.htmlhttp://www.aygfsteel.com/liubijin/services/trackbacks/320040.html   Object doesn't support this property or method
 问题原因Q?br />  1Qjs代码用了javascript关键?br />  2Q方法名和表单或者div form名冲H?br />  3.button中有nameQ?submit"
 4.上传囄时提C:Object doesn't support this property or method
原因Q服务器上安装的AspJpeg的版本低?.4版?br /> 解决ҎQ安?.4或以上版本的AspJpeglg?

]]>
hibernate中Criteria的用法示?/title><link>http://www.aygfsteel.com/liubijin/archive/2010/05/04/320039.html</link><dc:creator>無所?/dc:creator><author>無所?/author><pubDate>Tue, 04 May 2010 06:07:00 GMT</pubDate><guid>http://www.aygfsteel.com/liubijin/archive/2010/05/04/320039.html</guid><wfw:comment>http://www.aygfsteel.com/liubijin/comments/320039.html</wfw:comment><comments>http://www.aygfsteel.com/liubijin/archive/2010/05/04/320039.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/liubijin/comments/commentRss/320039.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/liubijin/services/trackbacks/320039.html</trackback:ping><description><![CDATA[<p>hibernate支持一Ujava~写习惯的查询apiQ用session建立net.sf.hibernate.CriteriaQ您可以在不用sql甚至hql的情况下q行查询?<br />      如果我们要查询User的所有信息我们可以如下用CriteriaQ?/p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria crit </span><span style="color: #000000">=</span><span style="color: #000000"> session.createCriteria(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />         List users </span><span style="color: #000000">=</span><span style="color: #000000"> crit.list();<br />         </span><span style="color: #0000ff">for</span><span style="color: #000000"> (ListIterator iterator </span><span style="color: #000000">=</span><span style="color: #000000"> users.listIterator(); iterator.hasNext(); ) {<br />             User user </span><span style="color: #000000">=</span><span style="color: #000000"> (User) iterator.next();<br />             System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">name: </span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> user.getName());<br />             System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">age: </span><span style="color: #000000">"</span><span style="color: #000000"> </span><span style="color: #000000">+</span><span style="color: #000000"> user.getAge());           <br />         }</span></div> <p><br /> 我们要ؓ查询限定条gQ可以通过net.sf.hibernate.expression.Expression讄Expression有很多的条g查询Ҏ下面举一些例子:<br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria crit </span><span style="color: #000000">=</span><span style="color: #000000"> session.createCriteria(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br />         crit.add(Expression.ge(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">new</span><span style="color: #000000"> Integer(</span><span style="color: #000000">25</span><span style="color: #000000">)));<br />         List users </span><span style="color: #000000">=</span><span style="color: #000000"> crit.list();</span></div> <p><br /> geQ)表示大于{于Q即age大于{于25的user?/p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">crit.add(Expression.gt(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">new</span><span style="color: #000000"> Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)));<br /> crit.add(Expression.between(</span><span style="color: #000000">"</span><span style="color: #000000">weight</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">new</span><span style="color: #000000"> Integer(</span><span style="color: #000000">60</span><span style="color: #000000">)Q?/span><span style="color: #0000ff">new</span><span style="color: #000000"> Integer(</span><span style="color: #000000">80</span><span style="color: #000000">)));<br /> List users </span><span style="color: #000000">=</span><span style="color: #000000"> crit.list();</span></div> <p><br /> between表示weight?0?0之间?br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000">crit.add(Expression.or(<br /> <img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />                   Expression.eq(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">, </span><span style="color: #0000ff">new</span><span style="color: #000000"> Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)),<br /> <img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />                   Expression.isNull(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">)<br /> <img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />               ));<br /> <img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />List users </span><span style="color: #000000">=</span><span style="color: #000000"> crit.list();</span></div> <p><br /> eq表示age?0的user?br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria crit </span><span style="color: #000000">=</span><span style="color: #000000"> session.createCriteria(User.</span><span style="color: #0000ff">class</span><span style="color: #000000">);<br /> crit.setFirstResult(</span><span style="color: #000000">51</span><span style="color: #000000">);<br /> crit.setMaxResult(</span><span style="color: #000000">50</span><span style="color: #000000">);<br /> List users </span><span style="color: #000000">=</span><span style="color: #000000"> crit.list();</span></div> <p> </p> <p>setMaxResultQ)讄q回的信息条敎ͼsetFirstResultQ)讄查询l果的初始位|,上面的程序段可以实现分页?/p> <p> </p> <p>在hibernate的Session里面使用createCriteria可以创徏一个Criteria实例帮助我们q行条g查询Q不用自׃hql语句Q很方便?br /> 用法很简单,首先传Class实例创徏CriteriaQClass实例对应你想要查询的那个实体:<br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">Criteria c </span><span style="color: #000000">=</span><span style="color: #000000"> session.createCriteria(Person.</span><span style="color: #0000ff">class</span><span style="color: #000000">);</span></div> <p><br /> 然后调用Criteria的addҎ加入条gQRestrictionsQ。常用的条g有:<br />  <br /> Ҏ说明Q?Restrictions.eq {于 <br />                      Restrictions.allEq 使用MapQ用key/valueq行多个{于的对?br />                      Restrictions.gt 大于 > <br />                      Restrictions.ge 大于{于 >= <br />                      Restrictions.lt 于 <<br />                     Restrictions.le 于{于 <= <br />                     Restrictions.between 对应SQL的BETWEEN子句 <br />                     Restrictions.like 对应SQL的LIKE子句 <br />                     Restrictions.in 对应SQL的in子句<br />                     Restrictions.and   and关系<br />                      Restrictions.or   or关系 <br />                    Restrictions.sqlRestriction    SQL限定查詢  <br /> <br /> <br /> 例如Q我惌回Person实体里面q龄(age)大于20的记录,那么׃ؓCriteria加入Restrictions.gt条gQ?br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">List list </span><span style="color: #000000">=</span><span style="color: #000000"> c.add(Restrictions.gt(“age”,</span><span style="color: #0000ff">new</span><span style="color: #000000"> Integer(</span><span style="color: #000000">20</span><span style="color: #000000">))).list();</span></div> <p><br />  <br /> Restrictions.and和Restrictions.or很有用,表示and查询q是or查询Q例如我要查询Person实体里面q龄(age)大于20Q或者性别 (sex)为man<br /> 的记录,那么׃ؓCriteria加入:<br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">List list </span><span style="color: #000000">=</span><span style="color: #000000"> c.add(Restrictions.or(<br /> Restrictions.gt(“age”,</span><span style="color: #0000ff">new</span><span style="color: #000000"> Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)),<br /> Restrictions.eq(“sex”,”man”)<br /> )).list();<br />  </span></div> <p><br /> 如果需要关联查询的话,可以使用Criteria的createCriteriaҎ创徏一个CriteriaQ例如部?Department)和h?Person)是一对多的关p,我要查询Person实体里面q龄(age)大于20Q性别 (sex)为manQ?br /> 备注包含应届生,<br /> 且所在部?department)是开发部的记?<br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000">List list </span><span style="color: #000000">=</span><span style="color: #000000"> c.add(Restrictions.gt(“age”,  </span><span style="color: #0000ff">new</span><span style="color: #000000"> Integer(</span><span style="color: #000000">20</span><span style="color: #000000">)))<br /> .add(Restrictions.eq(“sex”,”man”))<br /> .add(Restrictions.like(“Memo”,”</span><span style="color: #000000">%</span><span style="color: #000000">应届?/span><span style="color: #000000">%</span><span style="color: #000000">”))<br /> .createCriteria(“department”)<br /> .add(Restrictions.eq(“departmentname”,”开发部”))<br /> .list();</span></div> <p><br />  <br /> 其他条g的用法也很简单,׃列D了?br />  <br /> 另外QHibernate3Z一个org.hibernate.criterion.DetachedCriteriaQ即ȝCriteriaQ它允许你可以先创徏DetachedCriteriaQ然后传到Session里面才真正返回一个CriteriaQ用法如下:<br /> </p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #000000"> <br /> DetachedCriteria detchedCriteria </span><span style="color: #000000">=</span><span style="color: #000000"> DetachedCriteria.forClass(Person.</span><span style="color: #0000ff">class</span><span style="color: #000000">); </span><span style="color: #008000">//</span><span style="color: #008000"> 先徏立DetchedCriteria物g</span><span style="color: #008000"><br /> </span><span style="color: #000000">detchedCriteria.add(Restrictions.ge(</span><span style="color: #000000">"</span><span style="color: #000000">age</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #0000ff">new</span><span style="color: #000000"> Integer(</span><span style="color: #000000">25</span><span style="color: #000000">)));    </span><span style="color: #008000">//</span><span style="color: #008000"> 加入查询条g</span><span style="color: #008000"><br /> </span><span style="color: #000000">Session session </span><span style="color: #000000">=</span><span style="color: #000000"> sessionFactory.openSession();<br /> Criteria criteria </span><span style="color: #000000">=</span><span style="color: #000000"> detchedCriteria.getExecutableCriteria(session);    </span><span style="color: #008000">//</span><span style="color: #008000"> l定Session並返回一个Criteria实例List list = criteria.list(); </span></div> <p><br />  <br />  <br /> 最后,需要注意,Criteriaq提供了setFirstResult和setMaxResultsҎq行分页查询?br />  <br /> </p> <img src ="http://www.aygfsteel.com/liubijin/aggbug/320039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/liubijin/" target="_blank">無所?/a> 2010-05-04 14:07 <a href="http://www.aygfsteel.com/liubijin/archive/2010/05/04/320039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate基本介绍+一个简单的E序http://www.aygfsteel.com/liubijin/archive/2010/05/04/320028.html無所?/dc:creator>無所?/author>Tue, 04 May 2010 04:26:00 GMThttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320028.htmlhttp://www.aygfsteel.com/liubijin/comments/320028.htmlhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320028.html#Feedback0http://www.aygfsteel.com/liubijin/comments/commentRss/320028.htmlhttp://www.aygfsteel.com/liubijin/services/trackbacks/320028.html一、基入门

从一个最基本的对象关pL像自动化E序Q了解Hibernatel成的基本元素,q进一步了解Hibernate的基语义、配|等概念?/p>

1QO/R映像入门W一个HibernateE序很简单,一个对象映像至一个数据表

1Q?配置Hibernate
Hibernate是ORM的解x案,其底层对数据库的操作依赖于JDBCQ所以您必须先取得JDBC驱动E序Q在q边所使用的是MySQLQ所以您必须至MySQL®Connector/J取得MySQL的JDBC驱动E序?/p>

接下来至Hibernate官方|站取得hibernate 3.0?/p>

解开zip档案后,当中的hibernate3.jar是必要的Q而在lib目录中还包括了许多jar档案Q您可以在Hibernate 3.0官方的参考手册上扑ֈq些jar的相兌明,其中必要的是antlr、dom4j、CGLIB、asm、Commons Collections、Commons Logging?EHCacheQHibernate底层q需要Java Transaction APIQ所以您q需要jta.jarQ到q边为止Qd需要以下的jar档案Q?/p>

Hibernate可以q行于单Z上,也可以运行于Web应用E序之中Q如果是q行于单机,则将所有用到的jar档案Q包括JDBC驱动E序Q设定至CLASSPATH中,如果是运行于Web应用E序中,则将jar档案|放于WEB-INF/lib中?/p>

如果您还需要额外的LibraryQ再依需求加入,例如JUnit、Proxool{等Q接下来可以etc目录下的log4j.properties复制至Hibernate目的Classpath下,q修改一下当中的log4j.logger.org.hibernate为errorQ也是只在错误发生时显C必要的讯息?/p>

接着讄基本的Hibernate配置文gQ可以用XML或Properties档案Q这边先使用XMLQ档名预设ؓhibernate.cfg.xmlQ?/p>

hibernate.cfg.xml

 

            

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
" <hibernate-configuration>
<session-factory>
<!-- 昄实际操作数据库时的SQL -->
<property name="show_sql">true</property>
<!-- SQL 方言Q这边设定的是MySQL -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- JDBC 驱动E序 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- JDBC URL -->
<property name="connection.url">jdbc:mysql://localhost/demo</property>
<!-- 数据库用?-->
<property name="connection.username">caterpillar</property>
<!-- 数据库密?-->
<property name="connection.password">123456</property>
<!-- 以下讄对象与数据库表格映像文g -->
</session-factory>
</hibernate-configuration>

 

配置文g中已l加上批注ؓ每一个项目作了说明,其中对象与数据库表格映像文gq有待加入?/p>

1Q?W一个Hibernate
q边以一个简单的单机E序来示范Hibernate的配|与功能Q首先作数据库的准备工作Q在MySQL中新增一个demo数据库,q徏立user表格Q?/p>

CreateUser2MySQL.sql

 

            

CREATE TABLE user (
id INT(11) NOT NULL auto_increment PRIMARY KEY,
name VARCHAR(100) NOT NULL default '',
age INT
);

 

对于q个表格Q您有一个Usercd与之对应Q表g的每一个字D将对应至User实例上的Field成员?/p>

User.java

 

            

package onlyfun.caterpillar;
public class User {
private Integer id;
private String name;
private Integer age;
// 必须要有一个预讄建构Ҏ
// 以得Hibernate 可以使用Constructor.newInstance()建立对象
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}

 

其中id是个Ҏ的属性,Hibernate会用它来作Z键识别,您可以定义主键生的方式Q这是在XML映像文g中完成,Z告诉Hibernate您所定义的User实例如何映像x据库表格Q您撰写一个XML映射文g档名是User.hbm.xmlQ如下所C:

User.hbm.xml

 

            

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
" <hibernate-mapping>
<class name="onlyfun.caterpillar.User" table="user">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="name" column="name" type="java.lang.String" />
<property name="age" column="age" type="java.lang.Integer" />
</class>
</hibernate-mapping>

 

<class>h的name属性ؓ所映像的对象,而table为所映像的表|<id>中column属性指定了表格字段Q而type属性指定了User实例的中的id之型态,q边type中所讑֮的是直接指定Java中的对象型态,Hibernate也定义有自己的映像型态,作ؓJava对象与SQL型态的标准对应型态(因ؓ语言所提供的类型ƈ不一定与数据库的cd对应Q,q之后会再说明?/p>

#p#

<id>中主键的产生方式在这边设定ؓ"native"Q表CZ键的生成方式由HibernateҎ数据库Dialect的定义来军_Q之后还会介l其它主键的生成方式?/p>

同样的,<property>标签中的column与type都各自指明了表格中字D与对象中属性的对应?/p>

接着必须在Hibernate配置文ghibernate.cfg.xml中指明映像文件的位置Q如下加入映像文件位|:

hibernate.cfg.xml

 

            

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
" <hibernate-configuration>
<session-factor>
....
<!-- 对象与数据库表格映像文g -->
<mapping resource="onlyfun/caterpillar/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

 

接下来撰写一个测试的E序Q这个程序直接以Java E序设计人员熟悉的语法方式来操作对象Q而实际上也直接完成对数据库的操作Q程序将会将一W数据存入表g中:

FirstHibernate.java

 

            

package onlyfun.caterpillar;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class FirstHibernate {
public static void main(String[] args) {
// Configuration 负责理 Hibernate 配置讯息
Configuration config = new Configuration().configure();
// Ҏ config 建立 SessionFactory
// SessionFactory 用于徏?Session
SessionFactory sessionFactory = config.buildSessionFactory();
//持久化的物?br /> User user = new User();
user.setName("caterpillar");
user.setAge(new Integer(30));
//开启SessionQ相当于开启JDBC 的Connection
Session session = sessionFactory.openSession();
//Transaction 表示一l对DB 的交?br /> Transaction tx = session.beginTransaction();
//对象映像至数据库表g储存
session.save(user);
tx.commit();
session.close();
sessionFactory.close();
System.out.println("新增资料OK!请先用MySQL 观看l果Q?);
}
}

 

如您所看到的,E序中只需要直接操作User 对象Qƈq行Session 与Transaction 的相x作,Hibernate ׃自动完成Ҏ据库的操作,您看不到M一行JDBC 或SQL 的陈qͼ撰写好以上的各个档案之后Q各档案的放|位|如下:

接着可以开始运行程序,l果如下Q?/p>

FirstHibernate执行l果

 

            

Hibernate: insert into user (name, age) values (?, ?)

 

新增资料OK!请先用MySQL 观看l果Q?/p>

执行l果中显CZHibernate 所实际使用的SQLQ由于这个程序还没有查询功能Q所以要
q入MySQL 中看看新增的数据Q如下:

MySQL 中查询结?/strong>

 

            

mysql> select * from user;
+----+-------------+------+
| id | name | age |
+----+-------------+------+
| 1 | caterpillar | 30 |
+----+-------------+------+
1 row in set (0.03 sec)

 

Comments

W四D代码的标题应该是hibernate.cfg.xml

1Q? W二?Hibernate
?W一?Hibernate 中介l如何用Hibernate 在不使用SQL 的情况下Q以Java 中操作对象的习惯来插入数据至数据库中Q当然储存数据之后,更重要的是如何将资料dQHibernate 中也可以让您不写一句SQLQ而以Java 中操作对象的习惯来查询数据?/p>

直接来看个范例:

SecondHibernate.java

 

            

package onlyfun.caterpillar;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Expression;
import java.util.Iterator;
import java.util.List;
public class SecondHibernate {
public static void main(String[] args) {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(User.class);
// 查询user 所有字D?br /> List users = criteria.list();
Iterator iterator = users.iterator();
System.out.println("id \t name/age");
while (iterator.hasNext()) {
User user = (User) iterator.next();
System.out.println(user.getId() + " \t " + user.getName() + "/" +
user.getAge());
}
// 查询user 中符合条件的字段
criteria.add(Expression.eq("name", "caterpillar"));
users = criteria.list();
iterator = users.iterator();
System.out.println("id \t name/age");
while (iterator.hasNext()) {
User user = (User) iterator.next();
System.out.println(user.getId() + " \t " + user.getName() + "/" +
user.getAge());
}
session.close();
sessionFactory.close();
}
}

 

#p#

Criteria 对SQL q行装Q对于不甚了解SQL 的开发h员来_使用Criteria 也可以轻易的q行各种数据的检索,您也可以使用 Expression 讑֮查询条gQƈ之加入Criteria中对查询l果作限ӞExpression.eq()表示讑֮W合条g的查询,例如Expression.eq("name", "caterpillar")表示讑֮查询条g?name"字段中ؓ"caterpillar"的数据?/p>

先来看一下执行结果:
SecondHibernate 执行l果

 

            

Hibernate: select this_.id as id0_, this_.name as name0_0_,

this_.age as age0_0_ from user

this_id
id name/age
1 caterpillar/30
3 bush/5
2 momor/26
Hibernate: select this_.id as id0_, this_.name as name0_0_,

this_.age as age0_0_ from user

this_
where this_.name=?
id name/age
1 caterpillar/30

 

Criteria 是对象导向式的查询方式,让不了解SQL 的开发h员也可以Lq行各项查询Q但Criteria 的API 目前q不是很完善Q而Hibernate 鼓励的查询方式,是透过HQLQHibernate Query LanguageQ来q行Q直接来看个实例Q?/p>

SecondHibernateUsingHQ.java

 

            

package onlyfun.caterpillar;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import java.util.Iterator;
import java.util.List;
public class SecondHibernateUsingHQ {
public static void main(String[] args) {
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.openSession();
// 使用HQL 建立查询
Query query = session.createQuery("from User");
List users = query.list();
Iterator iterator = users.iterator();
System.out.println("id \t name/age");
while (iterator.hasNext()) {
User user = (User) iterator.next();
System.out.println(user.getId() + " \t " + user.getName() + "/" +
user.getAge());
}
System.out.println();
// 使用HQL 建立查询
query = session.createQuery("from User user where user.name like ?");
// 讑֮查询参数
query.setParameter(0, "caterpillar");
users = query.list();
iterator = users.iterator();
System.out.println("id \t name/age");
while (iterator.hasNext()) {
User user = (User) iterator.next();
System.out.println(user.getId() + " \t " + user.getName() + "/" +
user.getAge());
}
session.close();
sessionFactory.close();
}
}

 

执行l果Q?/p>

SecondHibernateUsingHQ 执行l果

 

            

Hibernate: select this_.id as id0_, this_.name as name0_0_,

this_.age as age0_0_ from user

this_id
id name/age
1 caterpillar/30
3 bush/5
2 momor/26
Hibernate: select this_.id as id0_, this_.name as name0_0_,

this_.age as age0_0_ from user

this_
where this_.name=?
id name/age
1 caterpillar/30

 

透过Query 接口Q您可以先设定查询参敎ͼ之后透过setXXX(){方法,指定的参数值填入,而不用每ơ都撰写完整的HQLQQuery 的setParameter()ҎW一个参数是指定?出现的位|,?0 开始,W二个参数则是设定查询条件?

#p#

二、简单的Hibernate E序

q边以一个简单的单机E序来示范Hibernate的配|与功能Q在q个例子中的一些操作,实际上会使用一些自动化工具来完成,而不一定亲自手动操作设定,q边完全手动的原因,在于让您可以知道Hibernate实际上会作那些动作,在进行范例之前,请先定前一个主题中的相关jar档案都已l设定在CLASSPATH中?br />  
我们先作数据库的准备工作Q在MySQL中新增一个HibernateTest数据库,q徏立USER表格Q?

 

            

CREATE TABLE USER (
    user_id CHAR(32) NOT NULL PRIMARY KEY,
    name VARCHAR(16) NOT NULL,
    sex CHAR(1),
    age INT
);

 

我们先撰写一个纯Java对象Q它U綷表示一个数据集合,待会我们会将之映像至数据库的表格上,E序如下Q?

User.java

 

            

package onlyfun.caterpillar;
 public class User {
    private String id;
    private String name;
    private char sex;
    private int age;
    public int getAge() {
        return age;
    }
    public String getId() {
        return id;
    }
    public String getName() {
        return name;
    }
    public char getSex() {
        return sex;
    }
    public void setAge(int i) {
        age = i;
    }
    public void setId(String string) {
        id = string;
    }
    public void setName(String string) {
        name = string;
    }
    public void setSex(char c) {
        sex = c;
    }
}

 

其中id是个Ҏ的属性,Hibernate会用它来作Z键识别,我们可以定义主键产生的方式,q是在XML映像文g中完成,Z告诉Hibernate对象如何映像x据库表格Q我们撰写一个XML映射文g档名是User.hbm.xmlQ如下所C:

User.hbm.xml

 

            

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    " <hibernate-mapping>
    <class name="onlyfun.caterpillar.User" table="USER">
        <id name="id" type="string" unsaved-value="null">
            <column name="user_id" sql-type="char(32)" />
            <generator class="uuid.hex"/>
        </id>
        <property name="name" type="string" not-null="true">
            <column name="name" length="16" not-null="true"/>
        </property>
        <property name="sex" type="char"/>
        <property name="age" type="int"/>
    </class>
</hibernate-mapping>

 

q个XML文g定义了对象属性映像至数据库表格的关系Q您可以很简单的了解Ҏ的方法,像是User对象对应至USER表格Q其中我们?uuid.hex来定义主键的产生法QUUID法使用IP地址、JVM的启动时间、系l时间和一个计数值来产生主键。除了用uuid.hex之外Q我们还可以使用其它的方式来产生主键Q像是increment{,q可以在Hibernate参考手册中扑ֈ相关资料?/p>

<property>h用于定义Java对象的属性,而当中的<column/>h用于定义与数据库的对应,如果您是手工建立Java对象与数据库表格Q则在最单的情况下,可以只定?lt;property name="sex"/>q样的方式,而由Hibernate自动判断Java对象属性与数据库表格名U对应关p,?lt; property/>?lt;column/>标签上的额外讑֮Q像是not null、sql-type{)Q则可以用于自动产生Java对象与数据库表格的工具上?/p>

接下来我们定义Hibernate配置文gQ主要是q行SessionFactory配置QHibernate可以使用XML或属性文件来q行配置Q我 们这边先介绍如何使用XML配置Q这也是Hibernate所的配|方式,我们的文件名是hibernate.cfg.xmlQ如下:

hibernate.cfg.xml

 

            

<?xml version='1.0' encoding='big5'?>
<!DOCTYPE hibernate-configuration
    PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
    " <hibernate-configuration>
    <session-factory>
        <!-- 昄实际操作数据库时的SQL -->
        <property name="show_sql">true</property>
        <!-- SQL方言Q这边设定的是MySQL -->
        <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
        <!-- JDBC驱动E序 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <!-- JDBC URL -->
        <property name="connection.url">jdbc:mysql://localhost/HibernateTest</property>
        <!-- 数据库用?-->
        <property name="connection.username">caterpillar</property>
        <!-- 数据库密?-->
        <property name="connection.password">123456</property>
        <!-- 对象与数据库表格映像文g -->
        <mapping resource="User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

 

接下来我们撰写一个测试的E序Q这个程序将直接以JavaE序设计人员熟悉的语法方式来操作对象Q而实际上也直接完成对数据库的操作Q程序将会将一W数据存入表g中:

HibernateTest.java

 

            

import onlyfun.caterpillar.*;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
public class HibernateTest {
    public static void main(String[] args) throws HibernateException {
        SessionFactory sessionFactory =
          new Configuration().configure().buildSessionFactory();
        User user = new User();
        user.setName("caterpillar");
        user.setSex('M');
        user.setAge(28);
        Session session = sessionFactory.openSession();
        Transaction tx= session.beginTransaction();
        session.save(user);
        tx.commit();
        session.close();
        sessionFactory.close();         
        System.out.println("新增资料OK!请先用MySQL观看l果Q?);
    }
}

 

#p#

Configuration代表了Java对象x据库的映像设定,q个讑֮是从我们上面的XML而来Q接下来我们从Configuration取得SessionFactory对象Qƈ由它来开启一个SessionQ它代表对象与表格的一ơ会话操作,?Transaction则表CZl会话操作,我们只需要直接操作User对象Qƈq行Session与Transaction的相x作, Hibernate׃自动完成Ҏ据库的操作。这边对E序先只作简单的介绍Q之后再详加说明?/p>

所有的.java档案~译Qƈ两个XML档案攄在与HibernateTest相同的目录中Q也是档案位置如下Q?

 

            

/
|--HibernateTest.class
|--User.hbm.xml
|--hibernate.cfg.xml
    /onlyfun
        /caterpillar
        |--User.class

 

OK!现在您可以执行HibernateTestQ程序将会出C下的讯息Q?

 

            

log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: insert into USER (name, sex, age, user_id) values (?, ?, ?, ?)

 

新增资料OK!请先用MySQL观看l果Q?/p>

q边只先q行数据的存入,要观看数据存入的l果的话Q请q入MySQL观看Q以下是数据库存入的l果Q?

 

            

mysql> SELECT * FROM USER;
+----------------------------------+-------------+------+------+
| user_id                          | name        | sex  | age  |
+----------------------------------+-------------+------+------+
| 297e3dbdfea6023d00fea60241000001 | caterpillar | M    |   28 |
+----------------------------------+-------------+------+------+
1 rows in set (0.00 sec)

 



]]>
DWR各种 调用Ҏ http://www.aygfsteel.com/liubijin/archive/2010/05/04/320026.html無所?/dc:creator>無所?/author>Tue, 04 May 2010 04:12:00 GMThttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320026.htmlhttp://www.aygfsteel.com/liubijin/comments/320026.htmlhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320026.html#Feedback0http://www.aygfsteel.com/liubijin/comments/commentRss/320026.htmlhttp://www.aygfsteel.com/liubijin/services/trackbacks/320026.html1、调用没有返回值和参数的JAVAҎ

1.1、dwr.xml的配|?/font>
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="/com.dwr.TestClass" />
<include method="testMethod1"/>
</create>
</allow>
</dwr>
<allow>标签中包括可以暴露给javascript讉K的东ѝ?br /> <create>标签中指定javascript中可以访问的javac,q定义DWR应当如何获得要进行远E的cȝ实例。creator= "new"属性指定javacd例的生成方式Qnew意味着DWR应当调用cȝ默认构造函数来获得实例Q其他的q有spring方式Q通过与IOC容器 Springq行集成来获得实例等{。javascript=" testClass "属性指定javascript代码讉K对象时用的名称?br /> <param>标签指定要公开ljavascript的javacd?br /> <include>标签指定要公开ljavascript的方法。不指定的话公开所有方法?br /> <exclude>标签指定要防止被讉K的方法?br /> 1.2、javascript中调?/font>
首先Q引入javascript脚本
<script src='dwr/interface/ testClass.js'></script>
<script src="/dwr/engine.js"></script>
<script src="/dwr/util.js"></script>
其中TestClass.js是dwrҎ配置文g自动生成的,engine.js和util.js是dwr自带的脚本文件?br /> 其次Q编写调用javaҎ的javascript函数
Function callTestMethod1(){
       testClass.testMethod1();
}
2、调用有单返回值的javaҎ

2.1、dwr.xml的配|?/font>
配置?.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="/com.dwr.TestClass" />
<include method="testMethod2"/>
</create>
</allow>
</dwr>
2.2、javascript中调?br /> 首先Q引入javascript脚本
其次Q编写调用javaҎ的javascript函数和接收返回值的回调函数
Function callTestMethod2(){
       testClass.testMethod2(callBackFortestMethod2);
}
Function callBackFortestMethod2(data){
      //其中date接收Ҏ的返回?br />       //可以在这里对q回D行处理和昄{等
alert("the return value is " + data);
}
其中callBackFortestMethod2是接收返回值的回调函数

3、调用有单参数的javaҎ

3.1、dwr.xml的配|?/font>
配置?.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="/com.dwr.TestClass" />
<include method="testMethod3"/>
</create>
</allow>
</dwr>
3.2、javascript中调?/font>
首先Q引入javascript脚本
其次Q编写调用javaҎ的javascript函数
Function callTestMethod3(){
                  //定义要传到javaҎ中的参数
       var data;
       //构造参?br />        data = “test String”;
       testClass.testMethod3(data);
}

4、调用返回JavaBean的javaҎ
4.1、dwr.xml的配|?/font>
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="/com.dwr.TestClass" />
<include method="testMethod4"/>
</create>
<convert converter="bean" match=""com.dwr.TestBean">
                   <param name="include" value="username,password" />
</convert>
</allow>
</dwr>
<creator>标签负责公开用于Webq程的类和类的方法,<convertor>标签则负责这些方法的参数和返回类型?convert元素的作用是告诉DWR在服务器端Java 对象表示和序列化的JavaScript之间如何转换数据cd。DWR自动地在Java和JavaScript表示之间调整单数据类型。这些类型包?Java原生cd和它们各自的装c表C,q有String、Date、数l和集合cd。DWR也能把JavaBean转换成JavaScript 表示Q但是出于安全性的原因Q要求显式的配置Q?lt;convertor>标签是完成此功能的。converter="bean"属性指定{换的方式采用JavaBean命名规范Qmatch=""com.dwr.TestBean"属性指定要转换的javabean名称Q?lt; param>标签指定要{换的JavaBean属性?br /> 4.2、javascript中调?/font>
首先Q引入javascript脚本
其次Q编写调用javaҎ的javascript函数和接收返回值的回调函数
Function callTestMethod4(){
       testClass.testMethod4(callBackFortestMethod4);
}
Function callBackFortestMethod4(data){
      //其中date接收Ҏ的返回?br /> //对于JavaBeanq回|有两U方式处?br />               //不知道属性名U时Q用如下方?br />             for(var property in data){
               alert("property:"+property);
               alert(property+":"+data[property]);
            }
//知道属性名U时Q用如下方?br />             alert(data.username);
            alert(data.password);
}
其中callBackFortestMethod4是接收返回值的回调函数

5、调用有JavaBean参数的javaҎ
5.1、dwr.xml的配|?br /> 配置?.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="/com.dwr.TestClass" />
<include method="testMethod5"/>
</create>
<convert converter="bean" match="com.dwr.TestBean">
                   <param name="include" value="username,password" />
</convert>
</allow>
</dwr>
5.2、javascript中调?/font>
首先Q引入javascript脚本
其次Q编写调用javaҎ的javascript函数
Function callTestMethod5(){
                  //定义要传到javaҎ中的参数
       var data;
       //构造参敎ͼdate实际上是一个object
       data = { username:"user", password:"password" }
       testClass.testMethod5(data);
}

6、调用返回List、Set或者Map的javaҎ
6.1、dwr.xml的配|?/font>
配置?.1
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="/com.dwr.TestClass" />
<include method="testMethod6"/>
</create>
<convert converter="bean" match="com.dwr.TestBean">
<param name="include" value="username,password" />
</convert>
</allow>
</dwr>
注意Q如果List、Set或者Map中的元素均ؓ单类型(包括其封装类Q或String、Date、数l和集合cdQ则不需?lt;convert>标签?br /> 6.2、javascript中调?以返回ListZQList的元素ؓTestBean)
首先Q引入javascript脚本
其次Q编写调用javaҎ的javascript函数和接收返回值的回调函数
Function callTestMethod6(){
       testClass.testMethod6(callBackFortestMethod6);
}
Function callBackFortestMethod6(data){
      //其中date接收Ҏ的返回?br /> //对于JavaBeanq回|有两U方式处?br />               //不知道属性名U时Q用如下方?br />             for(var i=0;i<data.length;i++){
for(var property in data){
                   alert("property:"+property);
                   alert(property+":"+data[property]);
                }
}
//知道属性名U时Q用如下方?br /> for(var i=0;i<data.length;i++){
                alert(data.username);
                alert(data.password);
}
}

7、调用有List、Set或者Map参数的javaҎ

7.1、dwr.xml的配|?/font>
<dwr>
<allow>
<create creator="new" javascript="testClass" >
<param name="class" value="/com.dwr.TestClass" />
<include method="testMethod7"/>
</create>
<convert converter="bean" match="com.dwr.TestBean">
<param name="include" value="username,password" />
</convert>
</allow>
<signatures>
<![CDATA[
import java.util.List;
import com.dwr.TestClass;
import com.dwr.TestBean;
TestClass.testMethod7(List<TestBean>);
]]>
</signatures>
</dwr>
<signatures>标签是用来声明javaҎ中List、Set或者Map参数所包含的确切类Q以便java代码作出判断?br /> 7.2、javascript中调?以返回ListZQList的元素ؓTestBean)
首先Q引入javascript脚本
其次Q编写调用javaҎ的javascript函数
Function callTestMethod7(){
//定义要传到javaҎ中的参数
       var data;
       //构造参敎ͼdate实际上是一个object数组Q即数组的每个元素均为object
data = [
                       {
                          username:"user1",
                          password:"password2"
                       },
                       {
                          username:"user2",
                          password:" password2"
                       }
                   ];
       testClass.testMethod7(data);
}
注意Q?br /> 1、对于第6U情况,如果javaҎ的返回gؓMapQ则在接收该q回值的javascript回调函数中如下处理:
function callBackFortestMethod(data){
            //其中date接收Ҏ的返回?br />             for(var property in data){
                   var bean = data[property];
                   alert(bean.username);
                   alert(bean.password);
               }
}
2、对于第7U情况,如果java的方法的参数为MapQ假讑օkey为StringQvalue为TestBeanQ,则在调用该方法的javascript函数中用如下Ҏ构造要传递的参数Q?br /> function callTestMethod (){
               //定义要传到javaҎ中的参数
               var data;
               //构造参敎ͼdate实际上是一个objectQ其属性名为Map的keyQ属性gؓMap的value
               data = {
                          "key1":{
                              username:"user1",
                             password:"password2"
                          },
                          "key2":{
                             username:"user2",
                             password:" password2"
                          }
                      };
               testClass.testMethod(data);
}
q且在dwr.xml中增加如下的配置D?br /> <signatures>
<![CDATA[
import java.util.List;
import com.dwr.TestClass;
import com.dwr.TestBean;
TestClass.testMethod7(Map<String,TestBean>);
]]>
</signatures>
3、由以上可以发现Q对于javaҎ的返回gؓList(Set)的情况,DWR其转化为Object数组Q传递个javascriptQ对于javaҎ的返回gؓMap 的情况,DWR其转化Z个ObjectQ其中Object的属性ؓ原Map的key|属性gؓ原Map相应的value倹{?/font>
4、如果javaҎ的参CؓList(Set)和Map的情况,javascript中也要根?U所_构造相应的javascript数据来传递到java中?
====================================================================

Scripting Introduction

DWRҎdwr.xml生成和Java代码cM的Javascript代码?/div>
相对而言Java同步调用Q创ZJava代码匚w的Ajaxq程调用接口的最大挑战来至与实现Ajax的异步调用特性?/div>
DWR通过引入回调函数来解册个问题,当结果被q回ӞDWR会调用这个函数?/div>
有两U推荐的方式来用DWR实现q程Ҏ调用。可以通过把回调函数放在参数列表里Q也可以把回调函数放到元数据对象里?/div>
当然也可以把回调函数做ؓW一个参敎ͼ但是不徏议用这U方法。因U方法在处理自动处理http对象?查看"Alternative Method")上会有问题。这个方法主要是为向下兼容而存在的?/div>

单的回调函数

假设你有一个这LJavaҎQ?/div>
public class Remote {    public String getData(int index) { ... }}
我们可以在Javascript中这样用:
<script type="text/javascript"    src="[WEBAPP]/dwr/interface/Remote.js"> </script><script type="text/javascript"    src="[WEBAPP]/dwr/engine.js"> </script>...function handleGetData(str) {  alert(str);}Remote.getData(42, handleGetData);
42是JavaҎgetData()的一个参数?/div>
此外你也可以使用q种减羃格式Q?/div>
Remote.getData(42, function(str) { alert(str); });

调用元数据对?Meta-Data)

另外一U语法时使用"调用元数据对?来指定回调函数和其他的选项。上面的例子可以写成q样Q?/div>
Remote.getData(42, {  callback:function(str) { alert(str); }});
q种Ҏ有很多优点:易于阅读Q更重要的指定额外的调用选项?/div>

时和错误处?/font>

在回调函数的元数据中你可以指定超时和错误的处理方式。例如:
Remote.getData(42, {  callback:function(str) { alert(str); },  timeout:5000,  errorHandler:function(message) { alert("Oops: " + message); }});

查找回调函数

有些情况下我们很隑֌分各U回调选项(CQJavascript是不支持函数重蝲?。例如:
Remote.method({ timeout:3 }, { errorHandler:somefunc });
q两个参C一是bean的参敎ͼ另一个是元数据对象,但是我们不能清楚的告诉DWR哪个是哪个。ؓ了可以跨览器,我们假定null == undefined?所以当前的情况Q规则是Q?/div>
  • 如果W一个或最后一个是一个函敎ͼ那么它就是回调函敎ͼ没有元数据对象,q且其他参数都是Java的方法参数?
  • 另外Q如果最后一个参数是一个对象,q个对象中有一个callback成员Qƈ且它是个函数Q那么这个对象就是元数据对象Q其他的都是JavaҎ参数?
  • 另外Q如果第一个参数是 null Q我们就假设没有回调函数Qƈ且其他的都是JavaҎ参数。尽如此,我们会检查最后一个参数是不是nullQ如果是发告?
  • 最后如果最后一个参数是nullQ那么就没有callback函数?
  • 另外Q发出错误信h个糟p的h格式?

创造一个与Java对象匚w的Javascript对象

假设你有q样的JavaҎQ?/div>
public class Remote {  public void setPerson(Person p) {    this.person = p;  }}
Person对象的结构是q样的:
public Person {  private String name;  private int age;  private Date[] appointments;  // getters and setters ...}
那么你可以在Javascript中这样写Q?/div>
var p = {  name:"Fred Bloggs",  age:42,  appointments:[ new Date(), new Date("1 Jan 2008") ]};Remote.setPerson(p);
在Javascript没有出现的字D,在Java中就不会被设|?/div>
因ؓsetter都是q回'void'Q我们就不需要用callback函数了。如果你惌一个返回void的服务端Ҏ的完整版Q你也可以加上callback函数。很明显DWR不会向它传递Q何参数?/div>


]]>Java String.Formathttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320025.html無所?/dc:creator>無所?/author>Tue, 04 May 2010 04:09:00 GMThttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320025.htmlhttp://www.aygfsteel.com/liubijin/comments/320025.htmlhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320025.html#Feedback0http://www.aygfsteel.com/liubijin/comments/commentRss/320025.htmlhttp://www.aygfsteel.com/liubijin/services/trackbacks/320025.htmlJDK1.5中,StringcL增了一个很有用的静态方法String.format():
format(Locale l, String format, Object... args) 使用指定的语a环境、格式字W串和参数返回一个格式化字符丌Ӏ?br /> format(String format, Object... args) 使用指定的格式字W串和参数返回一个格式化字符丌Ӏ?/span>

丑և个这个方法实用的例子(注释是输出结?Q?

CODE:

long now = System.currentTimeMillis();

String s = String.format("%tR", now);   // "15:12"

CODE:

// Current month/day/year

Date d = new Date(now);

s = String.format("%tD", d);                // "07/13/04"

CODE:

s = String.format("%,d", Integer.MAX_VALUE); // "2,147,483,647"

CODE:

s = String.format("%05d", 123);              // "00123"是不是很方便Q让人动心啊Q哈哈,q有更多的效?

其实format函数有些cMc语言中printf函数Q一些格式字W串?C cMQ但已进行了某些定制Q以适应 Java 语言Qƈ且利用了其中一些特性。此Ҏ提供了对布局寚w和排列的支持Q以及对数倹{字W串和日?旉数据的常规格式和特定于语a环境的输出的支持。支持诸?byte、BigDecimal ?Calendar {常?Java cd?br />
产生格式化输出的每个Ҏ都需要格式字W串 和参数列表。格式字W串是一?StringQ它可以包含固定文本以及一个或多个嵌入的格式说明符。请考虑以下CZQ?br />
Calendar c = ...;
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

格式字符串是 format Ҏ的第一个参数。它包含三个格式说明W?"%1$tm"?%1$te" ?"%1$tY"Q它们指出应该如何处理参C及在文本的什么地Ҏ入它们。格式字W串的其余部分是包括 "Dukes Birthday: " 和其他Q何空格或标点W号的固定文本?参数列表׃递给位于格式字符串之后的Ҏ的所有参数组成。在上述CZ中,参数列表的大ؓ 1Q由新对?Calendar l成?br />
1.常规cd、字W类型和数值类型的格式说明W的语法如下Q?/strong>%[argument_index$][flags][width][.precision]conversion

可选的 argument_index 是一个十q制整数Q用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用Q第二个参数?"2$" 引用Q依此类推?br /> 可选的 flags 是修改输出格式的字符集。有效标志的集合取决于{换类型?br /> 可?width 是一个非负十q制整数Q表明要向输Z写入的最字W数?br /> 可?precision 是一个非负十q制整数Q通常用来限制字符数。特定行为取决于转换cd?br /> 所需?conversion 是一个表明应该如何格式化参数的字W。给定参数的有效转换集合取决于参数的数据cd?br />
2.用来表示日期和时间类型的格式说明W的语法如下:
%[argument_index$][flags][width]conversion

可选的 argument_index?em>flags ?width 的定义同上?br /> 所需?conversion 是一个由两字W组成的序列。第一个字W是 't' ?'T'。第二个字符表明所使用的格式。这些字W类g但不完全{同于那些由 GNU date ?POSIX strftime(3c) 定义的字W?


3.与参C对应的格式说明符的语法如下:
%[flags][width]conversion

可?flags ?width 的定义同上?br /> 所需?conversion 是一个表明要在输Z所插内容的字符?

转换
转换可分Z下几c:
1. 常规 - 可应用于M参数cd
2. 字符 - 可应用于表示 Unicode 字符的基本类型:char、Character、byte、Byte、short ?Short。当 Character.isValidCodePoint(int) q回 true Ӟ可将此{换应用于 int ?Integer cd
3. 数?br />       1. 整数 - 可应用于 Java 的整数类型:byte、Byte、short、Short、int、Integer、long、Long ?BigInteger
      2. 点 - 可用?Java 的Q点类型:float、Float、double、Double ?BigDecimal
4. 日期/旉 - 可应用于 Java 的、能够对日期或时间进行编码的cdQlong、Long、Calendar ?Date?br /> 5. 癑ֈ?- 产生字面?'%' ('\u0025')
6. 行分隔符 - 产生特定于^台的行分隔符

下表ȝ了受支持的{换。由大写字符Q如 'B'?H'?S'?C'?X'?E'?G'?A' ?'T'Q表C的转换与由相应的小写字W的转换{同Q根据流行的 Locale 规则结果{换ؓ大写形式除外。后者等同于 String.toUpperCase() 的以下调?

转换 参数cd 说明
'b', 'B' 常规 如果参数 arg ?nullQ则l果?"false"。如?arg 是一?boolean 值或 BooleanQ则l果?String.valueOf() q回的字W串。否则结果ؓ "true"?/td>
'h', 'H' 常规 如果参数 arg ?nullQ则l果?"null"。否则,l果?Integer.toHexString(arg.hashCode()) 得到的结果?/td>
's', 'S' 常规 如果参数 arg ?nullQ则l果?"null"。如?arg 实现 FormattableQ则调用 arg.formatTo。否则,l果?arg.toString() 得到的结果?/td>
'c', 'C' 字符 l果是一?Unicode 字符
'd' 整数 l果被格式化为十q制整数
'o' 整数 l果被格式化为八q制整数
'x', 'X' 整数 l果被格式化为十六进制整?/td>
'e', 'E' l果被格式化为用计算机科学记数法表示的十q制?/td>
'f' l果被格式化为十q制?/td>
'g', 'G' Ҏ_ֺ和舍入运后的|使用计算机科学记数Ş式或十进制格式对l果q行格式化?/td>
'a', 'A' l果被格式化为带有效位数和指数的十六q制点?/td>
't', 'T' 日期/旉 日期和时间{换字W的前缀。请参阅日期/旉转换?/td>
'%' 癑ֈ? l果为字面?'%' ('\u0025')
'n' 行分隔符 l果为特定于q_的行分隔W?/td>

M未明定义ؓ转换的字W都是非法字W,q且都被保留Q以供将来扩展用?br />
日期/旉转换
以下日期和时间{换的后缀字符是ؓ 't' ?'T' 转换定义的。这些类型相g但不完全{同于那些由 GNU date ?POSIX strftime(3c) 定义的类型。提供其他{换类型是Z讉K特定?Java 的功能(如将 'L' 用作U中的毫U)?br />
以下转换字符用来格式化时_

'H' 24 时制的时Q被格式化ؓ必要时带前导零的两位敎ͼ?00 - 23?/td>
'I' 12 时制的时Q被格式化ؓ必要时带前导零的两位敎ͼ?01 - 12?/td>
'k' 24 时制的时Q即 0 - 23?/td>
'l' 12 时制的时Q即 1 - 12?/td>
'M' 时中的分钟Q被格式化ؓ必要时带前导零的两位敎ͼ?00 - 59?/td>
'S' 分钟中的U,被格式化为必要时带前导零的两位数Q即 00 - 60 Q?60" 是支持闰U所需的一个特D|?/td>
'L' U中的毫U,被格式化为必要时带前导零的三位数Q即 000 - 999?/td>
'N' U中的毫微秒Q被格式化ؓ必要时带前导零的九位敎ͼ?000000000 - 999999999?/td>
'p' 特定于语a环境?上午或下?/a> 标记以小写Ş式表C,例如 "am" ?"pm"。用{换前~ 'T' 可以此输出转换为大写Ş式?/td>
'z' 相对?GMT ?RFC 822 格式的数字时区偏U量Q例?-0800?/td>
'Z' 表示时区~写形式的字W串。Formatter 的语a环境取代参数的语言环境Q如果有Q?/td>
's' 自协调世界时 (UTC) 1970 q?1 ?1 ?00:00:00 至现在所l过的秒敎ͼ?Long.MIN_VALUE/1000 ?Long.MAX_VALUE/1000 之间的差倹{?/td>
'Q' 自协调世界时 (UTC) 1970 q?1 ?1 ?00:00:00 至现在所l过的毫U数Q即 Long.MIN_VALUE ?Long.MAX_VALUE 之间的差倹{?/td>

以下转换字符用来格式化日期:

'B' 特定于语a环境?a target="_blank">月䆾全称Q例?"January" ?"February"?/td>
'b' 特定于语a环境?a target="_blank">月䆾U?/a>Q例?"Jan" ?"Feb"?/td>
'h' ?'b' 相同?/td>
'A' 特定于语a环境?a target="_blank">星期?/a>全称Q例?"Sunday" ?"Monday"
'a' 特定于语a环境?a target="_blank">星期?/a>Uͼ例如 "Sun" ?"Mon"
'C' 除以 100 的四位数表示的年份,被格式化为必要时带前导零的两位数Q即 00 - 99
'Y' q䆾Q被格式化ؓ必要时带前导零的四位敎ͼ臛_Q,例如Q?092 {于格里高利历的 92 CE?/td>
'y' q䆾的最后两位数Q被格式化ؓ必要时带前导零的两位敎ͼ?00 - 99?/td>
'j' 一q中的天敎ͼ被格式化为必要时带前导零的三位数Q例如,对于格里高利历是 001 - 366?/td>
'm' 月䆾Q被格式化ؓ必要时带前导零的两位敎ͼ?01 - 13?/td>
'd' 一个月中的天数Q被格式化ؓ必要时带前导零两位数Q即 01 - 31
'e' 一个月中的天数Q被格式化ؓ两位敎ͼ?1 - 31?/td>

以下转换字符用于格式化常见的日期/旉l合?

'R' 24 时制的旉Q被格式化ؓ "%tH:%tM"
'T' 24 时制的旉Q被格式化ؓ "%tH:%tM:%tS"?/td>
'r' 12 时制的旉Q被格式化ؓ "%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位|可能与语言环境有关?/td>
'D' 日期Q被格式化ؓ "%tm/%td/%ty"?/td>
'F' ISO 8601 格式的完整日期,被格式化?"%tY-%tm-%td"?/td>
'c' 日期和时_被格式化?"%ta %tb %td %tT %tZ %tY"Q例?"Sun Jul 20 16:17:00 EDT 1969"?/td>

M未明定义ؓ转换的字W都是非法字W,q且都被保留Q以供将来扩展用?br />

标志

下表ȝ了受支持的标志。y 表示该标志受指示参数cd支持?

标志 常规 字符 整数 日期/旉 说明
'-' y     y     y     y     y l果是左对齐的?/td>
'#' y1     -     y3     y     -     l果应该使用依赖于{换类型的替换形式
'+' -     -     y4     y     -     l果L包括一个符?/td>
'   ' -     -     y4     y     -     对于正|l果中将包括一个前导空?/td>
'0' -     -     y     y     -     l果用零来填充
',' -     -     y2     y5     -     l果包括特定于语言环境?a target="_blank">l分隔符
'(' -     -     y4     y5     -     l果是用圆括号括v来的负数

1 取决?Formattable 的定义?br />
2 只适用?'d' 转换?br />
3 只适用?'o'?x' ?'X' 转换?br />
4 ?BigInteger 应用 'd'?o'?x' ?'X' 转换Ӟ或者对 byte ?Byte、short ?Short、int ?Integer、long ?Long 分别应用 'd' 转换旉用?br />
5 只适用?'e'?E'?f'?g' ?'G' 转换?br />
M未显式定义ؓ标志的字W都是非法字W,q且都被保留Q以供扩展用?

宽度   宽度是将向输Z写入的最字W数。对于行分隔W{换,不适用宽度Q如果提供宽度,则会抛出异常?br /> _ֺ   对于常规参数cdQ精度是向输出中写入的最多字W数?br /> 对于点转换 'e'?E' ?'f'Q精度是数点分隔符后的位数。如果{换是 'g' ?'G'Q那么精度是舍入计算后所得数值的所有位数。如果{换是 'a' ?'A'Q则不必指定_ֺ?br /> 对于字符、整数和日期/旉参数cd转换Q以及百分比和行分隔W{换,_ֺ是不适用的;如果提供_ֺQ则会抛出异常?br /> 参数索引   参数索引是一个十q制整数Q用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用Q第二个参数?"2$" 引用Q依此类推?br /> Ҏ位置引用参数的另一U方法是使用 '<' ('\u003c') 标志Q这会重用以前格式说明W的参数。例如,以下两条语句产生的字W相同:

 

Calendar c = ...;
String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);

String s2 = String.format("Duke's Birthday: %1$tm %<$te,%<$tY", c);


]]>
java数据cdQhibernate数据cdQ标准sql数据cd之间的对应表 http://www.aygfsteel.com/liubijin/archive/2010/05/04/320024.html無所?/dc:creator>無所?/author>Tue, 04 May 2010 04:07:00 GMThttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320024.htmlhttp://www.aygfsteel.com/liubijin/comments/320024.htmlhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320024.html#Feedback0http://www.aygfsteel.com/liubijin/comments/commentRss/320024.htmlhttp://www.aygfsteel.com/liubijin/services/trackbacks/320024.html 其接口分Z下几c:
l         提供讉K数据库的操作的接口;
l         用于配置Hibernate的接口;
l         回调接口
l         扩展Hibernate的功能的接口?br /> q些接口大多C于net.sf.hibernate包中

Hibernate的核心接?br /> 5个核心接口:
l         Configuration接口Q配|Hibernate,根启动HibernateQ创建SessionFactory对象?br /> l         SessionFactory接口Q初始化HibernateQ充当数据存储源的代理,创徏Session对象?br /> l         Session接口Q负责保存、更新、删除、加载和查询对象?br /> l         TransactionQ管理事务?br /> l         Query和Criteria接口Q执行数据库查询?br />
SessionFactory实例对应一个数据存储源Q特点:
       U程安全的,重量U?br /> SessionQ是Hibernate应用最q泛的接口,特点Q?br />        不是U程安全的,轻量U?br />
java数据cdQhibernate数据cdQ标准sql数据cd之间的对应表


]]>
DWR util.js 学习W记 http://www.aygfsteel.com/liubijin/archive/2010/05/04/320023.html無所?/dc:creator>無所?/author>Tue, 04 May 2010 03:51:00 GMThttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320023.htmlhttp://www.aygfsteel.com/liubijin/comments/320023.htmlhttp://www.aygfsteel.com/liubijin/archive/2010/05/04/320023.html#Feedback0http://www.aygfsteel.com/liubijin/comments/commentRss/320023.htmlhttp://www.aygfsteel.com/liubijin/services/trackbacks/320023.htmlutil.js包含一些有用的函数function,用于在客L面调用Q它可以和dwr分开Q独立营用于你的pȝ中?

q些功能函数在下面这个网址都有CZ,q里只是把他们用中文解释,方便查找.
http://getahead.ltd.uk/dwr/browser/util

主要功能如下Q?
1?() 获得面参数?
2、addOptions and removeAllOptions 初始化下拉框
3、addRows and removeAllRows 填充表格
4、getText  取得text属性?
5、getValue 取得form表单?
6、getValues 取得form多个?
7、onReturn
8、selectRange
9、setValue
10、setValues
11、toDescriptiveString
12、useLoadingMessage
13、Submission box


1?();

功能 : 相当?document.getElementById(id);
参数 : id ?name 属性?;
?:
<script>
         Var ele=$(txt_test);
         Var str=DWRUtil.toDescriptiveString(ele,1)
         DWRUtil.debug(str);
</script>

2。DWRUtil.getValue();
功能 : 获得指定元素 value ?
参数 : id ?name 属性?;
注意 : 该函数只能用于有 value 属性的元素
?:
<script>
         var val=DWRUtil.getValue(“txt_test”);
         DWRUtil.debug(val);
</script>

3?DWRUtil.getValues();
功能 : 获得一l指定元素的 value ?;
参数 :id ?name 构成的数l对?
?:
<script>
         Var arr_=DWRUtil.getValues({“txt_name”:null,”txt_pswd”:null});
         Var str=DWRUtil.toDescriptiveString(arr,1)
         DWRUtil.debug(str);
</script>

4?/strong>DWRUtil.setValue();
功能 : 讄指定元素?value ?
参数 : id ?name 属性?
?:
<script>
         DWRUtil.setValue(“txt_test”,”wiley”);
</script>

5?DWRUtil.setValues();
功能 : 讄一l指定元素的?
参数 : id ?name 构成的数l对?
?:
<script>
         DWRUtil.setValues({“txt_name”:”wiley”,”txt_pswd”:”wiley”});
</script>

6?DWRUtil.getText();
功能 : 获得 select 元素的文本?
参数 : id ?name 属性?
?:
<script>
         Var txt=DWRUtil.getText (“sel_test”);
         Var val=DWRUtil.getValue(“sel_test”);
         DWRUtil.debug(“Text:”+txt+”\tValue:”+val);
</script>

7。DWRUtil.addRows();
功能 : 指定表格d?
格式 :DWRUtil.addRows(id,items, functions);
参数 :
W一个参?:table ?tbody ?id 属性?
W二个参?: 数组或链?( 可能用词不是很适合 )
W三个参?: 函数链表
?
<script>
         Var arr_={“wiley’s blog”,”wiley 中国 ”};
         DWRUtil.addRows(“tby_test”,arr_,[function(arr_){return arr_}]);
</script>

<script>
         Var items=[{“name”:”wiley 中国 ”,”add”:”wiley-cn.com”}];
         DWRUtil.addRows(“tby_test”,items,[function(item){return item.name}, function(item){return item.add}]);
</script>

8。DWRUtil.romoveAllRows();
功能 : 删除指定表格?
参数 :table ?tbody ?id 属性?
<script>
         DWRUtil.romoveAllRows(“tby_test”);// 每次d前将原有数据行删?, 防止数据重叠
         Var items=[{“name”:”wiley 中国 ”,”add”:”wiley-cn.com”}];
         DWRUtil.addRows(“tby_test”,items,[function(item){return item.name}, function(item){return item.add}]);
</script>

9。DWRUtil.addOptions();
功能 : d select 元素?option 子元?
格式 :DWRUtil.addOption(id,items) ?DWRUtil.addOption(id,items,valueProp,textProp);
参数 :
W一个参?:select ?id ?name 属性?
W二个参?: 数组或链?( 填充数据 )
W三、四个参?: 链表节点的属?, W三个填?value |W四个填?text ?
    <script>
         Var arr_={“wiley”,”wiley 中国 ”};
         DWRUtil.addRows(“sel_test”,arr_);// 此时 value ?text 值相?
         DWRUtil.romoveAllOptions(“sel_test”);
         Var items=[{“name”:”wiley 中国 ”,”add”:”wiley-cn.com”}];
         DWRUtil.addRows(“sel_test”,”add”,”name”);// 此时 value ?text 不相?
</script>

10。DWRUtil.romoveAllOptions();
功能 : 删除指定 select 元素?option 子元?
参数 :select 元素?id ?name 属性?
?: 前面例子有用?

11。DWRUtil.debug();
功能 : {h?alert()
?: 前面例子有用?

12。DWRUtil.toDescriptiveString();
功能Q将对象序列化成字符?, 主要用于调试
带debug信息的toStringQ第一个ؓ要debug的对象,W二个参Cؓ处理{。等U如下:

     0: Single line of debug 单行调试 
     1: Multi-line debug that does not dig into child objects 不分析子元素的多行调?nbsp;
     2: Multi-line debug that digs into the 2nd layer of child objects 最多分析到W二层子元素的多行调?

     <input type="text" id="text">
     DWRUtil.toDescrīptiveString("text",0);

13。DWRUtil.useLoadingMessage();
    功能Q当发出ajaxh?面昄的提C等待信?
    例:
    function searchUser(){
        var loadinfo = "loading....."
        regUser.queryAllUser(userList);
        DWRUtil.useLoadingMessage(loadinfo); 
     }

 



]]>
վ֩ģ壺 Դ| | | ˳| ֬| | ̨ɽ| | Ȫ| | | | | ʷ| ƺ| Ȫ| ʱ| ʯ| | | ̩| ױ| | | ̨| | | | | | | ȫ| | | ϲ| տ| ν| ľ| | | |