小黑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
特立獨行
閱讀(299)
評論(0)
編輯
收藏
所屬分類:
Hibernate框架
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
小黑Hibernate學習(六)
小黑Hibernate學習(五)
小黑Hibernate學習(四)
小黑Hibernate學習(三) Session接口及get、load、persist方法
小黑hibernate學習(二)
小黑hibernate學習(一)
小黑J2EE學習之路 歡迎大家觀臨! 希望大家能多指教哦!
<
2025年5月
>
日
一
二
三
四
五
六
27
28
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
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(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實現文件上傳和下載(17518)
2.?小黑struts學習(五) Action Mapping、ActionForward和ActionForm組件學習(1626)
3.?小黑Hibernate學習(三) Session接口及get、load、persist方法(1005)
4.?ASSH框架的技術基礎和設計(761)
5.?Spring 框架的設計理念與設計模式分析(654)
評論排行榜
1.?struts2實現文件上傳和下載(27)
2.?Spring 框架的設計理念與設計模式分析(1)
3.?很開心加入BlogJava 就像找到了組織一樣(1)
4.?Spring 框架的設計理念與設計模式分析(2)(0)
5.?JFreeChart的中文亂碼問題 知道的幫忙解決一下(0)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 特立獨行
主站蜘蛛池模板:
亚洲av纯肉无码精品动漫
|
亚洲制服中文字幕第一区
|
亚洲欧美熟妇综合久久久久
|
亚洲视频在线免费播放
|
久久亚洲精品中文字幕无码
|
嫩草成人永久免费观看
|
亚洲欧洲国产精品你懂的
|
久久精品中文字幕免费
|
亚洲校园春色小说
|
日韩欧毛片免费视频
|
亚洲日韩AV无码一区二区三区人
|
国产视频精品免费视频
|
国产中文在线亚洲精品官网
|
中文字幕在线视频免费观看
|
国产偷国产偷亚洲清高动态图
|
中国videos性高清免费
|
亚洲AV无码国产精品麻豆天美
|
久久w5ww成w人免费
|
亚洲欧洲日产国码二区首页
|
思思99re66在线精品免费观看
|
亚洲JIZZJIZZ妇女
|
亚洲国产精品自产在线播放
|
精品免费视在线观看
|
亚洲午夜精品一区二区公牛电影院
|
国产99视频精品免费观看7
|
亚洲狠狠婷婷综合久久蜜芽
|
亚洲欧洲久久av
|
人人玩人人添人人澡免费
|
亚洲国产日韩在线成人蜜芽
|
免费的一级片网站
|
国产高潮久久免费观看
|
久久久久亚洲精品日久生情
|
免费无码又爽又刺激毛片
|
a级毛片免费观看在线
|
亚洲色偷偷偷网站色偷一区
|
日本免费中文字幕在线看
|
韩国免费A级毛片久久
|
亚洲人成日本在线观看
|
国产日产亚洲系列最新
|
jjizz全部免费看片
|
AV激情亚洲男人的天堂国语
|