利用Javascript取和设FCKeditorg是非常容易的Q如下:
// 获取~辑器中HTML内容
function getEditorHTMLContents(EditorName) {
var oEditor = FCKeditorAPI.GetInstance(EditorName);
return(oEditor.GetXHTML(true));
}
// 获取~辑器中文字内容
function getEditorTextContents(EditorName) {
var oEditor = FCKeditorAPI.GetInstance(EditorName);
return(oEditor.EditorDocument.body.innerText);
}
// 讄~辑器中内容
function SetEditorContents(EditorName, ContentStr) {
var oEditor = FCKeditorAPI.GetInstance(EditorName) ;
oEditor.SetHTML(ContentStr) ;
}
FCKeditorAPI是FCKeditor加蝲后注册的一个全局对象Q利用它我们可以完成对~辑器的各种操作?/font>
在当前页获得 FCK ~辑器实例:
var Editor = FCKeditorAPI.GetInstance('InstanceName');
?FCK ~辑器的弹出H口中获?FCK ~辑器实例:
var Editor = window.parent.InnerDialogLoaded().FCK;
从框枉面的子框架中获得其它子框架的 FCK ~辑器实例:
var Editor = window.FrameName.FCKeditorAPI.GetInstance('InstanceName');
从页面弹出窗口中获得父窗口的 FCK ~辑器实例:
var Editor = opener.FCKeditorAPI.GetInstance('InstanceName');
获得 FCK ~辑器的内容Q?br />
oEditor.GetXHTML(formatted); // formatted 为:true|falseQ表C是否按HTML格式取出
也可用:
oEditor.GetXHTML();
讄 FCK ~辑器的内容Q?br /> oEditor.SetHTML("content", false); // W二个参CؓQtrue|falseQ是否以所见即所得方式设|其内容。此Ҏ常用?讄初始??表单重置"哦作?/font>
插入内容?FCK ~辑器:
oEditor.InsertHtml("html"); // "html"为HTML文本
?FCK ~辑器内Ҏ否发生变化:
oEditor.IsDirty();
?FCK ~辑器之外调?FCK ~辑器工h命oQ?br /> 命o列表如下Q?br /> DocProps, Templates, Link, Unlink, Anchor, BulletedList, NumberedList, About, Find, Replace, Image, Flash, SpecialChar, Smiley, Table, TableProp, TableCellProp, UniversalKey, Style, FontName, FontSize, FontFormat, Source, Preview, Save, NewPage, PageBreak, TextColor, BGColor, PasteText, PasteWord, TableInsertRow, TableDeleteRows, TableInsertColumn, TableDeleteColumns, TableInsertCell, TableDeleteCells, TableMergeCells, TableSplitCell, TableDelete, Form, Checkbox, Radio, TextField, Textarea, HiddenField, Button, Select, ImageButton, SpellCheck, FitWindow, Undo, Redo
使用Ҏ如下Q?br /> oEditor.Commands.GetCommand('FitWindow').Execute();
= FCKConfig.BasePath + 'plugins/'
// FCKConfig.Plugins.Add( 'placeholder', 'en,it' ) ;
L//后,q当于把placeholderq个插g功能加上了,fckeditor的插件文仉?editor/plugins/文g夹下分类按文件夹攄的,对于fckeditor2.0来说Q里面有两个文g夹,也就是有两个官方插gQplaceholderq个文g夹就是我们刚才加上去的,主要用于多参数或单参数自定义标签的匹配,q个在制作编辑模板时非常用Q要想看具体实例的话Q大家可以去下蝲acms q个pȝ查看学习Q另一个文件夹tablecommands是~辑器里的表格编辑用到的了。当Ӟ如果你想制作自己其它用途的插gQ那只要按?fckeidtor插g的制作规则制作完攄?editor/plugins/下就行,然后再在fckeidtor.js里再d FCKConfig.Plugins.Add('Plugin Name',',lang,lang');可以了?/p>
W二部分 Q如何让~辑器一打开的时候,~辑工具条不出现Q等?#8220;展开工具?#8221;时才出现QEasyQFCKeditor本n提供了这个功能啦Q打开fckconfig.jsQ找?/p>
FCKConfig.ToolbarStartExpanded = true ;
Ҏ
FCKConfig.ToolbarStartExpanded = false ;
可以啦Q?/p>
W三部分Q用自q表情图标Q同h开fckcofnig.js到最底部那一D?/p>
FCKConfig.SmileyPath = FCKConfig.BasePath + 'images/smiley/msn/' ;
FCKConfig.SmileyImages = ['regular_smile.gif','sad_smile.gif','wink_smile.gif'] ;
FCKConfig.SmileyColumns = 8 ;
FCKConfig.SmileyWindowWidth = 320 ;
FCKConfig.SmileyWindowHeight = 240 ;
上面q段已经是我修改q的了,Z我发表此文的版面不会被撑得太开Q我把FCKConfig.SmileyImages那一行改得只有三个表情图了?/p>
W一行,当然是表情图标\径的讄Q第二行是相兌情图标文件名的一个ListQ第三行是指弹出的表情添加窗口最每行的表情数Q下面两个参数是弹出的模态窗口的宽和高喽?/p>
W四部分Q文件上传管理部?/p>
此部分可能是大家最为关心的Q上一文章简单的讲了如何修改来上传文件以及用fckeidtor2.0才提供的快速上传功能。再我们l箋再深层次的讲解上传功?/p>
FCKConfig.LinkBrowser = true ;
FCKConfig.ImageBrowser = true ;
FCKConfig.FlashBrowser = true ;在fckconfig.js扑ֈq三句,q三句不是连着的哦Q只是我把他们集中到q儿来了Q设|ؓtrue的意思就是允怋用fckeditor来浏览服务器端的文g囑փ以及flash{,q个功能是你插入囄时弹出的H口上那?#8220;览服务?#8221;按钮可以体现出来Q如果你的编辑器只用来自q或是只在后台理用,q个功能无疑很好用,因ؓ他让你很直观地对服务器的文gq行上传操作。但是如果你的系l要面向前台用户或是像blogq样的系l要用的话,q个安全隐患可就大了哦。于是我们把其一律设|ؓfalse;如下
FCKConfig.LinkBrowser = false ;
FCKConfig.ImageBrowser = false ;
FCKConfig.FlashBrowser = false ;
q样一来,我们只有快速上传可用了啊,好!接下来就来修改,同样以asp例进行,q入/editor/filemanager/upload/asp/打开config.aspQ修?br /> ConfigUserFilesPath = "/UserFiles/"q个讄是上传文件的ȝ录,我这里就不动了,你想改自己改?/p>
好,再打开此目录下的upload.asp文gQ找C面这一D?/p>
Dim resourceType
If ( Request.QueryString("Type")
<>"" ) Then
resourceType = Request.QueryString("Type")
Else
resourceType = "File"
End If
然后再在其后面添?/p>
ConfigUserFilesPath = ConfigUserFilesPath & resourceType &"/"& Year(Date()) &"/"& Month(Date()) &"/"
q样的话Q上传的文gp?#8220;/userfiles/文gcdQ如image或file或flash)/q??”q样的文件夹下了Q这个设|对单用h用已l够了Q如果你想给多用Ll用Q那ph?/p>
ConfigUserFilesPath = ConfigUserFilesPath & Session("username") & resourceType &"/"& Year(Date()) &"/"& Month(Date()) &"/"
q样上传的文件就q入“/userfiles/用户目录/文gcd/q??”下了Q当然如果你不想q么安排也可以修Ҏ别的Q比如说用户目录再深一层等Q这里的Session("username")h据自q需要进行修Ҏ换掉?/p>
上传的目录设|完了,但是上传E序q不会自己创些文件夹Q如果不存在的话Q上传不会成功的Q那么我们就得根据上面的上传路径的要求进行递归来生成目录了?/p>
扑ֈq一D?/p>
Dim sServerDir
sServerDir = Server.MapPath( ConfigUserFilesPath )
If ( Right( sServerDir, 1 )
<>"\" ) Then
sServerDir = sServerDir & "\"
End If
把它下面的这两行
Dim oFSO
Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
用下面这一D代码来替换
dim arrPath,strTmpPath,intRow
strTmpPath = ""
arrPath = Split(sServerDir, "\")
Dim oFSO
Set oFSO = Server.CreateObject( "Scripting.FileSystemObject" )
for intRow = 0 to Ubound(arrPath)
strTmpPath = strTmpPath & arrPath(intRow) & "\"
if oFSO.folderExists(strTmpPath)=false then
oFSO.CreateFolder(strTmpPath)
end if
next
用这D代码就可以生成你想要的文g夹了Q在上传的时候自动生成?/p>
好了Q上传文件的修改到现在可以暂时告一D落了,但是Q对于中文用戯存在q么个问题,是fckeditor的文件上传默认是不改名的Q同时还不支持中文文件名Q这样一来是上传的文件会变成“.jpg”q样的无法读的文Ӟ再就是会有重名文Ӟ当然重名q点倒没什么,因ؓfckeditor会自动改名,会在文g名后加(1Q这hq行标识。但是,我们通常的习惯是让程序自动生成不重复的文件名
在刚才那一D代码的下面紧接着是
' Get the uploaded file name.
sFileName = oUploader.File( "NewFile" ).Name
看清楚了Q这个就是文件名啦,我们来把它改掉,当然得有个生成文件名的函数才行,Ҏ下面q样
'//取得一个不重复的序?br />
Public Function GetNewID()
dim ranNum
dim dtNow
randomize
dtNow=Now()
ranNum=int(90000*rnd)+10000
GetNewID=year(dtNow) & right("0" & month(dtNow),2) & right("0" & day(dtNow),2) & right("0" & hour(dtNow),2) & right("0" & minute(dtNow),2) & right("0" & second(dtNow),2) & ranNum
End Function
' Get the uploaded file name.
sFileName = GetNewID() &"."& split(oUploader.File( "NewFile" ).Name,".")(1)
q样一来,上传的文件就自动改名生成?0050802122536365.jpgq样的文件名了,是由q月日时分秒以及三位随机数组成的文g名了
利用Javascript取和设FCKeditorg是非常容易的Q如下:
// 获取~辑器中HTML内容
function getEditorHTMLContents(EditorName) {
var oEditor = FCKeditorAPI.GetInstance(EditorName);
return(oEditor.GetXHTML(true));
}
// 获取~辑器中文字内容
function getEditorTextContents(EditorName) {
var oEditor = FCKeditorAPI.GetInstance(EditorName);
return(oEditor.EditorDocument.body.innerText);
}
// 讄~辑器中内容
function SetEditorContents(EditorName, ContentStr) {
var oEditor = FCKeditorAPI.GetInstance(EditorName) ;
oEditor.SetHTML(ContentStr) ;
}
FCKeditorAPI是FCKeditor加蝲后注册的一个全局对象Q利用它我们可以完成对~辑器的各种操作?/p>
在当前页获得 FCK ~辑器实例:
var Editor = FCKeditorAPI.GetInstance('InstanceName');
?FCK ~辑器的弹出H口中获?FCK ~辑器实例:
var Editor = window.parent.InnerDialogLoaded().FCK;
从框枉面的子框架中获得其它子框架的 FCK ~辑器实例:
var Editor = window.FrameName.FCKeditorAPI.GetInstance('InstanceName');
从页面弹出窗口中获得父窗口的 FCK ~辑器实例:
var Editor = opener.FCKeditorAPI.GetInstance('InstanceName');
获得 FCK ~辑器的内容Q?br />
oEditor.GetXHTML(formatted); // formatted 为:true|falseQ表C是否按HTML格式取出
也可用:
oEditor.GetXHTML();
讄 FCK ~辑器的内容Q?br /> oEditor.SetHTML("content", false); // W二个参CؓQtrue|falseQ是否以所见即所得方式设|其内容。此Ҏ常用?讄初始??表单重置"哦作?/p>
插入内容?FCK ~辑器:
oEditor.InsertHtml("html"); // "html"为HTML文本
?FCK ~辑器内Ҏ否发生变化:
oEditor.IsDirty();
?FCK ~辑器之外调?FCK ~辑器工h命oQ?br /> 命o列表如下Q?br /> DocProps, Templates, Link, Unlink, Anchor, BulletedList, NumberedList, About, Find, Replace, Image, Flash, SpecialChar, Smiley, Table, TableProp, TableCellProp, UniversalKey, Style, FontName, FontSize, FontFormat, Source, Preview, Save, NewPage, PageBreak, TextColor, BGColor, PasteText, PasteWord, TableInsertRow, TableDeleteRows, TableInsertColumn, TableDeleteColumns, TableInsertCell, TableDeleteCells, TableMergeCells, TableSplitCell, TableDelete, Form, Checkbox, Radio, TextField, Textarea, HiddenField, Button, Select, ImageButton, SpellCheck, FitWindow, Undo, Redo
使用Ҏ如下Q?br /> oEditor.Commands.GetCommand('FitWindow').Execute();
关于Hibernate?cascade ? inverse 的理解?/span>
您买的Hibernate书是哪一本呢Q? 孙卫琴的_NHibernateQ还? 深入出Hibernateq是那本。。?br /> 我是两本都买了,M来说q可以,但是Q有的地方讲的比较书面化Q比如inverseq属性?/span>
在学习Hibernate的过E中最不好理解的就是这两个属性了?br /> (我当初学习Hibernate的时候,发现|上介绍q两个属性的文章倒是不少Q但是,居然有好多都是{帖。。。还有的是 照书搬~~-_-!!!)。。?/span>
据个例子Q书上说inverse=falseӞ׃控方l持关系。。?br /> ׃我也是初学者。。。再加上语文水^偏低。。。不理解“l持关系是啥意?#8221;囧~
提示Q?br /> (1)如果Q您不了解Hibernate的one-to-many或many-to-one的概c?/span>
(2)如果Q你不了解Hibernate?#8220;自由?#8221;“持久?#8221;“游离?#8221;的概c?/span>
(3)如果Q您不了解Hibernate中的“脏数?#8221;的概c?/span>
(4)如果Q您对Hibernate中Session~存Q没有初步了解的话?br /> (在Hibernate中调用saveq行存储数据的时?q不是马上就Ҏ据库q行insert操作Q而是会将?#8220;数据对象(vo)”U_Hibernate的Session~存?
在上面的4条提CZQ如果您对其中的某一条,不是很清楚的话。希望请先了解有关知识?br /> 否则Q可能您? “无法或很?#8221;理解 cascade ?inverse q?个属性?/span>
首相Qcascade ?inverse q两个属性,其实是完全不同的两个东西Q想要了解他们各自的“用途与区别”Q详见如下介l:
q里有两个表:
Q?Qclass
(班?
相应字段Q?br />
cid varchar(32) 主键 not-null (班id)
cname
varchar(16) not-null (班名称)
Q?Qstudent (学生?
相应字段Q?br />
sid
varchar(32) 主键 not-null (学生id)
sname varchar(16) not-null
(学生姓名)
class_id varchar(32) not-null
(学生所属班U?
一个班U?class)对应多个学生(student)Q所以班U表(class)是“one-to-many”?br /> 反之student是many-to-one
//--------Classcȝ代码--------
public class Class
implements.....
{
private cId = "";
private cName = "";
private
students = java.util.HashMap();
// 省略对应?geter
setter
}
//--------Class.hbm.xml--------
<hibernate-mapping>
<class
name="lcx.vo.Class" table="class"
catalog="demo">
<id
name="cid" type="java.lang.String">
<column name="cid" length="32"
/>
<generator class="uuid.hex" />
</id>
<property name="name" type="java.lang.String">
<column
name="cname" length="16" not-null="true" />
</property>
<set name="students" table="student"
cascade="save-update">
<key column="class" />
<one-to-many class="lcx.vo.Student" />
</set>
</class>
</hibernate-mapping>
//--------Studentcȝ代码;*******
public class Student
implements.....
{
private sId = "";
private sName = "";
private
Class class = null;
// 省略对应?geter setter
}
//
Student.hbm.xml
<hibernate-mapping>
<class name="lcx.vo.Student"
table="student" catalog="demo">
<id name="cid"
type="java.lang.String">
<column name="sid" length="32"
/>
<generator class="uuid.hex" />
</id>
<many-to-one name="class"
class="lcx.vo.Class"
column="class_id"
not-null="true"
/>
</class>
</hibernate-mapping>
Q一Q?cascade
的介l:
当Hibernate持久化一?#8220;临时对象(也叫自由态对?”Ӟ在默认的情况?卻I没有讄cascade属性或cascade=none?QHibernate不会自动“持久化他所兌”的其他时对象?/span>
上面q些话是什么意思呢Q?什么叫不会自动 “持久?#8221;兌的时对象呢Q?/span>
看如下代码:
// 创徏一?临时对象(也叫自由态对?
// 也就是说q个 class 没有被HibernateU_Session~存理?br />
Class class = new
Class();
//class.id
动生?br />
class.setName("一q1?);
Student stu = new
Student();
//student.id
动生?br />
stu.setName("白?);
stu.setClass(class);
// 关键是q里。。?br /> class.getStudents().add(stu);
session.save(class);
//
提交
// 注意:
Class.hbm.xml文g?cascade="save-update"q且也没有设|inverse属?也就是说inverse=false;
//
此时如果你开启了Hibernate的显CHQL语句功能Q那么控制台会昄如下3条HQLQ?/span>
//----------------------------------------********
insert
into demo.class (cid, cname) values (66666666666666666666666666666666,
一q1?
insert into demo.student (sid,sname,class_id) values
(8888888888888888811cb2e04c888888, 白?
66666666666666666666666666666666)
update demo.student set
class_id=66666666666666666666666666666666 where
sid=8888888888888888811cb2e04c888888
//----------------------------------------********
那么Z么会出现Q这3条HQL语句呢,我们来一一分析一下:
W?条HQL语句:
其实W一条HQL比较好理解,
当我们调?session.save(class)
后,在Hibernateq行提交的时候,
会发?#8220;?#8221;一?#8220;?#8221;的数据要插入(insert)Q所以就往class表中,插入了这条新的class记录?/span>
W?条HQL语句Q?br /> 注意问题在q里Q?br /> q里Z么又出现了一条insert语句呢?而且q是向student表中插入数据?br /> 我们在上面的代码中,q没有编写类?#8220;session.save(student)”q样的语句啊?br /> q是Z么呢Q?br /> 其实原因Q是q么回事Q因为我们在class端,讄?U联更新"(?cascade="save-update")Q?br /> 也就是说Q当Hibernate在向class表中插入“?#8221;对象记录Ӟ会检?#8220;Class对象”所兌的属?是<set>对应的属?Q是否发生过变化Q如果发生了变化Q就按照“U联属?cascade)”所讑֮的内?br /> q行操作?/span>
上面讲的q句话到底是什么意思呢Q?br />
用你?#8220;?#8221;话说Q就是:
因ؓ调用?
class.getStudents().add(stu);
所以,在Hibernate在进行插?
class对象的时候,发现class对象Q所兌的集合中Q有一?br />
“自由?#8221;的对象,而又因ؓclass端设|了“U联属性cascade”Q所以,在插入这?
“新class对象”Ӟ也一同把他内部的那些Q还属于“自由?#8221;的其他对象,也一同插入到Q他们所对应的表中去了?/span>
q是不明白的话。。。可以看看。孙卫琴的《精通Hibernate》,在书上的W?49|?br /> 但是关于inverse的介l。。。写的就有些书面化了Q如果语文不好的话。。。就难懂咯~
W?条HQL语句Q?br />
W三条HQL语句是一条update语句Q是不是觉得Q很莫名其妙。。。?br />
Hibernate大脑q水了吧Q怎么吃饱了撑得,重复更新记录啊啊啊啊?br />
假如Q我们把
class端的配置文档中的
invser属性设|ؓtrue(卻Iinverse=true)
在执行上面的E序Q发玎ͼ变?条insert语句啦。。。。?update没啦。。?
看来W三条的update语句和inverse有着密切的关p(他两有一腿~Q?/span>
所以我们下边,来介绍一下inverse属?
当调?
Class.getStudents().add(stu)ҎQ进行添加操作时Q?
(卻I?"q个Class对象"所属的“集合
(也就是调用getStudentsҎ所q回的那个Set集合)”中添加一个Student(?
add(stu))Q也是_q个“?#8221;d的Student对象(stu)Q?
他的Student.class_id字段“必须”Q要{于“被添加方Class”的主??Class.cid)?
?#8220;数据?#8221;层面来讲Q也是_q个“?#8221;d?#8220;Student”的class_id字段Q必要?#8220;Class”的cid字段Q存?d键关??
正因为如此:所以Hibernate“?#8221; 在进?
"Class.getStudents().add(stu)" q样的操作时Q?
出现意外情况(?
stu.getClass=nullQ即Qstu没有所属班U?Q?br />
?#8220;d?#8221;(Student)?#8220;被添加方”(Class)Q存?#8220;外键”不一致的情况发生?
所以就出现?那条多余的update语句。即Qone-to-manyQClass端)dȝ护Child.Class_id
所以就是说QHibernate怕出错,q你多执行一ơ无用的更新语句Q以保证 add ?
Class“集合”中的所有Student
都是要与Class有外键关联的?/span>
用普通话说就?
一q??getStudents().add(白?;
一q??getStudents().add(大白?;
也就是说现在不管?白?q是 大白?
如果他们Q目前还没有自己的班U的话,
一q?班的班主d会主动邀请他们成Zq?班的同学啦~?/span>
也就是说 一q?班的班主?d邀?同学Q而不? 同学自己来~~~ 所以效率也降低了。。。?/span>
所以我们一般把 一对多?
invser讄为trueQ即Q不让主控端ȝ护主键关联,
Q即Q让同学自己L班Q?br />
说白了,是Qone-to-many端不用去理
“新添加对?#8221; 的主外键U束问题?/span>
把one-to-many端(?class?的invser讄为true
(卻I每次向class.getStudentsq个集合中添?
studentӞ不去dupdate对应的外?Q?br />
而是在student端去手动讄
例如Q?br />
student.setClass(class);
session.save(student);
q样手动讄
student与class兌啦。。。?br />
所以上面的E序“最?#8221;q是写成q样Q?/span>
Class class = new
Class();
class.setName("一q1?);
session.save(class);
Student stu = new
Student();
stu.setName("白?);
stu.setClass(class);
session.save(class);
/*
此时向class集合add内容Q不会进行数据库操作(update)?br />
“更新”的只是session~存中,数据镜像?br />
q样做的好处是:不仅减少了update语句Q?br />
而且Q同时也更新了session~存?br />
------------------------
而在原来:
one-to-many端inverse=falseӞ虽然也更新seesion~存中的class集合Q?br />
但是有却又多余update
*/
class.getStudents().add(stu);
//
提交
ȝ:
当inverse=false
q且向one-to-many端的兌集合Q添?#8220;新对?? 自由态对?” Ӟ
Hibernate׃自动Q去update?#8220;个刚刚到来的”
“自由态对?#8221;的外键?br />
Q如果你向,one-to-many端添的集合中Qadd一?#8220;已经持久化了的对?#8221;Q那׃会出现update?因ؓ已经持久化过?Q除非,你去
更改“那个持久化对?#8221;所对应的外键。。。那L话。。。呵呵呵~~~
你可以试一试,应该不会报错Q你可以当做l习d一下,加深cascade和inverseq两个属性的理解Q?/span>
//
如果看懂了上面的内容。来看一下,下面的东ѝ?br />
假如Q将one-to-many??Class??hbm.xml 文档中的cascadeU除?
或把cascade="none"?br />
那么上面的代码会出现什么情况呢?br />
l果会出?条HQLQ和一堆Exception
insert into demo.class
(cid, cname) values (66666666666666666666666666666666, 一q1?
update
demo.student set class_id=66666666666666666666666666666666 where
sid=8888888888888888811cb2e04c888888
Hibernate
Exceptinon......................................
相比较cascade被设|?save-update"的时候,~少?? insert语句Q而且也多了一些Exception?/span>
那么Q到底是了?条insert语句呢?
是q条Q?br />
insert into
demo.student (sid,sname,class_id) values (8888888888888888811cb2e04c888888, 白?
66666666666666666666666666666666)
之所以会出现Q这L现象Q想必您已经早就看出来了?br /> 因ؓQ我没有讄Class端的CascadeQ所以在save(class)的时候,q没有自动将其所兌?#8220;自由态对?#8221;q行持久化操作?br /> 然而,又因? Class端的inverse=falseQ所以,Class会自动去l持Q那?“新来的student” 的外键?br /> 所以会出现Q没有insertpupdate啦。。。?br /> 然后在就是Exception?/span>
q有另外一个相关的细节应注意Q?br />
比如有这样一个po
PO: User.class
properties: userId,userName
DDL: create table tuser (userid varchar(10),username varchar(20));
当执行:
session.createQuery("from User u").list()时生成的SQLQ?br />
select userid,username from tuser;
当执行:
session.createQuery("from User u").iterator()时生成的SQLQ?br />
select userid from tuser;
可以看出list()一ơ将数据从数据库中读出直接填充到List?br />
iterator()数据的主键从数据库中读出,当@环这个Iterator时才d执行Q?br />
select userid,username from user where userid=?;把数据读出?br />
在不同的应用范围使用不同的方法,具体在hibernate应用中应当注意?/p>
另外涉及到hibernate 的一U缓?二~存 以后再研I?/font>