黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Hibernate查詢的幾種方式

Hibernate查詢的幾種方式

更新時間:2022-02-11 10:32:34 來源:動力節點 瀏覽753次

1.HQL查詢

• HQL(Hibernate Query Language)提供了豐富靈活的查詢方式,使用HQL進行查詢也是Hibernate官方推薦使用的查詢方式。

• HQL在語法結構上和SQL語句十分的相同,所以可以很快的上手進行使用。使用HQL需要用到Hibernate中的Query對象,該對象專門執行HQL方式的操作。

查詢所有示例

session.beginTransaction();
String hql = "from User"; // from 后跟的是要查詢的對象,而不是表
Query query = session.createQuery(hql);
List<User> userList = query.list();
for(User user:userList){
System.out.println(user.getUserName());
}
session.getTransaction().commit();

帶where的查詢示例

session.beginTransaction();
String hql = "from User where userName = 'James'";
Query query = session.createQuery(hql);
List<User> userList = query.list();
for(User user:userList){
System.out.println(user.getUserName());
}
session.getTransaction().commit();
/*
在HQL中where語句中使用的是持久化對象的屬性名,如上面示例中的userName。當然在HQL中也可以使用別名
*/
String hql = "from User as u where u.userName = 'James'";
/*
過濾條件
在where語句中還可以使用各種過濾條件,如:=、<>、<、>、>=、<=、between、not between、
in、not in、is、like、and、or等
*/

獲取一個不完整的對象


session.beginTransaction();
String hql = "select userName from User";
Query query = session.createQuery(hql);
List<Object> nameList = query.list();
for(Object obj:nameList){
   String name=(String)obj;
   System.out.println(name);
}
session.getTransaction().commit();
// 多個屬性的話,需要用object[]接收
session.beginTransaction();
String hql = "select userName,userPwd from User";
Query query = session.createQuery(hql);
List nameList = query.list();
for(Object obj:nameList){
Object[] array = (Object[]) obj; // 轉成object[]
System.out.println("name:" + array[0]);
System.out.println("pwd:" + array[1]);
}
session.getTransaction().commit();

統計和分組查詢

session.beginTransaction();
String hql = "select count(*),max(id) from User";
Query query = session.createQuery(hql);
List nameList = query.list();
for(Object obj:nameList){
Object[] array = (Object[]) obj;
System.out.println("count:" + array[0]);
System.out.println("max:" + array[1]);
}
session.getTransaction().commit();
/*
該條sql語句返回的是單條數據,所以還可以這樣寫
單列數據用Object,多列數據用Object[]
*/
Object[] object = (Object[]) query.uniqueResult();
System.out.println("count:" + object[0]);
System.out.println("max:" + object[1]);

更多寫法

select distinct name from Student;
select max(age) from Student;
select count(age),age from Student group by age;
from Student order by age;

HQL占位符

session.beginTransaction();
String hql = "from User where userName = ?";
Query query = session.createQuery(hql);
// 索引從0開始
query.setString(0, "James");
List<User> userList = query.list();
for(User user:userList){
System.out.println(user.getUserName());
}
session.getTransaction().commit();

HQL引用占位符

session.beginTransaction();
String hql = "from User where userName = :name";
Query query = session.createQuery(hql);
query.setParameter("name", "James");
List<User> userList = query.list();
for(User user:userList){
System.out.println(user.getUserName());
}
session.getTransaction().commit();

HQL分頁

session.beginTransaction();
String hql = "from User";
Query query = session.createQuery(hql);
query.setFirstResult(0);
query.setMaxResults(2);
List<User> userList = query.list();
for(User user:userList){
System.out.println(user.getUserName());
}
session.getTransaction().commit();

2.QBC(Query By Criteria)查詢

• Criteria對象提供了一種面向對象的方式查詢數據庫。Criteria對象需要使用Session對象來獲得。

• 一個Criteria對象表示對一個持久化類的查詢。

查詢所有

session.beginTransaction();
Criteria c = session.createCriteria(User.class);
List<User> userList = c.list();
for(User user:userList){
System.out.println(user.getUserName());
}
session.getTransaction().commit();

where

session.beginTransaction();
Criteria c = session.createCriteria(User.class);
c.add(Restrictions.eq("userName", "James"));
List<User> userList = c.list();
for(User user:userList){
System.out.println(user.getUserName());
}
session.getTransaction().commit();

Restrictions對象

方法名稱 對應SQL中的表達式
----------------------------------------------------------
Restrictions.eq field = value
Restrictions.gt field > value
Restrictions.lt field < value
Restrictions.ge field >= value
Restrictions.le field <= value
Restrictions.between field between value1 and value2
Restrictions.in field in(…)
Restrictions.and and
Restrictions.or or
Restrictions.like field like value

