當前位置:首頁 » 編程語言 » hibernatesql查詢欄位
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

hibernatesql查詢欄位

發布時間: 2023-05-29 04:22:16

⑴ hibernate查詢語句中條件欄位為集合時sql文怎麼寫

條件欄位為集合是指某個條件包含多個值嗎?
如果是的話就 where 條件1 in (值1,值2,值3)來表示,這里有一個情況需要說明,如果是在存儲過程中使用這個會有點問題,如果是sql的reprotbuilder的話值1,值2可以用一個多值參數傳遞進來。

⑵ HIbernate多表查詢 SQLQuery query2 = session.createSQLQuery(select a.欄位1,b.欄位2 from a,b) query2.

取不出來么雀裂?森歲激query2中應該就包含a和b欄位的內容啊,只要循環此襪就可以取出來的。只不過因為無法確定a表和b表的記錄,不知道那個值是a表的哪個值是b表的,單純取出是可以的

⑶ Hibernate4 升級到Hibernate5 中 sql查詢注意事項

Hibernate4 中,利用原生SQL語句查詢時,
1、可使用Session.createSQLQuery(sql)建立Qurey(org.hibernate.Query),
2、可使用Query.setParameter(int index, Object obj),對sql語句中的參數根據位置進行參數值動態綁定;

升級到 Hibernate5
1、org.hibernate.Query被標記為@Deprecated
2、Session().createSQLQuery(sql)返回類型為org.hibernate.query.Query;
3、並且Session().createSQLQuery也已經被標記為@Deprecated;
4、可使用Session().createNativeQuery(sql)代替createSQLQuery。
5、createNativeQuery返回的Query, 不可 通過setParameter(int index, Object obj) 根據位置 進行參數值動態綁定; 只可以 通過setParameter(String paramname, Object obj) 按參數名稱綁定
6、createNativeQuery(sql)中的sql語句中的 查詢佔位符
只可使用 命名參數 方式進行編寫。

上問錯誤例子中,將導致如下錯誤:

⑷ hibernate 的createSQLQuery 要查詢 表中的幾個欄位怎麼查呢,寫select * 沒事

select 欄位1,欄位2,。。。 from,返回的是一個List<Object>類型的集合,遍歷如下,
for(int i = 0; i < list.size(); i++){
Object[] obj = list.get(i);
/肆橡/然後obj[0],obj[1]。。。裂尺旁困乎就是對應的欄位值
}

⑸ hibernate sql查詢結果集怎麼轉換

在多表查詢的時候使用hibernate的sql查詢的時候,一般返回的是object[]數組,或者可以使用
session.createSQLQuery(sql).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
來轉化為map來進行處理,可以通過以下方式將查詢結果轉化為實體類:

1,sql語句 String sql="select s.id as id,s.classname as classname from grade s,student st where s.id=st.classid"

利用以下語句
session.createSQLQuery(sql) .setResultTransformer(Transformers.aliasToBean(Grade.class))可以將sql中查詢出來的欄位轉化為班級這個實體類,但是必須為每個欄位指定別名,別名就是班級類裡面的對應的屬性,但必須注意,對每一個列都必須addScalar("列名"),如果不設置addScalar方法可能會報轉型錯誤的異常.如果查詢的結果裡麵包括多個表裡面的欄位,不能對應一個實體類去接受,就需要新建一個與查詢結果對應的實體類,或者直接使用map結果集

2,sql語句 String sql="select {s.*} from grade s,student st where s.id=st.classid"

針對這樣的全部欄位查詢的sql可以利用addEntity來轉化為實體類
SQLQuery query=session.createSQLQuery(sql) ;
query.addEntity("s", Grade.class);

SQL查詢語句,它帶一個佔位符,可以讓Hibernate使用欄位的別名.
查詢返回的實體,和它的SQL表的別名.
addEntity()方法將SQL表的別名和實體類聯系起來,並且確定查詢結果集的形態。
這樣就可以將班級這張表裡面的所有欄位的值賦值給班級這個實體類java培訓機構排名,而且必須是所有的屬性

