??xml version="1.0" encoding="utf-8" standalone="yes"?> 一场里?.8U的特大地震昨天14?8分在中国的四川省爆发Q台湑֪体用”半个亚洲”形容q次地壳晃动的L及面Q直接有震感的地及泰国的D和越南的沛_。截止现在ؓ止,M人数接近10000人。震U与32q前唐山大地震相同,相当?00颗美?945q投在广岛的原子弹,四川现在是什么样的了Q在q里阿草哥通过支付?/a>?a target="_blank">李连杰壹基金计划 想震灾h民捐?0元h民币 ׃多但希望通过我自q一份力量支援灾?/p>
最后让我们一L吧Q?008q从此一切顺利! 补充一下:l于接到了个feedsky的话题还是个公益话题的,Z拿q个当作话题q告吧! 以下是本站的2008全球火炬接力报道路线?/a> ps.executeQuery(); 3.提交Q? List results = session.createCriteria(Cat.class)
]]>
关于q一路线囄亮点Q?/strong>
1.全程路线q踪Q?/strong>你将可以随着它,清晰看到接力全程路线和到达日期,其中的红色\U代表接力已l走q的部分?br />
2.城市详情Q?/strong>点击图中的每个城市点或者右侧的城市列表Q一个小H口会打开Q你可以在这里了解接力\U上q一城市的基本状c浏览城市风景图片,以及层层推进看到q个城市详细的地图。点d中的相关链接?#8221;更多城市囄”Q你q可以直接看到用q个城市名在h搜烦囄的结果。如果?zhn)要了解更多的内容?a target="_blank">点击q里
]]>
help => Software Updates => Find and Install... => Search for new features to install,单击"New Remote Site..." 在URL栏输?http://www.technoetic.com/eclipse/update
安装好后可以看到Window => Preferences... => Java => Jode Decompiler选项卡?
配置QWindow => Preferences... => General => Editors => File Associations扑ֈ"*.class"?Associated editors"里面可以看到"Jode class file viewer"选中它再单击Default按钮.
在Eclipse中展开jar文g,双击class文g卛_看到反编译之后的源代?
]]>
className="Oracle.jdbc.driver.OracleDriver";
uid="scott";
pwd="tiger";
url="jdbc:oracle:thin:@localhost:1521:ora92";
Class.forName(classname);
Connection conn=DriverManager.getConnection(url,uid,pwd);
2.JNDI链接数据?br />
String jndi ="jdbc/db"; // e20-040 9L0-609 数据源的名称
//context是一l名U到对象的绑定组?br />
Hashtable env=new Hashtable ();
Context ctx=(Context)new InitialContext.lookup("env");// 获得数据源所在的上下文点的对?br />
DataSource ds=(DataSource)ctx.lookup(jndi);//扑ֈ数据?/font>
Connection conn=ds.getConnection();//
b.执行 sql语句
String sql;
StateMent stat=conn.createStatement();
ResultSet rs=stat.executeQuery(sql);//执行数据的查询语?select);
stat.executeUpdate(sql);//执行数据的更新语?inset into ,delete ,update ,drop)
stat.close();
c.用preparedStatement 来执行sql语句
String sql="inset into table(id,name) values(?,?)";
PreparedStatement ps=conn.prepareStatement(sql);
ps.setInt(1,001);
ps.setString(2,"zhangmanli");
int count=ps.executeUpdate();
d.处理执行l果
查询语句Q返回记录集ResultSet对象
更新语句Q返回数字,表示该更新媄响的记录?br />
javax.sql.*
javax.naming.*;
数据处理Q?br />
1关闭connection 的自动提?br />
conn.setAutoCommit(false);
2执行一pdsql 语句Q?br />
Statement sm;
sm=conn.createStatement(sql);
sm.executeUpdate();
sm.close();
conn.commit();
4.回滚机制Q?br />
conn.rollback();
e:U程处理Q?br />
DQjndi和dataSource 来获得数据库的链接:
import java.sql.ResultSet ;
import java.sql.*;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Hashtable;
import java.util.Properties;
import java.io.*;
public class BasicExample{
public static void main(String args[]){
Connection conn=null;
try{
Properties prop =new Properties();
prop.load(new FileInputStream("simple.properties"));
Hashtable env =new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,prop.getProperty("INITIAL_CONTEXT_FACTORY"));
env.put(Context.PROVIDER_URL,prop.getProperty("PROVIDER_URL"));
InitialContext ctx=new InitialContext(env);
DataSource ds=(DataSource)ctx.lookup("Book");
Conn=ds.getConnection();
Statement stat=conn.createStatement();;
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()){
int id=Integer.parseInt(rs.getString("userId"));
String userName=rs.getString ("username");
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(conn!=null){
conn.close();
}
}catch(SQLException e){
e.printStackTrace();
}
}
}
};
]]>
private Throwable superException;
private String myMessage;
public TransactionException(Throwable throwable){
super(throwable);
this.superException = throwable;
}
public TransactionException(Throwable throwable,String message){
super(message,throwable);
this.superException = throwable;
this.myMessage = message;
}
/**
* @return Returns the myMessage.
*/
public String getMessage() {
return myMessage;
}
/**
* @return Returns the superException.
*/
public Throwable getSuperException() {
return superException;
}
/**
* @param myMessage The myMessage to set.
*/
public void setMyMessage(String message) {
this.myMessage = message;
}
/**
* @param superException The superException to set.
*/
public void setSuperException(Throwable superException) {
this.superException = superException;
}
}
1Q?nbsp; 通过Ҏ(gu)的第一个参Cq去
l DAO
import java.sql.Connection;
public class TestDao {
public void insertA(Connection con,String a,String b,……){
…………………………………………
一pd操作
…………………………………………
}
public String queryA(Connection con,…….){
…………………………………………
一pd操作
…………………………………………
}
public void updateA(Connection con,…….){
…………………………………………
一pd操作
…………………………………………
}
}
l 拦截?br />
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class TransactionInterceptor implements Interceptor {
public void before(InvokeJniInfo invInfo) {
if(isNeedTransactions(invInfo)){
Connection conn = (Connection) invInfo.getArgs()[0];
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
throw new TransactionException(e);
}
}
}
public void after(InvokeJniInfo invInfo) {
if(isNeedTransactions(invInfo)){
Connection conn = (Connection) invInfo.getArgs()[0];
try {
conn.commit();
} catch (SQLException e) {
throw new TransactionException(e);
}finally{
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
throw new TransactionException(e,"Close Connection is failure!");
}
}
}
}
}
public void exceptionThrow(InvokeJniInfo invInfo) {
if(isNeedTransactions(invInfo)){
Connection conn = (Connection) invInfo.getArgs()[0];
try {
conn.rollback();
} catch (SQLException e) {
throw new TransactionException(e);
}finally{
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
throw new TransactionException(e,"Close Connection is failure!");
}
}
}
}
}
private List getNeedTransaction(){
List needTransactions = new ArrayList();
needTransactions.add("insert");
needTransactions.add("update");
return needTransactions;
}
private boolean isNeedTransactions(InvokeJniInfo invInfo){
String needTransaction = "";
List needTransactions = getNeedTransaction();
for(int i = 0;i
if(invInfo.getMethod().getName().startsWith(needTransaction)){
return true;
}
}
return false;
}
}
需要注意的是:getNeedTransaction是需要进行事务处理的Ҏ(gu)的开_q个Ҏ(gu)可以写成一个从配置文g里面去读Q这里我写d里面了。只是对insert和update开头的Ҏ(gu)q行事务控制?br />
2Q?nbsp; Connection对象攑֜ThreadLocal?br />
l ConnectionUtilc:
import java.sql.Connection;
public final class ConnectionUtil {
private static ThreadLocal connections = new ThreadLocal();
public static Connection getConnection(){
Connection conn = null;
conn = (Connection) connections.get();
if(conn == null){
conn = getRealConnection();
connections.set(conn);
}
return conn;
}
public static void realseConnection(Connection conn){
connections.set(null);
}
private static Connection getRealConnection() {
实现自己获取q接的代?br />
return null;
}
}
l DAOc?br />
public class TestDao {
public void insertA(String a,String b){
Connection conn = getConnection();
…………………………………………
一pd操作
…………………………………………
}
public String queryA(Connection con,…….){
Connection conn = getConnection();
…………………………………………
一pd操作
…………………………………………
}
public void updateA(Connection con,…….){
Connection conn = getConnection();
…………………………………………
一pd操作
…………………………………………
}
private Connection getConnection(){
return ConnectionUtil.getConnection();
}
}
l 拦截?br />
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class TransactionInterceptor implements Interceptor {
public void before(InvokeJniInfo invInfo) {
if(isNeedTransactions(invInfo)){
Connection conn = getConnection();
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
throw new TransactionException(e);
}
}
}
public void after(InvokeJniInfo invInfo) {
if(isNeedTransactions(invInfo)){
Connection conn = getConnection();
try {
conn.commit();
} catch (SQLException e) {
throw new TransactionException(e);
}finally{
if(conn != null){
try {
conn.close();
releaseConnection(conn);
} catch (SQLException e) {
throw new TransactionException(e,"Close Connection is failure!");
}
}
}
}
}
public void exceptionThrow(InvokeJniInfo invInfo) {
if(isNeedTransactions(invInfo)){
Connection conn = getConnection();
try {
conn.rollback();
} catch (SQLException e) {
throw new TransactionException(e);
}finally{
if(conn != null){
try {
conn.close();
releaseConnection(conn);
} catch (SQLException e) {
throw new TransactionException(e,"Close Connection is failure!");
}
}
}
}
}
private Connection getConnection(){
return ConnectionUtil.getConnection();
}
private void releaseConnection(Connection conn){
ConnectionUtil.releaseConnection(conn);
}
private List getNeedTransaction(){
List needTransactions = new ArrayList();
needTransactions.add("insert");
needTransactions.add("update");
return needTransactions;
}
private boolean isNeedTransactions(InvokeJniInfo invInfo){
String needTransaction = "";
List needTransactions = getNeedTransaction();
for(int i = 0;i
if(invInfo.getMethod().getName().startsWith(needTransaction)){
return true;
}
}
return false;
}
}
最后将q个拦截器添加到AOP拦截框架中去QInterceptorHandlercM的getIntercetorsҎ(gu)中添加一个:
private synchronized List getIntercetors(){
if(null == interceptors){
interceptors = new ArrayList();
……………………………………
interceptors.add(new TransactionInterceptor ());
……………………………………
}
return interceptors;
}
]]>
一 clientX和clientY
讄或接收相对于览器窗口客户区的鼠标x、y坐标Q客户区不包括窗口滚动条及边?
大小(MSDN原文:Sets or retrieves the x-coordinate/y-coordinate of the mouse
pointer's position relative to the client area of the window, excluding
window decorations and scroll bars.)
在IE4里,q一对属性只M可写QIE5及以后版本里则可d?MSDN原文:The
property is read-only in Microsoft® Internet Explorer 4.0, and read/write
in Microsoft® Internet Explorer 5 and later.)
语法: event.clientX=[iPos] event.clientY=[iPos] iPos应该是一个整?
? screenX和screenY
讄或接收相对于用户屏幕的鼠标坐?
在IE4里,q一对属性只M可写QIE5及以后版本里则可d?
语法: event.screenX=[iSize] event.screenY=[iSize] iSize应该是一个整?
? offsetX和offsetY
讄或接攉标指针在鼠标所在的元素上的偏移?
在IE4里,q一对属性只M可写QIE5及以后版本里则可d?
语法: event.screenX=[iCoord] event.screenY=[iCoord] iCoord应该是一个整?
? x和y
讄或接收相对于鼠标所在的元素的父元素的坐?MSDN原文:Sets or retrieves
the x-coordinate, in pixels, of the mouse pointer's position relative to
the parent element.)
在IE4里,q一对属性只M可写QIE5及以后版本里则可d?但IE5以前的版式本?
x和y坐标q不相对于鼠标所在的元素的父元素Q只相对于浏览器H口的客户区
如果在检鼠标位|时Q鼠标却在浏览器H口的外面,则x和y都返?1
]]>
使用FileSystemObject 对象q行~程很简单,一般要l过如下的步骤: 创徏FileSystemObject对象、应用相x法、访问对象相兛_??
Q一Q创建FileSystemObject对象
创徏FileSystemObject对象的代码只?行:
var fso = new ActiveXObject("Scripting.FileSystemObject");
上述代码执行后,fso成Z个FileSystemObject对象实例?
Q二Q应用相x?
创徏对象实例后,可以用对象的相关Ҏ(gu)了。比如,使用CreateTextFileҎ(gu)创徏一个文本文Ӟ
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.createtextfile("c:\\myjstest.txt",true");
Q三Q访问对象相兛_?
要访问对象的相关属性,首先要徏立指向对象的句柄Q这p通过getpdҎ(gu)实现QGetDrive负责获取驱动器信息,GetFolder负责获取文g夹信息,GetFile负责获取文g信息。比如,指向下面的代码后Qf1成为指向文件c:\test.txt的句柄:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.GetFile("c:\\myjstest.txt");
然后Q用f1讉K对象的相兛_性。比如:
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.GetFile("c:\\myjstest.txt");
alert("File last modified: " + f1.DateLastModified);
执行上面最后一句后Q将昄c:\myjstest.txt的最后修Ҏ(gu)期属性倹{?
但有一点请注意Q对于用createҎ(gu)建立的对象,׃必再使用getҎ(gu)获取对象句柄了,q时直接使用createҎ(gu)建立的句柄名U就可以Q?
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.createtextfile("c:\\myjstest.txt",true");
alert("File last modified: " + f1.DateLastModified);
三、操作驱动器QDrivesQ?
使用FileSystemObject对象来编E操作驱动器QDrivesQ和文g夹(FoldersQ很Ҏ(gu)Q这p在Windows文g览器中Ҏ(gu)件进行交互操作一P比如Q拷贝、移动文件夹Q获取文件夹的属性?
Q一QDrives对象属?
Drive对象负责攉pȝ中的物理或逻辑驱动器资源内容,它具有如下属性:
l TotalSizeQ以字节QbyteQؓ单位计算的驱动器大小?
l AvailableSpace或FreeSpaceQ以字节QbyteQؓ单位计算的驱动器可用I间?
l DriveLetterQ驱动器字母?
l DriveTypeQ驱动器cdQ取gؓQremovableQ移动介质)、fixedQ固定介质)、networkQ网l资源)、CD-ROM或者RAM盘?
l SerialNumberQ驱动器的系列码?
l FileSystemQ所在驱动器的文件系l类型,取gؓFAT、FAT32和NTFS?
l IsReadyQ驱动器是否可用?
l ShareNameQ共享名U?
l VolumeNameQ卷标名U?
l Path和RootFolderQ驱动器的\径或者根目录名称?
Q二QDrive对象操作例程
下面的例E显C驱动器C的卷标、d量和可用I间{信息:
var fso, drv, s ="";
fso = new ActiveXObject("Scripting.FileSystemObject");
drv = fso.GetDrive(fso.GetDriveName("c:\\"));
s += "Drive C:" + " - ";
s += drv.VolumeName + "\n";
s += "Total Space: " + drv.TotalSize / 1024;
s += " Kb" + "\n";
s += "Free Space: " + drv.FreeSpace / 1024;
s += " Kb" + "\n";
alert(s);
四、操作文件夹QFoldersQ?
涉及到文件夹的操作包括创建、移动、删除以及获取相兛_性?
Folder对象操作例程 :
下面的例E将l习获取父文件夹名称、创建文件夹、删除文件夹、判断是否ؓ根目录等操作Q?
var fso, fldr, s = "";
// 创徏FileSystemObject对象实例
fso = new ActiveXObject("Scripting.FileSystemObject");
// 获取Drive 对象
fldr = fso.GetFolder("c:\\");
// 昄父目录名U?
alert("Parent folder name is: " + fldr + "\n");
// 昄所在drive名称
alert("Contained on drive " + fldr.Drive + "\n");
// 判断是否为根目录
if (fldr.IsRootFolder)
alert("This is the root folder.");
else
alert("This folder isn't a root folder.");
alert("\n\n");
// 创徏新文件夹
fso.CreateFolder ("C:\\Bogus");
alert("Created folder C:\\Bogus" + "\n");
// 昄文g夹基名称Q不包含路径?
alert("Basename = " + fso.GetBaseName("c:\\bogus") + "\n");
// 删除创徏的文件夹
fso.DeleteFolder ("C:\\Bogus");
alert("Deleted folder C:\\Bogus" + "\n");
五、操作文ӞFilesQ?
Ҏ(gu)件进行的操作要比以上介绍的驱动器QDriveQ和文g夹(FolderQ操作复杂些Q基本上分ؓ以下两个cdQ对文g的创建、拷贝、移动、删除操作和Ҏ(gu)件内容的创徏、添加、删除和d操作。下面分别详l介l?
Q一Q创建文?
一共有3U方法可用于创徏一个空文本文gQ这U文件有时候也叫做文本(text streamQ?
W一U是使用CreateTextFileҎ(gu)。代码如下:
var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
W二U是使用OpenTextFileҎ(gu)Qƈd上ForWriting属性,ForWriting的gؓ2。代码如下:
var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true);
W三U是使用OpenAsTextStreamҎ(gu)Q同栯讄好ForWriting属性。代码如下:
var fso, f1, ts;
var ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateTextFile ("c:\\test1.txt");
f1 = fso.GetFile("c:\\test1.txt");
ts = f1.OpenAsTextStream(ForWriting, true);
Q二Q添加数据到文g
当文件被创徏后,一般要按照“打开文gQ?gt;填写数据Q?gt;关闭文g”的步骤实现添加数据到文g的目的?
打开文g可用FileSystemObject对象的OpenTextFileҎ(gu)Q或者用File对象的OpenAsTextStreamҎ(gu)?
填写数据要用到TextStream对象的Write、WriteLine或者WriteBlankLinesҎ(gu)。在同是实现写入数据的功能下Q这3者的区别在于QWriteҎ(gu)不在写入数据末尾d新换行符QWriteLineҎ(gu)要在最后添加一个新换行W,而WriteBlankLines则增加一个或者多个空行?
关闭文g可用TextStream对象的CloseҎ(gu)?
Q三Q创建文件及d数据例程
下面的代码将创徏文g、添加数据、关闭文件几个步骤结合v来进行应用:
var fso, tf;
fso = new ActiveXObject("Scripting.FileSystemObject");
// 创徏新文?
tf = fso.CreateTextFile("c:\\testfile.txt", true);
// 填写数据Qƈ增加换行W?
tf.WriteLine("Testing 1, 2, 3.") ;
// 增加3个空?
tf.WriteBlankLines(3) ;
// 填写一行,不带换行W?
tf.Write ("This is a test.");
// 关闭文g
tf.Close();
Q四Q读取文件内?
从文本文件中d数据要用TextStream对象的Read、ReadLine或ReadAll Ҏ(gu)。ReadҎ(gu)用于d文g中指定数量的字符QReadLineҎ(gu)d一整行Q但不包括换行符QReadAllҎ(gu)则读取文本文件的整个内容。读取的内容存放于字W串变量中,用于昄、分析。在使用Read或ReadLineҎ(gu)d文g内容Ӟ如果要蟩q一些部分,p用到Skip或SkipLineҎ(gu)?
下面的代码演C打开文g、填写数据,然后d数据Q?
var fso, f1, ts, s;
var ForReading = 1;
fso = new ActiveXObject("Scripting.FileSystemObject");
// 创徏文g
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
// 填写一行数?
f1.WriteLine("Hello World");
f1.WriteBlankLines(1);
// 关闭文g
f1.Close();
// 打开文g
ts = fso.OpenTextFile("c:\\testfile.txt", ForReading);
// d文g一行内容到字符?
s = ts.ReadLine();
// 昄字符串信?
alert("File contents = '" + s + "'");
// 关闭文g
ts.Close();
Q五Q移动、拷贝和删除文g
对于以上三种文g操作Qjavascript各有两种对应的方法:File.Move ?FileSystemObject.MoveFile用于Ud文gQFile.Copy ?FileSystemObject.CopyFile用于拯文gQFile.Delete ?FileSystemObject.DeleteFile用于删除文g?
下面的代码演C在驱动器C的根目录下创Z个文本文Ӟ填写一些内容,然后文件移动到\tmp目录下,再在目录\temp下面建立一个文件拷贝,最后删除这两个目录的文Ӟ
var fso, f1, f2, s;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);
// 写一?
f1.Write("This is a test.");
// 关闭文g
f1.Close();
// 获取C:\根目录下的文件句?
f2 = fso.GetFile("c:\\testfile.txt");
// Ud文g到\tmp目录?
f2.Move ("c:\\tmp\\testfile.txt");
// 拯文g到\temp目录?
f2.Copy ("c:\\temp\\testfile.txt");
// 获取文g句柄
f2 = fso.GetFile("c:\\tmp\\testfile.txt");
f3 = fso.GetFile("c:\\temp\\testfile.txt");
// 删除文g
f2.Delete();
f3.Delete();
六、结 ?
通过以上对FileSystemObject的各U对象、属性和Ҏ(gu)的介l和CZQ相信你已经对如何用javascript语言在页面中操作驱动器、文件和文gҎ(gu)了清晰的认识。但是上q提及的例程都非常简单,要全面、灵zd掌握javascript文g操作技术,q需要大量的实践l习。而且q有一Ҏ(gu)醒大Ӟ׃涉及到在览器中q行文gdq样的高U操作,对于默认的浏览器安全U别而言Q在代码q行前都会有一个信息提C,q点请在实际环境中提C问者注意?
]]>
设计上可以灵zȝҎ(gu) Criteria 的特Ҏ(gu)方便地进行查询条件的l装。现在对 Hibernate的Criteria 的用法进行ȝQ?/font>
Hibernate 设计?CriteriaSpecification 作ؓ Criteria 的父接口Q下面提供了 Criteria和DetachedCriteria ?
Criteria ?DetachedCriteria 的主要区别在于创建的形式不一P Criteria 是在U的Q所
以它是由 Hibernate Session q行创徏的;?DetachedCriteria 是离U的Q创建时无需
SessionQDetachedCriteria 提供?2 个静态方?forClass(Class) ?forEntityName(Name)
q行DetachedCriteria 实例的创建?Spring 的框架提供了getHibernateTemplate
().findByCriteria(detachedCriteria) Ҏ(gu)可以很方便地Ҏ(gu)DetachedCriteria 来返回查询结
果?
Criteria ?DetachedCriteria 均可使用 Criterion ?Projection 讄查询条g。可以设
|?FetchMode( 联合查询抓取的模?) Q设|排序方式。对?Criteria q可以设|?FlushModel
Q冲?Session 的方式)?LockMode Q数据库锁模式)?
下面?Criterion ?Projection q行详细说明?/font>
Criterion ?Criteria 的查询条件。Criteria 提供?add(Criterion criterion) Ҏ(gu)?/font>
d查询条g?br />
Criterion 接口的主要实现包括: Example ?Junction ?SimpleExpression 。?
Junction 的实际用是它的两个子类 conjunction ?disjunction Q分别是使用 AND ?OR ?/font>
作符q行来联l查询条仉合?br />
Criterion 的实例可以通过 Restrictions 工具cL创徏QRestrictions 提供了大量的静?/font>
Ҏ(gu)Q如 eq Q等于)?ge Q大于等于)?between {来Ҏ(gu)的创?Criterion 查询条g
QSimpleExpression 实例Q。除此之外, Restrictions q提供了Ҏ(gu)来创?conjunction ?
disjunction 实例Q通过往该实例的 add(Criteria) Ҏ(gu)来增加查询条件Ş成一个查询条仉?/font>
?br />
至于 Example 的创建有所不同Q?Example 本n提供了一个静态方?create(Object
entity) Q即Ҏ(gu)一个对象(实际使用中一般是映射到数据库的对象)来创建。然后可以设|一?/font>
qo条gQ?
Example exampleUser =Example.create(u)
.ignoreCase() // 忽略大小?
.enableLike(MatchMode.ANYWHERE);
// ?String cd的属性,无论在那里值在那里都匹配。相当于 %value%
Project 主要是让 Criteria 能够q行报表查询Qƈ可以实现分组?Project 主要?
SimpleProjection ?ProjectionList ?Property 三个实现。其?SimpleProjection ?
ProjectionList 的实例化是由内徏?Projections 来完成,如提供的 avg ?count ?max ?
min ?sum 可以让开发者很Ҏ(gu)Ҏ(gu)个字D进行统计查询?
Property 是对某个字段q行查询条g的设|,如通过Porperty.forName(“color”).in
(new String[]{“black”,”red”,”write”}); 则可以创Z?Project 实例。通过
criteria ?add(Project) Ҏ(gu)加入到查询条件中厅R?
使用 Criteria q行查询Q主要要清晰的是 Hibernate 提供了那些类和方法来满开发中?/font>
询条件的创徏和组装,下面介绍几种用法Q?/font>
1. 创徏一个Criteria 实例
org.hibernate.Criteria接口表示特定持久cȝ一个查询。Session?Criteria实例的工厂?br />
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();
2. 限制l果集内?br />
一个单独的查询条g是org.hibernate.criterion.Criterion 接口的一个实例?/font>
org.hibernate.criterion.Restrictionsc?定义了获得某些内|Criterioncd的工厂方法?br />
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.between("weight", minWeight, maxWeight) )
.list();
U束可以按逻辑分组?
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.add( Restrictions.or(
Restrictions.eq( "age", new Integer(0) ),
Restrictions.isNull("age")
) )
.list();
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )
.add( Restrictions.disjunction()
.add( Restrictions.isNull("age") )
.add( Restrictions.eq("age", new Integer(0) ) )
.add( Restrictions.eq("age", new Integer(1) ) )
.add( Restrictions.eq("age", new Integer(2) ) )
) )
.list();
Hibernate提供了相当多的内|criterioncd(Restrictions 子类), 但是其有用的是可以允许
你直接用SQL?br />
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.sql("lower({alias}.name) like lower(?)", "Fritz%",
Hibernate.STRING) )
.list();
{alias}占位W应当被替换查询实体的列别名?
Property实例是获得一个条件的另外一U途径。你可以通过调用Property.forName() 创徏一?/font>
Property?
Property age = Property.forName("age");
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.disjunction()
.add( age.isNull() )
.add( age.eq( new Integer(0) ) )
.add( age.eq( new Integer(1) ) )
.add( age.eq( new Integer(2) ) )
) )
.add( Property.forName("name").in( new String[] { "Fritz", "Izi", "Pk" } ) )
.list();
3. l果集排?br />
你可以用org.hibernate.criterion.Order来ؓ查询l果排序?
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "F%")
.addOrder( Order.asc("name") )
.addOrder( Order.desc("age") )
.setMaxResults(50)
.list();
List cats = sess.createCriteria(Cat.class)
.add( Property.forName("name").like("F%") )
.addOrder( Property.forName("name").asc() )
.addOrder( Property.forName("age").desc() )
.setMaxResults(50)
.list();
4. 兌
你可以用createCriteria()非常Ҏ(gu)的在互相兌的实体间建立 U束?br />
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "F%")
.createCriteria("kittens")
.add( Restrictions.like("name", "F%")
.list();
注意W二?createCriteria()q回一个新?Criteria实例Q该实例引用kittens 集合中的元素?
接下来,替换形态在某些情况下也是很有用的?br />
List cats = sess.createCriteria(Cat.class)
.createAlias("kittens", "kt")
.createAlias("mate", "mt")
.add( Restrictions.eqProperty("kt.name", "mt.name") )
.list();
(createAlias()q不创徏一个新?Criteria实例?
Cat实例所保存的之前两ơ查询所q回的kittens集合?没有被条仉qo的。如果你希望只获?/font>
W合条g的kittensQ?你必M用returnMaps()?
List cats = sess.createCriteria(Cat.class)
.createCriteria("kittens", "kt")
.add( Restrictions.eq("name", "F%") )
.returnMaps()
.list();
Iterator iter = cats.iterator();
while ( iter.hasNext() ) {
Map map = (Map) iter.next();
Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
Cat kitten = (Cat) map.get("kt");
}
5. 动态关联抓?br />
你可以用setFetchMode()在运行时定义动态关联抓取的语义?
List cats = sess.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();
q个查询可以通过外连接抓取mate和kittens?br />
6. 查询CZ
org.hibernate.criterion.Examplecd怽通过一个给定实?构徏一个条件查询?br />
Cat cat = new Cat();
cat.setSex('F');
cat.setColor(Color.BLACK);
List results = session.createCriteria(Cat.class)
.add( Example.create(cat) )
.list();
版本属性、标识符和关联被忽略。默认情况下gؓnull的属性将被排除?
可以自行调整Example使之更实用?
Example example = Example.create(cat)
.excludeZeroes() //exclude zero valued properties
.excludeProperty("color") //exclude the property named "color"
.ignoreCase() //perform case insensitive string comparisons
.enableLike(); //use like for string comparisons
List results = session.createCriteria(Cat.class)
.add(example)
.list();
甚至可以使用examples在关联对象上攄条g?br />
List results = session.createCriteria(Cat.class)
.add( Example.create(cat) )
.createCriteria("mate")
.add( Example.create( cat.getMate() ) )
.list();
7. 投媄(Projections)、聚合(aggregationQ和分组QgroupingQ?br />
org.hibernate.criterion.Projections?Projection 的实例工厂。我们通过调用
setProjection()应用投媄C个查询?
List results = session.createCriteria(Cat.class)
.setProjection( Projections.rowCount() )
.add( Restrictions.eq("color", Color.BLACK) )
.list();
List results = session.createCriteria(Cat.class)
.setProjection( Projections.projectionList()
.add( Projections.rowCount() )
.add( Projections.avg("weight") )
.add( Projections.max("weight") )
.add( Projections.groupProperty("color") )
)
.list();
在一个条件查询中没有必要昑ּ的?"group by" 。某些投q型就是被定义?分组投媄Q他
们也出现在SQL的group by子句中?
可以选择把一个别名指z一个投影,q样可以使投影DU束或排序所引用。下面是两种不同?/font>
实现方式Q?br />
List results = session.createCriteria(Cat.class)
.setProjection( Projections.alias( Projections.groupProperty("color"), "colr" ) )
.addOrder( Order.asc("colr") )
.list();
.setProjection( Projections.groupProperty("color").as("colr") )
.addOrder( Order.asc("colr") )
.list();
alias()和as()Ҏ(gu)便的一个投影实例包装到另外一?别名的Projection实例中。简而言之,
当你d一个投影到一个投影列表中?你可以ؓ它指定一个别名:
List results = session.createCriteria(Cat.class)
.setProjection( Projections.projectionList()
.add( Projections.rowCount(), "catCountByColor" )
.add( Projections.avg("weight"), "avgWeight" )
.add( Projections.max("weight"), "maxWeight" )
.add( Projections.groupProperty("color"), "color" )
)
.addOrder( Order.desc("catCountByColor") )
.addOrder( Order.desc("avgWeight") )
.list();
List results = session.createCriteria(Domestic.class, "cat")
.createAlias("kittens", "kit")
.setProjection( Projections.projectionList()
.add( Projections.property("cat.name"), "catName" )
.add( Projections.property("kit.name"), "kitName" )
)
.addOrder( Order.asc("catName") )
.addOrder( Order.asc("kitName") )
.list();
也可以用Property.forName()来表C投影:
List results = session.createCriteria(Cat.class)
.setProjection( Property.forName("name") )
.add( Property.forName("color").eq(Color.BLACK) )
.list();
List results = session.createCriteria(Cat.class)
.setProjection( Projections.projectionList()
.add( Projections.rowCount().as("catCountByColor") )
.add( Property.forName("weight").avg().as("avgWeight") )
.add( Property.forName("weight").max().as("maxWeight") )
.add( Property.forName("color").group().as("color" )
)
.addOrder( Order.desc("catCountByColor") )
.addOrder( Order.desc("avgWeight") )
.list();
8. ȝ(detached)查询和子查询
DetachedCriteriacM你在一个session范围之外创徏一个查询,q且可以使用L?Session?/font>
执行它?br />
DetachedCriteria query = DetachedCriteria.forClass(Cat.class)
.add( Property.forName("sex").eq('F') );
//创徏一个Session
Session session = .;
Transaction txn = session.beginTransaction();
List results = query.getExecutableCriteria(session).setMaxResults(100).list();
txn.commit();
session.close();
DetachedCriteria也可以用以表C子查询。条件实例包含子查询可以通过 Subqueries或?/font>
Property获得?br />
DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight").avg() );
session.createCriteria(Cat.class)
.add( Property.forName("weight).gt(avgWeight) )
.list();
DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight") );
session.createCriteria(Cat.class)
.add( Subqueries.geAll("weight", weights) )
.list();
怺兌的子查询也是有可能的Q?br />
DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, "cat2")
.setProjection( Property.forName("weight").avg() )
.add( Property.forName("cat2.sex").eqProperty("cat.sex") );
session.createCriteria(Cat.class, "cat")
.add( Property.forName("weight).gt(avgWeightForSex) )
.list();
]]>
今天在网上搜索汽车寻找自׃意的车型Q无意中看见长安特S-MAX一Ƒ֊感设计的车型吸引了我Q于是浏览更多的相关信息Q发现在北京富特S-MAX有一个春日踏青自驾游zd。我的梦想终于可以实CQ虽然只是一ơ活动,但这也会让我更加珍惜q次Z而且会更加促使我不断努力为梦惌前q?/span>
三月春天明媚照hQ这L季节Q带着全家老小Q自背行囊沿着一路游下去好不惬意。这时候你是不是ؓ轿R的空间烦|不要让这些小事媄响你的出游计划。这Ƒ֮位ؓ“都市多功能用?/span>”的新佳乐hMPV的空_SUV的款式;MPV的实用,SUV的稳固。在解决你对I间的烦g余,也不输掉对家人的保护?/span>特S-MAX是福特第一N用了特Ƨ洲动感设计(Kinetic Design)的R型,取代了较早的新边锋设计,其充满运动和时尚风格的造型设计体现?/span>“q动中的能量”?br />
S-MAX前端以鲜明的楔角车头为特征,富于动感的前照灯为它的外表增M一U果断?span style="color: #000099">雄是嵌入式的,高高地布|在前保险杠上,赋予汽R一U动感美。牌照板下的大型梯Ş格栅与上格栅形成互补—?/span>q是特的特征,同时也给前部外观qx一分霸气。下格栅两侧cM?/span>“鲨鱼?/span>”的设计,形成了自q有的特色?br />
从福?/span>S-MAXq动式的侧媄QZ隄出福特动感设计的意图所在。流U的车顶U条带着拱曲汇入发动机罩Q突出的轮拱带有后沿出风口ƈ以独特的上弯与窗ȝ后部相接。所有这一切都无不体现出福?/span>S-MAX是一部魅力四、活力迸发的汽R?/span>
q忧郁什么呢q么好的车,q么好这么难得的ZN不心动么Q赶快去参加自驾游活动吧Q这ơ试驾活动在3月底?/span>4月中旬D行,现在正是报名旉哦我已经报名了!而且更惊喜的是还有机会获得v外旅游大奖啊Q我最大的希望是能够有一天带着我的爸爸妈妈出去交游一天,q么好的Z我是l对不能错过了!
tag:特QS-MAXQSAVQFORDQ长安福特,公务Q商务,安全Q中URQ高URQ私家R