@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数组的形式接收

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

可以了

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

【Spring Data JPA】04 JPQL和原生SQL的更多相关文章

  1. spring data jpa 使用JPQL的方式查询

    用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件,这时就可以使用@Query注解,结合JPQL的语句方式完成查询 @Que ...

  2. Spring data jpa hibernate:查询异常java.sql.SQLException: Column '列名' not found

    使用spring boot,jap,hibernate不小心的错误: java.sql.SQLException: Column '列名' not found: 这句话的意思是:找不到此列 为什么会出 ...

  3. Spring Boot + Spring Data JPA + PostgreSQL

    最近在用Java重写之前实习生用.netcore写的微信后台应用. 规定用Spring Boot框架,PostgreSQL数据库.之前一直习惯于基于XML的Spring app,也没用过Postgre ...

  4. spring data jpa使用原生sql查询

    spring data jpa使用原生sql查询 @Repository public interface AjDao extends JpaRepository<Aj,String> { ...

  5. Spring Data JPA基本增删改查和JPQL查询(含完整代码和视频连接)

    问题:SpringDataJPA怎么使用? 一.考察目标 主要考核SpringDataJPA的用法 二.题目分析 spring data jpa 的使用步骤(下面有具体实现细节) 1.创建maven工 ...

  6. Spring Boot 入门系列(二十七)使用Spring Data JPA 自定义查询如此简单,完全不需要写SQL!

    前面讲了Spring Boot 整合Spring Boot JPA,实现JPA 的增.删.改.查的功能.JPA使用非常简单,只需继承JpaRepository ,无需任何数据访问层和sql语句即可实现 ...

  7. 干货|一文读懂 Spring Data Jpa!

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa!其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring D ...

  8. spring data jpa 全面解析(实践 + 源码分析)

    前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...

  9. 实例对比 hibernate, spring data jpa, mybatis 选型参考

    原文: 最近重构以前写的服务,最大的一个变动是将mybatis切换为spring data jpa,切换的原因很简单,有两点:第一.它是spring的子项目能够和spring boot很好的融合,没有 ...

  10. spring data jpa(一)

    第1章     Spring Data JPA的快速入门 1.1   需求说明 Spring Data JPA完成客户的基本CRUD操作 1.2   搭建Spring Data JPA的开发环境 1. ...

随机推荐

  1. npm相关命令 npm 自定义脚本命令 自动重启应用

    # 初始化生成package.json文件 npm init -y[不询问] # 查看本项目已安装模块 npm list # 安装模块 npm install 模块名[@版本号 可选]  或  npm ...

  2. EF 开始的片段时有问题 具有潜在运行时冲突

    错误 3002: 映射从第 149 行开始的片段时有问题:表 t_Apply  的键(t_Appl .Id)具有潜在运行时冲突: 列(t_Apply .Id)映射到概念端 EntitySet t_Ap ...

  3. java中判断一个String字符串或字符数组中包含某个字段

    /** * 判断String字符串中包含某个字段 * @param oriStr 原始字符串 * @return */ private static boolean findString(String ...

  4. MacOSX 运行Unity卡顿 [gethostname]

    用MacbookPro 32G i7 独显 的高配打开项目发现异常卡顿, Win平台没有问题 打开Unity的Profiler DeepProfiler. 发现完全是卡在 dns.gethostnam ...

  5. 一文学完所有的Hive Sql(两万字最全详解)

    Hive Sql 大全 本文基本涵盖了Hive日常使用的所有SQL,因为SQL太多,所以将SQL进行了如下分类: 一.DDL语句(数据定义语句): 对数据库的操作:包含创建.修改数据库 对数据表的操作 ...

  6. VUE中watch的详细使用教程

      1.watch是什么? watch:是vue中常用的侦听器(监听器),用来监听数据的变化 2.watch的使用方式如下 watch: { 这里写你在data中定义的变量名或别处方法名: { han ...

  7. CSDN 大规模抓取 GitHub 上的项目到 GitCode,伪造开发者主页引公愤

    事件起因 CSDN旗下的GitCode最近因为一种极其不道德的行为引起了开发者的广泛愤怒和抗议.CSDN在没有通知或征求开发者同意的情况下,悄悄地将大量GitHub上的开源项目搬运到了其自己的GitC ...

  8. Linux后台运行jar文件和关闭Java程序

    后台运行jar文件 Linux 运行jar包 java -jar jar文件名字.jar 这是最简单运行jar文件的命令. 特点:当前命令行窗口将被锁定,可按CTRL + C中止程序运行,或直接关闭窗 ...

  9. ASP.NET Core修改CentOS的IP地址

    最近做的一个产品中有个需求,就是客户使用的时候可以通过Web网页修改服务器的IP地址(客户是普通使用者,没有Linux使用经验,我们的产品作为一台服务器部署到客户机房,客户通过HTTP方式访问使用). ...

  10. Java uuid生成随机32位

    import java.util.UUID; /** * @ClassName:UuidUtils * @Description:uuid工具类 * @Author:chenyb * @Date:20 ...