3,sql語句 String sql="select {s.*},{st.*} from grade s,student st where s.id=st.classid"
SQLQuery query=session.createSQLQuery(sql) ;
query.addEntity("s", Grade.class);
query.addEntity("st", Student.class);
利用這樣的查詢得到的是一個object[]數組,object[0]就是班級實體類,object[1]就是學生實體類
可以用addScalar(String arg,Type type)方法定義要返回的欄位類型,如
s.createSQLQuery(shuiQingHQL).addScalar("STCD",Hibernate.STRING).addScalar("STNM")

⑹ hibernate查詢SQL語句(統計)時的問題

Query query = session.createSQLQuery("select xm,count(xm) count from RcwhB group by xm");

返回的是一個list 查詢的時候你在裡面加叢清了一個count 的欄位
而你對應的RcwhB model類裡面肯定沒有這個count屬性沒有李鄭殲getCount()和set方法
所以導致hibernate查詢的時候不能幫你封裝哪沖成對應的modle
所以就報你上面的錯誤

⑺ 在hibernate運用sql查詢

給你一個我寫的例歷孝子:
public
List<Statistics>
statistics(){
String
sql="select
"+
"sum(case
when
(t.type_code=3)
then
1
else
0
end),"+
"sum(case
when
(t.type_code=5)
then
1
else
0
end),"+
"sum(case
when
(t.type_code=8)
then
1
else
0
end),"+
"sum(case
when
(t.type_code=0)
then
1
else
0
end),"+
"sum(case
when
(t.type_code=6)
then
1
else
0
end),"+
"sum(case
when
(t.type_code=9)
then
1
else
0
end),"陸爛並+
"count(*)"+
"from
cs_cust_complaint_data
t
where
t.from_flag='2'";
List<Statistics>
stal
=
new
ArrayList<Statistics>();
SQLQuery
query
=
getSession().createSQLQuery(sql);
Object[]
obj
=
(Object[])query.uniqueResult();
BigDecimal
b0
=
(BigDecimal)obj[0];
BigDecimal
b1
=
(BigDecimal)obj[1];
BigDecimal
b2
=
(BigDecimal)obj[2];
BigDecimal
b3
=
(BigDecimal)obj[3];
BigDecimal
b4
=
(BigDecimal)obj[4];
BigDecimal
b5
=
(BigDecimal)obj[5];
BigDecimal
b6
=
(BigDecimal)obj[6];
Double
zs
=
b6.doubleValue();
DecimalFormat
df=new
DecimalFormat("#.00");
stal.add(new
Statistics("卷煙營銷",
b0.longValue(),Double.parseDouble(df.format(b0.doubleValue()/早跡zs*100))));
stal.add(new
Statistics("專賣法規",
b1.longValue(),Double.parseDouble(df.format(b1.doubleValue()/zs*100))));
stal.add(new
Statistics("煙葉生產",
b2.longValue(),Double.parseDouble(df.format(b2.doubleValue()/zs*100))));
stal.add(new
Statistics("政風行風",
b3.longValue(),Double.parseDouble(df.format(b3.doubleValue()/zs*100))));
stal.add(new
Statistics("人事勞資",
b4.longValue(),Double.parseDouble(df.format(b4.doubleValue()/zs*100))));
stal.add(new
Statistics("其他咨詢",
b5.longValue(),Double.parseDouble(df.format(b5.doubleValue()/zs*100))));
return
stal;
}

⑻ Hibernate 怎樣 執行sql語句,獲得查詢到的值

這個你都要糾結嘛。。直接聲明一個int 類型的 變數來接收這個值就可以了,我一般都是把這個寫在一個方法裡面,這個方法的返回值為Int 在這個方法裡面,取出這個值,返回即可。

⑼ Hibernate有幾種查詢方法

轉錄:
從點到面,講講hibernate查詢的6種方法。分別是HQL查詢
,對象化查詢Criteria方法,動態查詢DetachedCriteria,例子查詢,sql查詢,命名查詢。
如果單純的使用hibernate查詢資料庫只需要懂其中的一項就可以完成想要實現的一般功能,但是
從一個點,讓我們掌握6中方法,則提供了更多選擇。每一種方法都有其適用的情況與前提。
HQL查詢
HQL是hibernate自己的一套查詢語言,於SQL語法不同,具有跨資料庫的優點。示例代碼:

