@Query注解的原生用法和native用法解析
@Query注解的原生用法和native用法
1. @Query原生用法
@Query(value = "select u.id, u.name from User u, town t where u.id = t.id and t.place =:name") User findUserByPlace(@Param("place") String place); @Query(value = "select new User(u.id, u.name) from User u, town t where u.id = t.id and t.place = ?1") User UsergetUserByPlace(String place);
上面兩個方法的效果是一樣的,這是原生方法。
2. @Query的native查詢用法
@Query(value="select * from user u, town t where u.id = t.id and t.place = ?1", nativeQuery = true) User UsergetUserByPlace(String place);
@Query的native的查詢方法要增加nativeQuery = true,默認是false,這樣查詢的時候就是使用原生的sql語句進行查詢數(shù)據(jù)庫的操作。
有nativeQuery = true和沒有的區(qū)別
有nativeQuery = true時
是可以執(zhí)行原生sql語句,所謂原生sql,也就是說這段sql拷貝到數(shù)據(jù)庫中,然后把參數(shù)值給一下就能運行了,比如:
@Query(value = "select * from product_rel where audit_id=?1 and process_object=0 ",nativeQuery = true) List<ProductRel> findAllByProductAuditId(Integer id);
這個時候,把select * from product_rel where audit_id=?1 and process_object=0拷貝到數(shù)據(jù)庫中,并給audit_id賦一個值,那么這段sql就可以運行。其中數(shù)據(jù)庫表在數(shù)據(jù)庫中的表名就是product_rel,字段audit_id在數(shù)據(jù)庫中也是真實存在的字段名。
沒有nativeQuery = true時
就不是原生sql,而其中的select * from xxx中xxx也不是數(shù)據(jù)庫對應的真正的表名,而是對應的實體名,并且sql中的字段名也不是數(shù)據(jù)庫中真正的字段名,而是實體的字段名。例如:
@Query("select ratio from MdmRatio ratio where enabledNum=1 ") List<MdmUtilThreeProjection> findByMdmUtilThreeProjection();
此中,select ratio from MdmRatio ratio 中的MdmRatio為實體名,不是真正的數(shù)據(jù)庫表名,真正的數(shù)據(jù)庫表名是mdm_ratio(如上圖@Table里面寫的那樣,MdmRatio實體對應的數(shù)據(jù)庫表名是mdm_ratio。
但不一定都是這樣的,可能你的MdmRatio實體對應的數(shù)據(jù)庫表是mdm_ratio_abc,但whatever,隨便是什么,只要它真實存在就Ok),而查詢條件中的enabledNum在數(shù)據(jù)庫中真正的名字是enabled_num。
這兩個的作用是一樣的,只是寫法不同而已。涉及到HQL的知識。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
關于兩個BeanUtils.copyProperties()的用法及區(qū)別
這篇文章主要介紹了關于兩個BeanUtils.copyProperties()的用法及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06Intellij IDEA 2017新特性之Spring Boot相關特征介紹
Intellij IDEA 2017.2.2版本針對Springboot設置了一些特性,本篇文章給大家簡單介紹一下如何使用這些特性,需要的朋友參考下吧2018-01-01MyBatis-Plus多表聯(lián)合查詢并且分頁(3表聯(lián)合)
這篇文章主要介紹了MyBatis-Plus多表聯(lián)合查詢并且分頁(3表聯(lián)合),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08SpringBoot中MyBatis-Plus 查詢時排除某些字段的操作方法
這篇文章主要介紹了SpringBoot中MyBatis-Plus 查詢時排除某些字段的操作方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08SpringBoot使用Scheduling實現(xiàn)定時任務的示例代碼
Spring Boot提供了一種方便的方式來實現(xiàn)定時任務,即使用Spring的@Scheduled注解,通過在方法上添加@Scheduled注解,我們可以指定方法在何時執(zhí)行,本文我們就給大家介紹一下SpringBoot如何使用Scheduling實現(xiàn)定時任務,需要的朋友可以參考下2023-08-08關于SpringBoot mysql數(shù)據(jù)庫時區(qū)問題
在后端開發(fā)過程中經(jīng)常會遇到幾個時區(qū)設置問題,今天分幾種情況給大家介紹SpringBoot mysql數(shù)據(jù)庫時區(qū)問題,感興趣的朋友跟隨小編一起看看吧2021-06-06