如何從資料庫中取一條記錄的某幾個字段

2021-10-01 03:51:36 字數 1327 閱讀 8113

先丟擲這個疑問,為什麼要取幾個字段,直接用實體類接受不是很方便嗎?

select *  from user;

可以看這個語句,假如user表只有兩個字段,那沒問題。如果user表有100+ 個字段呢? 我們明明只用 其中某幾個,每次都取100+個字段出來,然後再用某幾個,這會造成資源浪費的。 說白了,就是 select * from user;

這個語句 在阿里巴巴開發手冊中明確的說了,不讓用,除非你真的要取出所有的字段。

# # 那麼問題來了,如何只取其中某幾個呢?

如果只取其中乙個,sql語句就用原生的就可以,然後比方說 我取 name 這個字段,在資料庫中字段為 varchar型別。那麼完全可以用  list來接收這個返回的結果。 為什麼用 list 來接受,如果你能確定你取出來的只有一條記錄的話,沒有關係,可以用 string 來接收。 如果資料庫返回多條,你用 string 取接收,那就要報錯了, more than one 異常,意思就是返回多條結果,你卻用 乙個string來接受。

如果你取多個字段,其實是可以用 list來接收的,比方說你要的 sql 語句是 select name,age,*** from user 

如果你加了限定條件是只能出來一條記錄,用 object 也行,如果不能保證就用list,那麼問題來了,object接收完怎麼取處理呢?想當然的覺得 object裡邊是list 是錯的,雖然是幾個不同型別的字段。你去強制型別轉換是會報錯的。 

我試過,用 object[ ]  object型別的陣列來接收是沒問題的,然後你知道裡邊放了幾個字段,順序是什麼,然後再去強制型別轉換,就可以把資料都取出來。比方說 name 是 varchar型別的,age 是 int 型別的,*** 是char型別的。 那就這樣取操作object陣列。 (string)obj[0]   , integer.valueof(obj[1])  這樣去取。 說白了我們用 object,接收的是object陣列。

我覺得這種方案,只適合 有多個字段,支取某幾個,為這幾個欄位去減乙個實體類不太值得。

# # 如果有一百個字段,我要取 20個,這用陣列去接收,有點難受了,那就用乙個實體類

實體類需要包括這些 字段,提供 set get方法,然後,這樣做(我說的是 jpa 的方案)

jpa在查詢時,在沒有重寫建構函式的時候是不能查詢部分欄位的,要查詢實體中的部分字段,可以這樣:新增乙個要查詢欄位的建構函式。

實體articleonlineentity :

dao寫法:

public inte***ce articleonlinedao extends crudrepository

注意點:建構函式要和查詢語句中的要查詢字段順序要一樣

資料庫中隨機查詢一條記錄的SQL

資料庫的隨機查詢sql 1.oracle,隨機查詢20條 select from select from 表名 order by dbms random.value where rownum 20 2.ms sql server,隨機查詢20條 select top 20 from 表名order ...

sql 查資料庫中時間最新的一條記錄

下策 查詢出結果後將時間排序後取第一條 select from a where create time 2017 03 29 19 30 36 order by create time desc limit 1這樣做雖然可以取出當前時間最近的一條記錄,但是一次查詢需要將表遍歷一遍,對於百萬以上資料查...

關於資料庫Group By取最新一條資料

根據欄位super find id分組查詢opt time最新的一條資料,如以上示例表中期望查詢結果為第2條。select b.super find id,max b.opt time as opt time from info super feedback b group by b.super f...