static void query(String name){
Session s=null;
try{
s=HibernateUtil.getSession();

//from後面是對象,不是表名
String hql="from Admin as admin where admin.aname=:name";//使用命名參數,推薦使用,易讀。
Query query=s.createQuery(hql);
query.setString("name", name);

List<Admin> list=query.list();

for(Admin admin:list){
System.out.println(admin.getAname());
}
}finally{
if(s!=null)
s.close();
}
}

適用情況:常用方法,比較傳統,類似jdbc。缺點:新的查詢語言,適用面有限,僅適用於Hibernate框架。
對象化查詢Criteria方法:

static void cri(String name,String password){
Session s=null;
try{
s=HibernateUtil.getSession();

Criteria c=s.createCriteria(Admin.class);
c.add(Restrictions.eq("aname",name));//eq是等於,gt是大於,lt是小於,or是或
c.add(Restrictions.eq("apassword", password));

List<Admin> list=c.list();
for(Admin admin:list){
System.out.println(admin.getAname());
}
}finally{
if(s!=null)
s.close();
}
}

適用情況:面向對象操作,革新了以前的資料庫操作方式,易讀。缺點:適用面較HQL有限。
動態分離查詢DetachedCriteria

static List dc(DetachedCriteria dc) {

Session s = HibernateUtil.getSession();
Criteria c = dc.getExecutableCriteria(s);
List rs = c.list();
s.close();
return rs;
}

DetachedCriteria dc = DetachedCriteria.forClass(User.class);
int id = 1;
if (id != 0)
dc.add(Restrictions.eq("id", id));
Date age = new Date();
if (age != null)
dc.add(Restrictions.le("birthday", age));
List users = dc(dc);
System.out.println("離線查詢返回結果:" + users);

適用情況:面向對象操作,分離業務與底層,不需要欄位屬性攝入到Dao實現層。 缺點:適用面較HQL有限。
例子查詢

static List example(User user) {
Session s = HibernateUtil.getSession();
List<User> users = s.createCriteria(User.class).add(
Example.create(user)).list();
// List<User>
// users2=s.createCriteria(User.class).add((Example.create(user)).ignoreCase())
// .createCriteria("child").add((Example.create(user))).list();
return users;
}

適用情況:面向對象操作。 缺點:適用面較HQL有限,不推薦。

sql查詢

static List sql() {

Session s = HibernateUtil.getSession();
Query q = s.createSQLQuery("select * from user").addEntity(User.class);
List<User> rs = q.list();
s.close();
return rs;
}

適用情況:不熟悉HQL的朋友,又不打算轉資料庫平台的朋友,萬能方法 缺點:破壞跨平台,不易維護,不面向對象。
命名查詢

static List namedQuery(int id) {
Session s = HibernateUtil.getSession();
Query q = s.getNamedQuery("getUserById");
q.setInteger("id", id);
return q.list();
}

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="com.sy.vo.User" table="user" catalog="news">

</class>
<!-- 命名查詢:定義查詢條件 -->
<query name="getUserById">
<![CDATA[from User where id=:id]]>
</query>
<!-- 命名查詢中使用sql,不推薦使用,影響跨資料庫
<sql-query name="getUserById2">
<![CDATA[select * from User where ]]>
</sql-query> -->
</hibernate-mapping>

適用情況:萬能方法,有點像ibatis輕量級框架的操作,方便維護。 缺點:不面向對象。基於hql和sql,有一定缺陷。

⑽ 請問我用hibernate的SQLQuery查詢資料庫里的一個欄位onlineDuration在某個時間段的總數

在拿滲某些場合下,我們可能想使用HIBERNATE的框架提供返敏春的SQL查詢介面,但是,由於實體沒有做映射,HIBERNATE不能把結果集轉換成你想要的List<POJO>,本文討論如何在這種情況下讓HIBERNATE直接返回你想的結漏耐果。下面是簡單的查詢封裝方法

Java代碼
public List<?> findObjectBySql(String queryString,Class<?> pojoClass){
//使用SQL構造查詢對象,此SQL是可以被JDBC接受的SQL,如SELECT * FROM XXX_TABLE
Query query = this.getSession().createSQLQuery(queryString);
//設置結果集轉換器,這是本文重點所在
query.setResultTransformer(new EscColumnToBean(pojoClass));
//返回查詢結果
return query.list();