如何透過Spring Data/EntityManager/Session直接獲取DTO資料?
我們從資料庫中提取資料,才能確定應用程式的執行方式。為了構建最佳的提取計劃,我們需要了解每種提取型別。直接獲取資料是最簡單的,無需編寫任何顯式SQL查詢語句,並且在我們知道實體主鍵時非常有用。
如何透過透過Spring Data EntityManager和Hibernate Session示例直接獲取?
關鍵點:
原始碼可以在這裡找到
透過Spring Data Projections獲取DTO
獲取比所需資料更多的資料是導致效能損失的最常見問題之一。獲取實體而無意修改它們也是一個壞主意。我們可以透過Spring Data Projections(DTO)僅從資料庫中獲取所需的資料。
假設對於實體User我們只想提取其中的name和city,做成一個DTO物件返回,實體User的程式碼:
@Entity public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String surname; private String city; private String country; private long ssn; private int age; |
關鍵點:
- 編寫一個包含getter的介面(投影),僅用於應從資料庫中提取的列
public interface UserNameAndCity { String getName(); String getCity(); }
- 寫一個返回<projection>的正確查詢List:
@Repository public interface UserRepository extends JpaRepository<User, Long> { @Transactional(readOnly = true) List<UserNameAndCity> findFirst2BySurname(String surname); }
- 如果可能,限制返回的行數(例如,via LIMIT)。在這裡,我們可以使用Spring Data儲存庫基礎結構中內建的查詢構建器機制
呼叫:
List<UserNameAndCity> users = userRepository.findFirst2BySurname("Francisco"); logger.info(() -> "Number of users:" + users.size()); for (UserNameAndCity user : users) { logger.info(() -> "User:" + user.getName() + ", " + user.getCity()); } |
原始碼可以在這裡找到
相關文章
- 如何透過API獲取實時商品資料API
- 拼多多商品資料如何透過api介面獲取API
- 透過Python SDK 獲取tushare資料Python
- 如何透過Hibernate/JPA的SqlResultSetMapping生成需要資料的DTO?SQLAPP
- 從session中獲取資料Session
- 如何透過SqlResultSetMapping和NamedNativeQuery生成DTO?SQLAPP
- Grails通過sessionId獲取session物件AISession物件
- PHP透過Modbus Tcp實時獲取裝置資料PHPTCP
- 為什麼要透過API介面來獲取資料API
- 如何透過javax.persistence.Tuple和JPQL提取DTO?Java
- 如何透過建構函式和JPQL生成DTO?函式
- 如何透過ResultTransformer和原生SQL或JPQL生成DTO?ORMSQL
- 如何透過javax.persistence.Tuple和原生SQL生成DTO?JavaSQL
- Spring多資料來源獲取Spring
- spring-session-data-redis共享方案SpringSessionRedis
- React-hooks 父元件透過ref獲取子元件資料和方法ReactHook元件
- 如何透過CRM系統獲取更多銷售線索?
- 如何透過裝置基站獲取裝置經緯度
- 【譯】React如何獲取資料React
- 如何獲取想要的資料?
- 獲取 CPU資訊,並透過登錄檔寫入
- 如何透過AST樹去獲取JS函式引數名ASTJS函式
- Android Study 之 如何透過Data Binding提升擼Android
- linux檔案相關命令 透過檔案獲取父資料夾名稱Linux
- Django透過request獲取客戶端IPDjango客戶端
- Spring Data JPA如何用於資料庫檢視?Spring資料庫
- 網際網路時代,如何透過Facebook獲取更多客戶?
- 【Spring Boot】使用JDBC 獲取相關的資料Spring BootJDBC
- 如何透過SQLyog分析MySQL資料庫MySql資料庫
- 【Mysql】如何透過binlog恢復資料MySql
- Canal1.1.4獲取資料後直接傳送到kafka的Topic中Kafka
- 透過Unity整合Huawei Game Service 並獲取玩家標識資訊UnityGAM
- 透過WebView2獲取HTTP-only cookieWebViewHTTPCookie
- Spring Session+Spring Data Redis 解決分散式系統架構中 Session 共享問題SpringSessionRedis分散式架構
- 教你如何使用API介面獲取資料!API
- 如何用python分析xml獲取資料?PythonXML
- electron + go 如何從sqlite獲取資料GoSQLite
- 關於如何獲取資料的方法