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

JPA原生SQL實現(xiàn)增刪改查的示例詳解

 更新時間:2022年09月29日 11:20:06   作者:look-word  
JPA除了對JPQL提供支持外,還對原生SQL語句也提供了支持。本文將利用生SQL實現(xiàn)增刪改查功能,文中的示例代碼講解詳細,需要的可以參考一下

原生SQL

JPA除了對JPQL提供支持外,還對原生SQL語句也提供了支持。下面小節(jié)一起來看看吧。

查詢單個

示例代碼:

@Test
    public void getSingle() {
        EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于 獲取連接 
        String sql = "select cid, cname, credit, end, num, start " +
                "from yootk.course where cid = ?1";
        Query query = entityManager.createNativeQuery(sql); // 預處理sql
        query.setParameter(1, 1);
        Course course = (Course) query.getSingleResult();
        loggerFactory.info("【執(zhí)行結(jié)果】:{}",course ); // 執(zhí)行sql
        JPAEntityFactory.close();// 關(guān)閉連接
    }

執(zhí)行結(jié)果:

java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class look.word.po.Course

意思是 query.getSingleResult() 不能轉(zhuǎn)換成 Course類

修改代碼

執(zhí)行結(jié)果:

【執(zhí)行結(jié)果】:[1, Spring編程實戰(zhàn), 5, 2022-12-30, 88, 2022-09-19]

可以發(fā)現(xiàn),query.getSingleResult() 返回的是一個數(shù)組對象。不能轉(zhuǎn)換成Course也是正常的。后續(xù)文章會解決這個問題

查詢多個

實例代碼:

@Test
public void getAllCourse() {
    EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于 獲取連接
    String sql = "select cid, cname, credit, end, num, start " +
            "from yootk.course ";
    Query query = entityManager.createNativeQuery(sql); // 預處理sql
    List list = query.getResultList();// 執(zhí)行sql
    for (Object o : list) {
        loggerFactory.info("【執(zhí)行結(jié)果】:{}", o);
    }
    JPAEntityFactory.close();// 關(guān)閉連接
}

執(zhí)行結(jié)果:

【執(zhí)行結(jié)果】:[1, Spring編程實戰(zhàn), 5, 2022-12-30, 88, 2022-09-19]
【執(zhí)行結(jié)果】:[5, SpringCloud編程實戰(zhàn), 5, 2022-12-30, 88, 2022-09-19]
【執(zhí)行結(jié)果】:[6, SSM編程實戰(zhàn), 5, 2022-12-30, 88, 2022-09-19]

分頁模糊查詢

示例代碼:

