Hibernate自定義SQL查詢結果自動反射到POJO
在hibernate中,當自己用到自定義SQL查詢時,結果集和pojo類的欄位一模一樣,又想方便快捷的不用手動的對映到pojo上,相信大家都遇到過.
看如下程式碼POJO
Mapping.xml略...相信大家都會// 年份 private String month; // 月份 private String year; // 狀態 private Long status; // 建立人 private String createEmpCode; // 建立時間 private Date createDate; // 修改人 private String updateEmpCode; // 修改時間 private Date updateDate; get() set()省略....
查詢的SQL:
要注意的是,查詢出來的欄位名稱最好和POJO類的屬性名一致,要是出現什麼行對應不上的錯誤,大家自己可以去嘗試.SELECT nvl(t.e_year, '無') AS year, l.m AS month, nvl(t.status,0) as status, t.create_emp_code as createEmpCode, t.create_date as createDate, t.update_emp_code as updateEmpCode, t.update_date as updateDate FROM (SELECT LEVEL m FROM dual CONNECT BY LEVEL <= 12) l LEFT OUTER JOIN table t ON l.m = t.e_month AND t.e_year = 1 AND t.e_page = 4 ORDER BY l.m
SSH整合查詢程式碼,純Hibernate寫法,主要涉及到一個類(關鍵吶!)
@SuppressWarnings("unchecked") public Collection<Table> findBy(final QueryObj queryObj) { final String sql = "SELECT nvl(t.e_year, '無') AS year,l.m AS month,nvl(t.status, 0) as status," + " t.create_emp_code as createEmpCode,t.create_date as createDate," + " t.update_emp_code as updateEmpCode,t.update_date as updateDate" + " FROM (SELECT LEVEL m FROM dual CONNECT BY LEVEL <= 12) l" + " LEFT OUTER JOIN table t ON l.m = t.e_month AND t.e_year = ? AND t.e_page = ?" + " ORDER BY l.m "; final String year = "year"; final Long page = 1; return (Collection<Table>) super.getHibernateTemplate().execute( new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { SQLQuery query = session .createSQLQuery(sql); query.setString(0, year); query.setLong(1, page); //這裡用addScalar指定查詢結果集欄位轉換,尤其是用到sql函式時第一個引數是as 別名,第二個是返回值的型別 query.addScalar("year", Hibernate.STRING); query.addScalar("month", Hibernate.STRING); query.addScalar("status", Hibernate.LONG); query.addScalar("createEmpCode", Hibernate.STRING); query.addScalar("updateEmpCode", Hibernate.STRING); query.addScalar("createDate", Hibernate.DATE); query.addScalar("updateDate", Hibernate.DATE); //關鍵轉換方法query.setResultTransformer,引數AliasToBeanResultTransformer(對映到的POJO類). query.setResultTransformer(new AliasToBeanResultTransformer(Table.class)); //OK hibernate會自動對映過去,如果不用這個方法它返回的時候是Collection<Object>,所以不能起到轉換的作用,在JBoss中執行查詢時會報錯的. return query.list(); } }); }
以上的方法用query.addEntity(將查詢到的記錄與特定的實體關聯。)不管用可能是sql的原因,查詢的基表為Table時才關聯上,如果是多表關聯,基表又不對應,必須是哪個方法才行,還要設定addScalar方法,還有:查詢類是SQLQuery可不是Query,兩個類提供的方法是不一樣的.
相關推薦
Hibernate自定義SQL查詢結果自動反射到POJO
在hibernate中,當自己用到自定義SQL查詢時,結果集和pojo類的欄位一模一樣,又想方便快捷的不用手動的對映到pojo上,相信大家都遇到過. 看如下程式碼POJO // 年份 private String month; // 月份 private String
hibernate 自定義sql createSQLQuery多表join查詢查詢自定義vo物件
由於要做個left join所以要搞個vo物件 LogManageVo.java 裡面就寫屬性和get set方法就可以了 import com.sevnce.log.entity.LogMan
spring boot 學習心得 使用JpaRepository註解自定義SQL查詢數據庫多表查詢
自定義 net http entity onetomany tom pri 查詢語句 重點 一. 首先在@Entity註解的類裏面要寫好外鍵關系. 這個 @ManyToOne 註解可以建立外鍵關系, 不要在自己傻傻的寫一個 private int grades_id;
SQL 查詢結果自動遞增序列號
一、讓SELECT查詢結果額外增加自遞的偽序號列 在基於資料庫的系統的開發過程中,有時需要讓select返回的查詢結果中存在一列實際的資料庫表中並不存在的序號列,即在查詢結果中額外增加自增的偽序號列。從網路上可以找到一些解決方案,但總結起來主要有三種: 1.使用資料庫自帶的序號函式實現 Oracle提供的RO
spring-data-JPA使用JpaRepository註解自定義SQL查詢資料庫多表查詢
一. 首先在@Entity註解的類裡面要寫好外來鍵關係. 這個 @ManyToOne 註解可以建立外來鍵關係, 不要在自己傻傻的寫一個 private int grades_id; 寫了這個註解以後它會自動的把 Classes 這張表加上 grades_id 欄位.
自定義sql查詢並封裝為指定實體
原理:通過java反射,得到實體屬性對應的欄位名稱及型別,並用原生的jdbc執行查詢並封裝。 直接看原始碼: 1.實體:Zztestpackage demo.linj.test; import java.text.NumberFormat; public class
Spring boot jdbc 自定義SQL查詢
閒來沒事,中午學了spring boot 感覺還不錯,避免了繁瑣的配置檔案,提高開發效率還不錯。個人認為spring boot也就簡化配置而已。在學習中也遇到一些問題,@Autowired無法自動裝入bean,是由於對spring boot 不夠了解,先上程式碼
hibernate 使用普通sql查詢,對映到自定義pojo中
public List<InsuranceRecordVo> getCustomRecodeListByCustomId2(String customId){ String sql="
hibernate使用setResultTransformer()將SQL查詢結果放入集合中
-h cal 們的 gpo ict dds eas find ans 在平時開發中Hibernate提供的hql基本能夠滿足我們的日常需求。但是在有些特殊的情況下,還是需要使用原生的sql,並且希望sql查詢出來的結果能夠綁定到pojo上。hibernate API中的cr
Hibernate通過自編寫sql查詢
ppr checked str .class erp create UNC dde string public List<InterProductMsg> selectIsHaveProductid(String productId) { String sq
Hibernate在進行SQL查詢,並把查詢結果繫結到POJO物件。
我們通過註解的方式可以把一個實體物件繫結到一個數據表。然後用Hibernate操作這個物件對錶進行資料操作。也可以用Hql來查詢並自動把結果繫結到@Entity物件中。 但是我們可能也會碰到這種情況,當我們要做一些資料統計的時候,查詢可能會牽扯到多張表的查詢。所以用Hql可能就達不到我們要查詢的
Activit自定義SQL語句查詢
String organid = "admin"; List<Model> listModel = null; try { //獲取該使用者建立的模型
JPA原生SQL(自定義SQL)分頁查詢邏輯
JPA自己寫SQL查詢的話,分頁還稍微麻煩,經過測試下面方法可以: @Query(nativeQuery = true, value = "select * from goods where " +
Spring JPA 自定義實體類和自定義sql語句多表關聯複雜子查詢
最近在寫一個功能,因為不是很熟悉jpa操作,接觸時間不久,所以又習慣性地用了sql語句來查詢,主要是嫌麻煩,想返回的資料用一條資料返回來就可以了,所以就用spring jpa寫了個自定義的實體類來裝我專門返回來的資料欄位,然後sql也有點複雜,join了幾張表,
mybatis逆向工程的Example類用法==筆記==【單表操作只需呼叫,多表查詢需要自定義sql+mapper介面方法(待補全)】
======上程式碼: ===版本1: @Service public class BaseDictServiceImpl implements BaseDictService { //查詢資料字典表,注入資料字典表mapper介面代理物件 @Autowired
記一次偽*sql查詢結果不一致的
vid eight frame and sna parameter -exec video http 調試代碼發現,兩個操作最後都會調用同一個方法。傳入的參數一致,查詢結果卻不一致。 直接說問題原因:我的兩個操作是aop環繞通知先拿到傳入參數以後,校驗是否需要往另一張表中插
將sql 查詢結果導出到excel
過程 book 查詢 color shell 業務 文件的 arch exce 在平時工作中經常會遇到,sql 查詢數據之後需要發送給業務人員,每次都手工執行腳本然後拷貝數據到excel中,比較耗時耗力,可以考慮自動執行查詢並將結果郵件發送出來。 分兩步實現: 1、執行
sql查詢結果存入DataTable,然後從DataTable取數據
結果 ble body 查詢 取數 select columns class span for (int i = 0; i < dt.Rows.Count; i++) { string s = "select
篩選出sql 查詢結果中 不包含某個字符
title www. char kdt nbsp ofo pos ali ati select * from table1 where patindex(‘%關鍵字%‘ , aa) = 0 select * from table1 where charindex(‘關鍵字
SQL查詢結果為二維表
mon 結果 else AS table case when create lse nio 1 ---測試數據--- 2 if object_id(‘[tb]‘) is not null drop table [tb] 3 go 4 create tabl