最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Jpa框架下拼接原生sql 并執(zhí)行的操作

 更新時(shí)間:2021年06月11日 14:17:48   作者:多吃核桃會(huì)補(bǔ)腦  
這篇文章主要介紹了在Jpa框架下拼接原生sql 并執(zhí)行的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

利用jpa的entityManager 執(zhí)行sql 并執(zhí)行

其中:

EntityManager.createNativeQuery(SQL)

返回的是Object對(duì)象

entityManager.createNativeQuery(SQL,WebInfo.class)

返回的是映射后的實(shí)例對(duì)象

Query.getSingleResult()執(zhí)行SQL語(yǔ)句,返回一個(gè)查詢結(jié)果,常用的還有以下方法

Query.getResultList()執(zhí)行SQL語(yǔ)句,返回一個(gè)List集合

Query.getFirstResult()執(zhí)行SQL語(yǔ)句,返回一個(gè)系列結(jié)果集合的第一個(gè)

直接上例子:

1、EntityManager.createNativeQuery(SQL)返回的是Object對(duì)象

entityManager.createNativeQuery(SQL,WebInfo.class)返回的是映射后的實(shí)例對(duì)象

public List<User> getByCompanyFinanceRoleManager(Long companyID , String authorityName){
        StringBuffer querySql = new StringBuffer("select a.* from art_user a , art_user_authority b where a.id = b.user_id and a.company_id = :companyId " +
                " and b.authority_name =  :authorityName");
        Query query = entityManager.createNativeQuery(querySql.toString() , User.class);
        query.setParameter("companyId" , companyID);
        query.setParameter("authorityName" , authorityName);
        List<User> list = query.getResultList();
        return list;
    }

2、Query.getSingleResult() 執(zhí)行SQL語(yǔ)句,返回一個(gè)查詢結(jié)果

public Long getByFinanceRoleApplicationCount(ApplicationSearchParamDTO param){
        StringBuffer queryCount = new StringBuffer("select count(er.id) from atl_application er , atl_loan_application b where er.application_oid = b.application_oid and er.status not in (1010 ,1011)");
        getSql(queryCount , param);
        Query count = entityManager.createNativeQuery(queryCount.toString() );
        setQueryParam(count , param);
        Object obj = count.getSingleResult();
        Long countNum = ((BigInteger) obj).longValue();
        return countNum;
    }
public void getSql(StringBuffer querySql , ApplicationSearchParamDTO param ){
        //公司oid
        if (!StringUtils.isEmpty(param.getCompanyOID())) {
            querySql.append(" and er.company_oid = :companyOID ");
        }
        //申請(qǐng)人oid
        if (CollectionUtils.isNotEmpty(param.getApplicantOIDs())){
            querySql.append(" and er.applicant_oid in ( :applicantOID ) ");
        }
        if (!StringUtils.isEmpty(param.getBusinessCode())){
            querySql.append(" and b.business_code like CONCAT('%' , :businessCode , '%') ");
        }
        if (CollectionUtils.isNotEmpty(param.getDepartmentOIDs()) && CollectionUtils.isNotEmpty(param.getFinanceRoleCorporationOids()) && CollectionUtils.isEmpty(param.getCorporationOIDs())) {
            querySql.append(" and ( b.department_oid in ( :departmentOID ) or er.corporation_oid in ( :corporationOID ) OR b.department_oid is null OR er.corporation_oid is null )");
        }else if(CollectionUtils.isNotEmpty(param.getDepartmentOIDs()) && CollectionUtils.isEmpty(param.getCorporationOIDs())){
            querySql.append(" and ( b.department_oid in ( :departmentOID ) OR b.department_oid is null ) ");
        }else if(CollectionUtils.isNotEmpty(param.getFinanceRoleCorporationOids()) && CollectionUtils.isEmpty(param.getCorporationOIDs())){
            querySql.append(" and ( er.corporation_oid in ( :corporationOID ) OR er.corporation_oid is null ) ");
        }
        if (CollectionUtils.isNotEmpty(param.getCorporationOIDs())){
            querySql.append(" and er.corporation_oid in ( :corporationOID ) ");
        }
        //開始時(shí)間
        if (param.getStartDate() != null) {
            querySql.append(" and er.last_modified_date >= :startDate ");
        }
        //結(jié)束時(shí)間
        if (param.getEndDate() != null) {
            querySql.append(" and er.last_modified_date <= :endDate ");
        }
        //單據(jù)類型
        if (CollectionUtils.isNotEmpty(param.getType())) {
            querySql.append(" and er.type in ( :type ) ");
        }
        //單據(jù)狀態(tài)
        if (CollectionUtils.isNotEmpty(param.getStatus())) {
            querySql.append(" and er.status in ( :status )");
        }
       /* //申請(qǐng)單oid
        if (CollectionUtils.isNotEmpty(param.getApplicationOIDs())) {
            querySql.append(" and er.application_oid in ( :applicationOID )");
        }*/
        //反選
        if(CollectionUtils.isNotEmpty(param.getExcludedApplicationOIDs())){
            querySql.append(" and er.application_oid not in ( :excludedApplicationOID )");
        }
    }