@Test
    public void getAllCourseSplit() {
        int current = 2;
        int lineSize = 3;
        String keyWord = "%Spring%";
        EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于 獲取連接
        String sql = "select cid, cname, credit, end, num, start " +
                "from yootk.course where cname like :k1";
        Query query = entityManager.createNativeQuery(sql); // 預處理sql
        query.setFirstResult((current - 1) * lineSize); // 等同于 limit ?
        query.setMaxResults(lineSize); //  // 等同于 limit ?,?
        query.setParameter("k1", keyWord);
        List list = query.getResultList();// 執(zhí)行sql
        for (Object o : list) {
            loggerFactory.info("【執(zhí)行結(jié)果】:{}", o);
        }
        JPAEntityFactory.close();// 關(guān)閉連接

執(zhí)行結(jié)果:

執(zhí)行的sql: select cid,cname,credit,end,num,start from yootk.course where cname like ? limit ?,?

count

統(tǒng)計 模糊匹配到的行數(shù)

//  統(tǒng)計行數(shù)
    @Test
    public void getAllCourseCount() {
        String keyWord = "%Spring%";
        EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于 獲取連接
        String sql = "select count(*) from yootk.course where cname like :k1";
        Query query = entityManager.createNativeQuery(sql); // 預處理sql
        query.setParameter("k1", keyWord);
        loggerFactory.info("【執(zhí)行結(jié)果】:{}", query.getSingleResult());// 執(zhí)行sql
        JPAEntityFactory.close();// 關(guān)閉連接
    }

執(zhí)行結(jié)果

執(zhí)行的sql: select count(*) from yootk.course where cname like ?

更新

例如:我們想把學分小于5的課程全部提高到5

注意到:我們當前是未開啟事務的,觀察程序執(zhí)行結(jié)果。

@Test
    public void getUpdateCourse() {
        // 例如:我們想把學分小于5的課程全部提高到5
        EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于 獲取連接
        //entityManager.getTransaction().begin(); // 開啟事務
        String sql = "update yootk.course as c set c.credit = ?1 where c.credit <?2";
        Query query = entityManager.createNativeQuery(sql); // 預處理sql
        query.setParameter(1, 5);
        query.setParameter(2, 5);
        loggerFactory.info("【執(zhí)行結(jié)果】:{}", query.executeUpdate());// 執(zhí)行sql
        //entityManager.getTransaction().commit(); // 提交事務
        JPAEntityFactory.close();// 關(guān)閉連接
    }

執(zhí)行結(jié)果:

異常提示信息為:說我們的 update / delete 操作需要事務的支持

把上敘代碼注釋掉的事務,放開執(zhí)行即可。

刪除指定id

示例代碼:

// 刪除指定id
    @Test
    public void deleteById() {
        EntityManager entityManager = JPAEntityFactory.getEntityManager(); // 等同于 獲取連接
        entityManager.getTransaction().begin(); // 開啟事務
        String deleteSql = "delete from yootk.course where cid = ?1";
        Query query = entityManager.createNativeQuery(deleteSql);
        query.setParameter(1, 1); // 預處理sql 賦值
        loggerFactory.info("【執(zhí)行結(jié)果】:{}", query.executeUpdate());// 執(zhí)行sql
        entityManager.getTransaction().commit(); // 提交事務
        JPAEntityFactory.close();// 關(guān)閉連接
    }

執(zhí)行結(jié)果

執(zhí)行的sql: delete from yootk.course where cid = ?

新增

實例代碼:

@Test
    public void addCourse() {
        EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于獲取連接
        entityManager.getTransaction().begin(); //開啟事務
        String addSql = "insert into yootk.course(cname, credit, end, num, start) " +
                "value(:cname,:credit,:end,:num,:start )";
        Query query = entityManager.createNativeQuery(addSql);
        query.setParameter("cname", "java就業(yè)課程實戰(zhàn)"); // 對預處理參數(shù)賦值
        query.setParameter("credit", 10); // 對預處理參數(shù)賦值
        query.setParameter("start", DateUtil.stringToDate("2021-10-01")); // 對預處理參數(shù)賦值
        query.setParameter("end", DateUtil.stringToDate("2022-10-01")); // 對預處理參數(shù)賦值
        query.setParameter("num", 999); // 對預處理參數(shù)賦值
        query.executeUpdate(); // 執(zhí)行最終sql
        entityManager.getTransaction().commit();// 提交事務
    }

執(zhí)行結(jié)果:

到此這篇關(guān)于JPA原生SQL實現(xiàn)增刪改查的示例詳解的文章就介紹到這了,更多相關(guān)JPA SQL增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解MyBatis模糊查詢LIKE的三種方式

    詳解MyBatis模糊查詢LIKE的三種方式

    模糊查詢也是數(shù)據(jù)庫SQL中使用頻率很高的SQL語句,這篇文章主要介紹了詳解MyBatis模糊查詢LIKE的三種方式,非常具有實用價值,需要的朋友可以參考下
    2018-10-10
  • Mybatis映射文件規(guī)則實例詳解

    Mybatis映射文件規(guī)則實例詳解

    在映射文件當中,mapper元素是映射文件的根元素,其他的標簽都是它的子元素,下面這篇文章主要給大家介紹了關(guān)于Mybatis映射文件規(guī)則的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • SpringMvc @Valid如何拋出攔截異常

    SpringMvc @Valid如何拋出攔截異常

    這篇文章主要介紹了SpringMvc @Valid如何拋出攔截異常,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Java對稱加密算法DES實例詳解

    Java對稱加密算法DES實例詳解

    這篇文章主要介紹了Java對稱加密算法DES,結(jié)合實例形式詳細分析了java DES算法的概念、原理、實現(xiàn)方法與應用場景,需要的朋友可以參考下
    2019-09-09
  • Spring中Feign的調(diào)用流程詳解

    Spring中Feign的調(diào)用流程詳解

    這篇文章主要介紹了Spring中Feign的調(diào)用流程詳解,分析過了創(chuàng)建的代理是FeignInvocationHandler,那我們就打斷點,停在它的反射方法上,看看到底做了什么,需要的朋友可以參考下
    2023-11-11
  • MyBatis的CRUD中的不同參數(shù)綁定查詢實現(xiàn)

    MyBatis的CRUD中的不同參數(shù)綁定查詢實現(xiàn)

    本文主要介紹了MyBatis的CRUD中的不同參數(shù)綁定查詢實現(xiàn),主要包括單個參數(shù)傳遞綁定,序號參數(shù)傳遞綁定,注解參數(shù)傳遞綁定,pojo(對象)參數(shù)傳遞綁定,map參數(shù)傳遞綁定這幾種類型,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Spring 方法注解@Bean及配置類掃描路徑

    Spring 方法注解@Bean及配置類掃描路徑

    這篇文章主要介紹了Spring 方法注解@Bean及配置類掃描路徑,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-12-12
  • java Swing實現(xiàn)五子棋游戲

    java Swing實現(xiàn)五子棋游戲

    這篇文章主要為大家詳細介紹了java Swing實現(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Spring Shell應用程序開發(fā)流程解析

    Spring Shell應用程序開發(fā)流程解析

    這篇文章主要介紹了Spring Shell應用程序開發(fā)流程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 淺談java中String的兩種賦值方式的區(qū)別

    淺談java中String的兩種賦值方式的區(qū)別

    這篇文章主要介紹了淺談java中String的兩種賦值方式的區(qū)別。簡單介紹了兩種賦值方式,然后進行了實例分析,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11

最新評論

保山市| 营山县| 浏阳市| 岑溪市| 故城县| 黑山县| 富裕县| 宿州市| 嘉定区| 颍上县| 丰顺县| 龙游县| 连城县| 九台市| 河西区| 贡山| 房山区| 长岭县| 皋兰县| 威远县| 河源市| 广水市| 沂水县| 宣化县| 民勤县| 宾川县| 长垣县| 浙江省| 南投县| 焉耆| 巨野县| 印江| 崇信县| 含山县| 甘谷县| 乌拉特前旗| 客服| 沅江市| 赫章县| 九江县| 柳州市|