欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

原生SQL

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

查詢單個(gè)

示例代碼:

@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); // 預(yù)處理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編程實(shí)戰(zhàn), 5, 2022-12-30, 88, 2022-09-19]

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

查詢多個(gè)

實(shí)例代碼:

@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); // 預(yù)處理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編程實(shí)戰(zhàn), 5, 2022-12-30, 88, 2022-09-19]
【執(zhí)行結(jié)果】:[5, SpringCloud編程實(shí)戰(zhàn), 5, 2022-12-30, 88, 2022-09-19]
【執(zhí)行結(jié)果】:[6, SSM編程實(shí)戰(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); // 預(yù)處理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)計(jì) 模糊匹配到的行數(shù)

//  統(tǒng)計(jì)行數(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); // 預(yù)處理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 ?

更新

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

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

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

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

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

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

刪除指定id

示例代碼:

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

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

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

新增

實(shí)例代碼:

@Test
    public void addCourse() {
        EntityManager entityManager = JPAEntityFactory.getEntityManager();// 等同于獲取連接
        entityManager.getTransaction().begin(); //開啟事務(wù)
        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è)課程實(shí)戰(zhàn)"); // 對(duì)預(yù)處理參數(shù)賦值
        query.setParameter("credit", 10); // 對(duì)預(yù)處理參數(shù)賦值
        query.setParameter("start", DateUtil.stringToDate("2021-10-01")); // 對(duì)預(yù)處理參數(shù)賦值
        query.setParameter("end", DateUtil.stringToDate("2022-10-01")); // 對(duì)預(yù)處理參數(shù)賦值
        query.setParameter("num", 999); // 對(duì)預(yù)處理參數(shù)賦值
        query.executeUpdate(); // 執(zhí)行最終sql
        entityManager.getTransaction().commit();// 提交事務(wù)
    }

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

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

相關(guān)文章

  • Spring框架對(duì)于Bean的管理詳解

    Spring框架對(duì)于Bean的管理詳解

    在實(shí)際開發(fā)中,我們往往要用到Spring容器為我們提供的諸多資源,例如想要獲取到容器中的配置、獲取到容器中的Bean等等。本文為大家詳細(xì)講講工具類如何獲取到Spring容器中的Bean,需要的可以參考一下
    2022-07-07
  • java中基本注解的知識(shí)點(diǎn)總結(jié)

    java中基本注解的知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于java中基本注解的知識(shí)點(diǎn)總結(jié),有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-06-06
  • 兩行Javascript代碼生成UUID的方法

    兩行Javascript代碼生成UUID的方法

    這篇文章主要介紹了兩行Javascript代碼生成UUID的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

    詳解SpringBoot 應(yīng)用如何提高服務(wù)吞吐量

    這篇文章主要介紹了Spring Boot 應(yīng)用如何提高服務(wù)吞吐量,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • JAVA實(shí)現(xiàn)監(jiān)測(cè)tomcat是否宕機(jī)及控制重啟的方法

    JAVA實(shí)現(xiàn)監(jiān)測(cè)tomcat是否宕機(jī)及控制重啟的方法

    這篇文章主要介紹了JAVA實(shí)現(xiàn)監(jiān)測(cè)tomcat是否宕機(jī)及控制重啟的方法,可實(shí)現(xiàn)有效的檢測(cè)及控制tomcat服務(wù)器運(yùn)行,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • Spring Boot集成redis,key自定義生成方式

    Spring Boot集成redis,key自定義生成方式

    這篇文章主要介紹了Spring Boot集成redis,key自定義生成方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • java編寫汽車租賃系統(tǒng)

    java編寫汽車租賃系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java編寫汽車租賃系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • MyBatis直接執(zhí)行SQL的工具SqlMapper

    MyBatis直接執(zhí)行SQL的工具SqlMapper

    今天小編就為大家分享一篇關(guān)于MyBatis直接執(zhí)行SQL的工具SqlMapper,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • SpringMVC的執(zhí)行流程及組件詳解

    SpringMVC的執(zhí)行流程及組件詳解

    這篇文章主要介紹了SpringMVC的執(zhí)行流程及組件詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java實(shí)現(xiàn)圖片倒影的源碼實(shí)例內(nèi)容

    Java實(shí)現(xiàn)圖片倒影的源碼實(shí)例內(nèi)容

    在本篇文章里小編給大家整理的是關(guān)于Java實(shí)現(xiàn)圖片倒影的源碼以及相關(guān)知識(shí)點(diǎn),有需要的朋友們學(xué)習(xí)下。
    2019-09-09

最新評(píng)論