3、Query.getResultList()

    public List<DepartmentDTO> getDepartmentsOfReportLine(UUID reportLineOID) {
        String sql = "SELECT d.department_oid, d.`name` FROM art_department d INNER JOIN art_report_obj ro on ro.obj_oid = d.department_oid AND ro.obj_type = '2' "
            + "and ro.report_line_oid = '" + reportLineOID + "'";
        Query query = entityManager.createNativeQuery(sql);
        List<DepartmentDTO> list = new ArrayList<>();
        List<Object[]> rtList = query.getResultList();
        for (Object[] objects : rtList) {
            DepartmentDTO departmentDTO = new DepartmentDTO();
            departmentDTO.setDepartmentOID(UUID.fromString(objects[0].toString()));
            departmentDTO.setName(objects[1].toString());
            list.add(departmentDTO);
        }
        return list;
    }
    ```

直接參考例子,拼接正確sql 即可。

Springboot JPA執(zhí)行原生SQL,自定義SQL占位符增加參數(shù)

JPA 實(shí)際上就是 Hibernate 的封裝,根據(jù)Interface 方法名,生成對(duì)應(yīng)的方法,也支持Query注解的方式和原生SQL,原生SQL如下:

1、注解@Query方式執(zhí)行原生SQL語(yǔ)句:

@Query(value = "select * from table_car_mark limit 0,10",nativeQuery = true)
 List<CarsMark> findTop10();

注解的方式需要增加一個(gè)“nativeQuery=true”來(lái)表示是原生 SQL

2、EntityManager.Query 方式:

String sql = "insert t_car_mark_v2(id,car_mark,trigger_event,operate_state,gps_time,gps_longtitude,gps_latitude,gps_speed,gps_direction,gps_state) VALUES(1379000,204819,4,1,20121101012203,116.4130173,39.8860664,0,0,1),(1378501,162481,4,0,20121101012202,116.3074417,39.8848457,54,240,1)";
Query query = em.createNativeQuery(sql);

3、復(fù)雜原生SQL,占位式:

...
import javax.persistence.EntityManager;
import javax.persistence.Query;
....
@Autowired
 private EntityManager em;
String sql = "insert t_car_mark_v2(id,car_mark,trigger_event,operate_state,gps_time,gps_longtitude,gps_latitude,gps_speed,gps_direction,gps_state) values(?,?,?,?,?,?,?,?,?)";
query = em.createNativeQuery(sql);
query.setParameter(1,1);
query.setParameter(2,'values');
query.setParameter(3,1);
query.setParameter(4,1);
query.setParameter(5,'values');
query.setParameter(6,'values');
query.setParameter(7,'values');
query.setParameter(8,'values');
query.setParameter(9,'values');
query.executeUpdate();

使用 query.setParameter(index,parms);方式對(duì)“?”進(jìn)行參數(shù)占位補(bǔ)充。

Note:

返回值:由于是一個(gè)insert操作,另外成功則返回操作的條數(shù),沒(méi)有做數(shù)據(jù)改變則返回 0 。

如果出現(xiàn) “jpa Executing an update/delete query ”異常,那么是因?yàn)槟銢](méi)有添加事物和“@Modifying”比較,把注解加上就可以。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis兩種不同批量插入方式的區(qū)別

    Mybatis兩種不同批量插入方式的區(qū)別

    隨著業(yè)務(wù)需要,有時(shí)我們需要將數(shù)據(jù)批量添加到數(shù)據(jù)庫(kù),mybatis提供了將list集合循環(huán)添加到數(shù)據(jù)庫(kù)的方法,這篇文章主要給大家介紹了關(guān)于Mybatis兩種不同批量插入方式的區(qū)別,需要的朋友可以參考下
    2021-09-09
  • Java中使用print、printf、println的示例及區(qū)別

    Java中使用print、printf、println的示例及區(qū)別

    Java?的輸出方式一般有這三種,print、println、printf,它們都是?java.long?包里的System類中的方法,本文重點(diǎn)給大家介紹Java中使用print、printf、println的示例,需要的朋友可以參考下
    2023-05-05
  • Springboot+MyBatis進(jìn)行日志輸出參考示例

    Springboot+MyBatis進(jìn)行日志輸出參考示例

    這篇文章主要給大家介紹了關(guān)于Springboot+MyBatis進(jìn)行日志輸出的相關(guān)資料,在項(xiàng)目開發(fā)過(guò)程中,日志是必不可少的,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 快速解決idea打開某個(gè)項(xiàng)目卡住的問(wèn)題

    快速解決idea打開某個(gè)項(xiàng)目卡住的問(wèn)題

    這篇文章主要介紹了解決idea打開某個(gè)項(xiàng)目卡住的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 一文搞懂Spring循環(huán)依賴的原理

    一文搞懂Spring循環(huán)依賴的原理

    這篇文章將用實(shí)例來(lái)為大家詳細(xì)介紹@Autowired解決循環(huán)依賴的原理,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Spring有一定幫助,感興趣的可以學(xué)習(xí)一下
    2022-07-07
  • java中單雙斜杠的使用圖文詳解

    java中單雙斜杠的使用圖文詳解

    JAVA中的斜杠有正斜杠與反斜杠之分,正斜杠,一般就叫做斜杠,下面這篇文章主要給大家介紹了關(guān)于java中單雙斜杠使用的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Java中的相除(/)和取余(%)的實(shí)現(xiàn)方法

    Java中的相除(/)和取余(%)的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java中的相除(/)和取余(%)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • SpringBoot中的文件上傳和異常處理詳解

    SpringBoot中的文件上傳和異常處理詳解

    這篇文章主要介紹了SpringBoot中的文件上傳和異常處理詳解,對(duì)于機(jī)器客戶端,它將生成JSON響應(yīng),其中包含錯(cuò)誤,HTTP狀態(tài)和異常消息的詳細(xì)信息,對(duì)于瀏覽器客戶端,響應(yīng)一個(gè)"whitelabel"錯(cuò)誤視圖,以HTML格式呈現(xiàn)相同的數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • mybatis接口綁定失效的解決

    mybatis接口綁定失效的解決

    這篇文章主要介紹了mybatis接口綁定失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SprinBoot整合Quart實(shí)現(xiàn)定時(shí)調(diào)度的示例代碼

    SprinBoot整合Quart實(shí)現(xiàn)定時(shí)調(diào)度的示例代碼

    這篇文章主要介紹了SprinBoot整合Quart實(shí)現(xiàn)定時(shí)調(diào)度的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

阿拉善右旗| 南投县| 绵阳市| 东乡县| 南召县| 台江县| 中超| 四川省| 曲沃县| 五指山市| 彰化县| 泾川县| 大姚县| 舞阳县| 白山市| 南陵县| 拉萨市| 嵊州市| 南开区| 太白县| 汾西县| 四会市| 文登市| 陇西县| 泽州县| 南昌县| 德昌县| 双鸭山市| 都江堰市| 集安市| 鸡西市| 宁海县| 宜兰县| 定西市| 自治县| 莆田市| 武汉市| 静乐县| 房产| 柳江县| 聂拉木县|