小黑J2EE學習ing
我很會努力
BlogJava
首頁
新隨筆
聯系
聚合
管理
隨筆-21 評論-29 文章-0 trackbacks-0
小黑Hibernate學習(五)
以上實例有一個限制,即查詢對象只能根據id值來查詢。
我們可以通過完善HibernateUtil來實現更多更能。
package
cn.itcast.hibernate;
import
java.io.Serializable;
import
org.hibernate.HibernateException;
import
org.hibernate.Session;
import
org.hibernate.SessionFactory;
import
org.hibernate.Transaction;
import
org.hibernate.cfg.Configuration;
public
final
class
HibernateUtil
{
private
static
SessionFactory sessionFactory ;
private
HibernateUtil()
{}
static
{
Configuration cfg
=
new
Configuration() ;
cfg.configure();
sessionFactory
=
cfg.buildSessionFactory();
}
public
static
SessionFactory getSessionFactory()
{
return
sessionFactory;
}
public
static
Session getSession()
{
return
sessionFactory.openSession();
}
public
static
void
add(Object entity)
{
Session s
=
null
;
Transaction tx
=
null
;
try
{
s
=
HibernateUtil.getSession();
tx
=
s.beginTransaction();
s.save(entity);
tx.commit();
}
finally
{
if
(s
!=
null
)
s.close();
}
}
public
static
void
update(Object entity)
{
Session s
=
null
;
Transaction tx
=
null
;
try
{
s
=
HibernateUtil.getSession();
tx
=
s.beginTransaction();
s.update(entity);
tx.commit();
}
finally
{
if
(s
!=
null
)
s.close();
}
}
public
static
void
delete(Object entity)
{
Session s
=
null
;
Transaction tx
=
null
;
try
{
s
=
HibernateUtil.getSession();
tx
=
s.beginTransaction();
s.delete(entity);
tx.commit();
}
finally
{
if
(s
!=
null
)
s.close();
}
}
public
static
Object get(Class clazz,Serializable id)
{
Session s
=
null
;
try
{
s
=
HibernateUtil.getSession();
Object obj
=
s.get(clazz, id);
return
obj ;
}
finally
{
if
(s
!=
null
)
s.close();
}
}
}
以上代碼就能實現常用的增、刪、改以及根據id查詢的功能了!
HQL(Hibernate Query Language)
面向對象的查詢語言,與SQL不同,HQL中的對象名是區分大小寫的(除了JAVA類和屬性其他部分不區分大小寫);HQL中查的是對象而不是表,并且支持多態;
HQL主要通過Query接口來操作,Query的創建方式:
Query q = session.createQuery(hql);
from Person
from User user where user.name =: name
from User user where user.name =: name and user.birthday<:birthday
Criteria
Criteria是一種比HQL更面向對象的查詢方式。Criteria的創建方式:
Criteria crit = session.createCriteria(DomainClass.class);
簡單屬性條件如: criteria.add(Restrictions.eq(propertyName,value));
criteria.add(Restrictions.eqProperty(propertyName,otherPropertyName));
實例操作
新建一QueryTest類
package
cn.itcast.hibernate;
import
java.util.Date;
import
java.util.List;
import
org.hibernate.Query;
import
org.hibernate.Session;
import
cn.itcast.hibernate.domain.User;
public
class
QueryTest
{
public
static
void
main(String[] args)
{
User user
=
new
User();
user.setBirthday(
new
Date());
user.setName(
"
name
"
);
HibernateUtil.add(user);
query(user.getName());
}
static
void
query(String name)
{
Session s
=
null
;
try
{
s
=
HibernateUtil.getSession();
String hql
=
"
from User as user where user.name=?
"
;
//
from Object
Query query
=
s.createQuery(hql);
query.setString(
0
, name);
List
<
User
>
list
=
query.list();
//
list作用類似于executeQuery
//
User u = (User)query.uniqueResult();
//
當查詢結構唯一的時候可以使用
//
System.out.print(u);
for
(User user : list)
{
System.out.println(user.getName());
}
}
finally
{
if
(s
!=
null
)
s.close();
}
}
}
觀察輸出結果
Oracle中
實體類或屬性名與數據庫關鍵字沖突問題
以上是User.hbm.xml原來的代碼
<?
xml version="1.0"
?>
<!
DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<
hibernate-mapping
package
="cn.itcast.hibernate.domain"
>
<
class
name
="User"
table
="user"
>
<
id
name
="id"
>
<
generator
class
="native"
/>
</
id
>
<
property
name
="name"
column
="name"
/>
<
property
name
="birthday"
/>
</
class
>
</
hibernate-mapping
>
User類默認關聯的表名為user,但是user在oracle中是關鍵字
我們可以設置表名為tuser。
如果tuser已經存在,給表明加一對反引號,`user` 即可。不過最好還是只改表明。
如果是字段名(屬性名)和關鍵字相沖突,其處理方法也是一樣的!
HQL的命名參數
String hql
=
"
from User as user where user.name=?
"
;
//
from Object
Query query
=
s.createQuery(hql);
query.setString(
0
, name);
以上語句中,如果where后面的屬性有多個,就需要多個問號,而且在set方法里面容易犯錯,比如記錯順序等。不利于維護。
為解決這個問題,我們可以使用HQL的命名參數來解決,代碼如下:
String hql
=
"
from User as user where user.name=:name
"
;
//
from Object
Query query
=
s.createQuery(hql);
query.setString(
"
name
"
, name);
Query接口的兩個方法實現分頁查詢
query.setFirstResult(
200
);
//
從第200條記錄開始
query.setMaxResults(
10
);
//
共set 10條記錄
利用方言可以實現各個數據庫的分頁查詢。
posted on 2009-05-04 15:11
特立獨行
閱讀(308)
評論(0)
編輯
收藏
所屬分類:
Hibernate框架
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
小黑Hibernate學習(六)
小黑Hibernate學習(五)
小黑Hibernate學習(四)
小黑Hibernate學習(三) Session接口及get、load、persist方法
小黑hibernate學習(二)
小黑hibernate學習(一)
小黑J2EE學習之路 歡迎大家觀臨! 希望大家能多指教哦!
<
2025年7月
>
日
一
二
三
四
五
六
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
Hibernate框架(6)
J2EE核心技術(1)
Java 技術
Java面試題
Spring框架(5)
Struts框架(7)
數據庫
隨筆檔案
2010年6月 (2)
2009年6月 (1)
2009年5月 (17)
2009年4月 (1)
搜索
最新評論
1.?re: struts2實現文件上傳和下載[未登錄]
下載做來直接就在頁面把文件打開了。。
--小菜
2.?re: struts2實現文件上傳和下載
你這代碼量有點多,STRUTS2封裝好了,頂多15行搞定
--你這代碼量有點多
3.?re: struts2實現文件上傳和下載
怎么將上傳的東西在頁面上顯示出來啊
--邊城
4.?re: struts2實現文件上傳和下載
配置的文件 有關鍵字, 把action 中的name 換下就可以了 @陳
--采用
5.?re: struts2實現文件上傳和下載
大俠 ……怎么實現點一個文件下載一個文件,而不是固定的文件?
--pppppppppp
閱讀排行榜
1.?struts2實現文件上傳和下載(17534)
2.?小黑struts學習(五) Action Mapping、ActionForward和ActionForm組件學習(1640)
3.?小黑Hibernate學習(三) Session接口及get、load、persist方法(1012)
4.?ASSH框架的技術基礎和設計(771)
5.?Spring 框架的設計理念與設計模式分析(664)
評論排行榜
1.?struts2實現文件上傳和下載(27)
2.?Spring 框架的設計理念與設計模式分析(1)
3.?很開心加入BlogJava 就像找到了組織一樣(1)
4.?Spring 框架的設計理念與設計模式分析(2)(0)
5.?JFreeChart的中文亂碼問題 知道的幫忙解決一下(0)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 特立獨行
主站蜘蛛池模板:
亚洲一日韩欧美中文字幕在线
|
亚洲狠狠久久综合一区77777
|
亚洲一区二区三区无码国产
|
99视频免费观看
|
久久久综合亚洲色一区二区三区
|
一级毛片在线免费看
|
久久91亚洲人成电影网站
|
九九99热免费最新版
|
亚洲人JIZZ日本人
|
青青草原1769久久免费播放
|
亚洲av无码专区在线播放
|
免费视频成人片在线观看
|
亚洲综合久久久久久中文字幕
|
亚洲国产精品免费在线观看
|
亚洲精品中文字幕无码AV
|
91免费资源网站入口
|
亚洲成a人无码亚洲成www牛牛
|
免费一级国产生活片
|
成人A毛片免费观看网站
|
亚洲av午夜成人片精品网站
|
亚洲免费视频播放
|
亚洲日韩精品无码专区加勒比
|
国产日韩在线视频免费播放
|
丝袜熟女国偷自产中文字幕亚洲
|
免费网站观看WWW在线观看
|
在线电影你懂的亚洲
|
好吊妞在线新免费视频
|
一级做a爰黑人又硬又粗免费看51社区国产精品视
|
国产伦精品一区二区三区免费下载
|
两个人看的www免费
|
亚洲激情在线观看
|
免费国产黄线在线观看
|
一级毛片a免费播放王色电影
|
美国毛片亚洲社区在线观看
|
最新亚洲成av人免费看
|
亚洲视频免费观看
|
污视频网站在线免费看
|
亚洲色图国产精品
|
亚洲AⅤ视频一区二区三区
|
一级毛片视频免费
|
亚洲人成黄网在线观看
|