小黑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无码一区二区乱子伦as
|
精品熟女少妇aⅴ免费久久
|
亚洲开心婷婷中文字幕
|
久草免费福利在线
|
国产亚洲精品一品区99热
|
国产成人精品无码免费看
|
亚洲自偷自拍另类12p
|
日本黄网站动漫视频免费
|
亚洲综合色丁香婷婷六月图片
|
亚洲AV本道一区二区三区四区
|
最近中文字幕完整版免费高清
|
亚洲一级高清在线中文字幕
|
国内自产少妇自拍区免费
|
香蕉视频在线观看免费
|
亚洲日本va中文字幕久久
|
99国产精品视频免费观看
|
亚洲婷婷第一狠人综合精品
|
国产一区视频在线免费观看
|
国产99精品一区二区三区免费
|
亚洲色图国产精品
|
色吊丝最新永久免费观看网站
|
免费一级毛片在线播放放视频
|
亚洲第一区香蕉_国产a
|
成人免费视频软件网站
|
巨胸喷奶水www永久免费
|
亚洲欧洲在线播放
|
国产一区二区视频免费
|
最近免费mv在线观看动漫
|
亚洲国产成人99精品激情在线
|
亚洲国产黄在线观看
|
免费无遮挡无码永久视频
|
亚洲人成在线播放
|
av在线亚洲欧洲日产一区二区
|
久久ww精品w免费人成
|