zoukankan      html  css  js  c++  java
  • 【Spring Data JPA】04 JPQL和原生SQL

    @Transactional注解

    让Spring处理事务

    不需要自己每次都手动开启提交回滚

    FINDONE & GETONE的区别?

    findone是立即加载

    getone是延迟加载,配合事务使用的

    立即加载是这个方法被调用时就返回对象的值

    延迟加载是在对象被调用的时候,才会执行查询来返回数值


    JPQL的查询

    特定查询,需要在Dao的接口方法上打上注解配置

    使用JPQL的CRUD

    编写测试类

        @Test
        public void jpql(){
            Customer customer = customerDao.getCustomerByCustName("播客");
            System.out.println(customer);
        }

    按客户名称和客户ID查询名称

    接口的声明

    @Query(value = "from cn.dai.entity.Customer where custId = ? and custName = ?")
        public Customer getCustomerByCustIdAndCustName(Long custId,String custName);

    测试类

        @Test
        public void jpql2(){
            Customer customer = customerDao.getCustomerByCustIdAndCustName(3l, "传智播客");
            System.out.println(customer);
        }

    结果

    【注意JPQL语句的占位符顺序,声明的参数要按顺序对应才行】

    或者按照新版本的占位符风格这样声明

    就是显示的声明这个占位符对应的是第几个参数

    按ID更新客户名称

    接口声明:

        @Modifying
        @Query("update cn.dai.entity.Customer set custName = ?2 where custId = ?1")
        public long updateCustomerByCustId(Long custId,String custName);

    测试类

        @Test
        public void jpql2(){
            Customer customer = customerDao.getCustomerByCustIdAndCustName(3l, "传智播客");
            System.out.println(customer);
        }

    结果会这样报错

    在之前的查询是不会数据库起修改作用,所以要不要事务都无所谓

    但是这个JPQL是一个增删改的执行,JPA事务会强制要求事务存在,否则就会报这个事务要求异常

    执行的是修改或者删除查询

    解决:

    在我们的测试方法上打上事务注解,【在业务层的业务方法打】

    然后测试才通过了

    但是数据库并没有修改,因为事务没有提交?

    设置是否自动回滚【默认是自动回滚。。。】

    再次执行,修改成功

    使用SQL书写

    测试类

    结果

    另外,除了实体类之外还可以使用这种Object数组的形式接收

    忘了忘了,要用工具类打印

    可以了

    条件查询也是一样,区别不大,不需要做演示了

  • 相关阅读:
    C#集合类型——Array、ArrayList、List 之浅谈
    C#反射(二)
    ASP.Net内置对象之网页之间传参(二)
    ASP.Net内置对象之网页之间传参(一)
    MyEclipse中设置智能提示
    常用Java片段
    ue中替换行
    正确的计算耗时
    JAVA之GUI编程ACTION事件
    JAVA之GUI编程窗体事件
  • 原文地址:https://www.cnblogs.com/mindzone/p/12975986.html
Copyright © 2011-2022 走看看