自定義返回的字段,不知道為啥select new 總是報錯,無論是select new Map 還是select new 實體,所以先暫時用下邊這個不規范的方法,等我找出原因了會更新
自定義實體,繼上邊那個問題后發現自定義實體的話可以實現,首先要加@Entity注解和@Id注解
實體,省略setter和getter
sql:
這里用了一個工具類,封裝的就是entitymanager的方法:
測試:
解決辦法二:不知道百度上那些select new是怎么操作的,反正我操作結果集總是不對,但是還是找到了另一種解決方法:
在dao層中的代碼,這里的query注解執行sql代碼返回的是一個list,也就是這個:List<Object[]> list = entityManager.createNativeQuery(sql).getResultList();
里邊的元素是object[]數組,這里相當於強轉一下由Object[]轉化為Map<String,Object>
建議的話還是用對象來接受,因為對象接收的話就相當於mybatis的resultMap,如果元素為空的話是會顯示的,但是用map接受的話空元素就不會顯示。
測試:
解決辦法三:終於找到了select new 的辦法:
首先還是建自定義實體類Test,注意參數類型必須和原類的參數類型相同,且構造方法內的參數順序和查詢的順序一致,相應的注解也要加:
然后在responsitory中,new Test內的參數與構造方法中的順序一致,這是hql的寫法所以nativeQuery=true這個啟用sql語句的參數就不需要了,賦值的話在這里用:id,@Param這個注解也不能少,from表的時候要找對應的實體類而不是數據庫中的表名。
解決辦法四:不用另外創建實體類,返回List<Map<String,Object>>的數據: