Hql的原生態sql和Basedao

2021-08-31 01:20:45 字數 2363 閱讀 2460

basedao

需求:按名字分頁查詢對應書籍資訊

原生sql

hql實現不了的功能,可以考慮使用原生sql

1、多表(5+)聯查

2、未配置對映檔案中關係

檢視對映

場景select * from 3表聯查

select @rowno:=@rowno + 1 as rowno,a.* from tablename a,(select @rowno:=0) b

原生sql:

sqlquery sqlq = session.createsqlquery("select tname,tage from teacher ");

//指定查詢出來的列的名稱和類別

sqlq.addscalar("tname", hibernate.string);

sqlq.addscalar("tage", hibernate.integer);

//有條件的

sqlquery sqlq = session.createsqlquery("select * from teacher where tname like :tname and tage > :tage");

teacher t = new teacher();

t.settage(26l);

t.settname("%王%");

sqlq.addentity("t",teacher.class);

sqlq.setproperties(t);

//統計 分組

sqlquery sqlq=session.createsqlquery("select s.sclass,count(*) c from students s group by s.sclass order by c desc");

sqlq.addscalar("sclass", hibernate.string);

sqlq.addscalar("c", hibernate.integer);

//連線查詢 (沒有fetch,只有在hql中才有)

// sqlquery sqlq=session.createsqlquery(「select s.,t. from students s left join tands ts on s.sid=ts.studentid left join teachers t on ts.teacherid=t.tid where t.tname like ?」);

// sqlq.addentity(「s」,student.class);

// sqlq.addentity(「t」,teacher.class);

// sqlq.setstring(0, 「%李四%」);

分頁//原生sql方式 其他方式也差不多

int pagerow=2;//每頁顯示多少行

int currpage=2;//當前頁

sqlquery sqlq=session.createsqlquery("select t.* from teachers t");

sqlq.addentity("t",teacher.class);

sqlq.setfirstresult((currpage-1)*pagerow);

sqlq.setmaxresults(pagerow);

listts=sqlq.list();

for(teacher t : ts)

hibernate sqlquery 查詢char型別結果為乙個字元解決方法

在使用hibernate的原生態sql對oracle進行查詢時,碰到查詢char型別的時候始終返回的是乙個字元,開始認為應該是hibernate在做對映的把資料型別給對映成char(1),在經過查詢網上的一些資料,得知產生這個問題的主要原因確實是hibernate再查詢oracle的時候,將char自動對映成character(varchar的子集)型別,現有以下幾種解決方法:

1:將你要查詢的實體轉換成實體bean,使用hql查詢,這樣就不存在字段對映的問題了,但是這樣比較麻煩;

2:可以使用hibernate中的addscalar(string arg,type type)來自定義返回欄位的型別,如:

this.getsession()

.createsqlquery(「select id,name,state from tb」)

.addscalar(「id」, hibernate.string)

.addscalar(「name」, hibernate.string)

.addscalar(「state」, hibernate.string)

.list();

這樣就可以解決,但是這樣的話,必須把所有要查詢的字段進行定義,在字段比較多的時候,就相對比較麻煩;

Hibernate使用原生態SQL語句

我前面也有寫過一篇hibernate使用原生態sql語句的方法。但那種方法是新增實體類。沒有表,但要反射實體類進行對映,也就是要寫實體類。有興趣的可以在我部落格裡找到那篇看看。這次我記錄的是不需要寫實體類,資料庫也不需要做檢視。方法如下。1.string sql 這裡面寫的是sql語句,在資料庫中能...

yii2 執行原生態的sql語句

搜尋 connection yii db user id yii user id print r user id 報名的賽事 sql select ybm from bm userybm where user id user id command connection createcommand s...

嫦 娥,名人,原生態的Blog

我這個blog,本來是調侃it的 今天順道也調侃一下網際網路熱點 我坦白,我偶爾是看mop的 雖然我覺得他的主力人群應該是20歲左右的人 mop,以及其他 捧紅 過很多女子 至少是網路上有了一定知名度 這些人,我大概是知道的 無論是自戀狂也好 還是智商高也好 或者自暴床事也罷 我沒有太關注過 最近,...