示例

Criteria c = session.createCriteria(User.class);
c.add(Restrictions.like("userName", "J"));
c.add(Restrictions.eq("id", 120));
c.add(Restrictions.or(Restrictions.eq("userName", "James"),
Restrictions.eq("userName", "Alex")));

獲取唯一記錄

session.beginTransaction();
Criteria c = session.createCriteria(User.class);
c.add(Restrictions.eq("id", 120));
User user = (User) c.uniqueResult();
System.out.println(user.getUserName());
session.getTransaction().commit();

分頁

Criteria c = session.createCriteria(User.class);
c.setFirstResult(0);
c.setMaxResults(5);

分組與統計

session.beginTransaction();
Criteria c = session.createCriteria(User.class);
c.setProjection(Projections.sum("id"));
Object obj = c.uniqueResult();
System.out.println(obj);
session.getTransaction().commit();

Projections對象

方法名稱 描述
-------------------------------------------------------
Projections.sum 等于SQL中聚合函數sum
Projections.avg 等于SQL中聚合函數avg
Projections.count 等于SQL中聚合函數count
Projections .distinct 去除重復記錄
Projections.max 等于SQL中聚合函數max
Projections.min 等于SQL中聚合函數min
Projections .groupProperty 對指定的屬性進行分組查詢

多個統計與分組

session.beginTransaction();
Criteria c = session.createCriteria(User.class);
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.sum("id"));
projectionList.add(Projections.min("id"));
c.setProjection(projectionList);
// 和HQL一樣,單列用Object,多列用Object[]
Object[] obj = (Object[]) c.uniqueResult();
System.out.println("sum:" + obj[0]);
System.out.println("min:" + obj[1]);

排序

Criteria c = session.createCriteria(User.class);
c.addOrder(Order.desc("id"));

3.原生SQL查詢:

示例

session.beginTransaction();
String sql = "select id,username,userpwd from t_user";
List list = session.createSQLQuery(sql).list();
for(Object item : list){
Object[] rows = (Object[]) item;
System.out.println("id:" + rows[0] + "username:"
+ rows[1] + "userpwd:" + rows[2]);
}
session.getTransaction().commit();

addEntity()示例

session.beginTransaction();
String sql = "select id,username,userpwd from t_user";
// addEntity()可以告訴Hibernate你想要封裝成對象的類型,然后自動為你封裝
SQLQuery query = session.createSQLQuery(sql).addEntity(User.class);
List<User> list = query.list();
for(User user : list){
System.out.println(user.getUserName());
}
session.getTransaction().commit();

uniqueResult示例

session.beginTransaction();
String sql = "select id,username,userpwd from t_user where id = 2";
SQLQuery query = session.createSQLQuery(sql).addEntity(User.class);
User user = (User) query.uniqueResult();
System.out.println(user.getUserName());
session.getTransaction().commit();

以上就是關于“Hibernate查詢的幾種方式”的介紹,大家如果想了解更多相關知識,不妨來關注一下動力節點的Hibernate視頻教程,教程內容細致全面,通俗易懂,適合小白學習,希望對大家能夠有所幫助。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 成人免费黄色 | 日日干日日操日日射 | 成人网在线播放 | 在线免费看a爱片 | 亚洲日本久久一区二区va | 日韩精品视频免费网址 | 男女做爽爽视频免费观看 | 无遮挡污视频 | 亚洲图色视频 | 国产资源无限好片 | 色中色欧美 | 一级特黄网站 | 成人午夜免费剧场 | 色视频免费在线观看 | 中国一级毛片免费看视频 | 日本xxxxx在线观看 | 日韩精品视频观看 | 国产日产欧产精品精品推荐在线 | 男人边吃奶边爱边做视频刺激 | 老司机免费午夜精品视频 | 一级大黄美女免费播放 | 成人看片软件 | 亚洲羞羞视频 | 最近中文字幕2019视频1 | 999任你躁在线精品免费不卡 | 最新国产精品亚洲二区 | 亚洲精品视频专区 | 99视频在线观看免费 | 国产一级成人毛片 | 午夜影视在线免费观看 | 亚洲日本欧美综合在线一 | 午夜国产福利 | 亚洲欧美一区二区三区综合 | 国产精品一库二库三库 | 99爱视频99爱在线观看免费 | 欧美三级不卡 | 丁香激情综合色伊人久久 | 成人宗合网 | 国产精品特黄一级国产大片 | 精品中文字幕一区二区三区四区 | 一个人看的www高清在线观看 |