spring-data-aop Repository层的增删查改

devtools/2024/11/6 13:16:05/

spring-data-aop Repository层的增删查改

先介绍一下spring-data-jpa repository层的传参,使用@Query时参数的运用

  • 第一种

    @Query("select new com.train.spr.entities.Content(b.billAmount, b.billDate, b.id, c.customerName) " +"       from Bill b " +"       join Customer c on b.customerId = c.id and c.id = ?1")
    List<Content> searchContent( Long id);
    

    按照顺序进行传参,使用第几个参数就在问号后写几,使用第二个参数就写?2,使用第三个参数就写?3,以此类推。但是这种方式对于阅读代码不友好,不推荐使用

  • 第二种,使用@Param【推荐】

    import org.springframework.data.repository.query.Param;@Query("select new com.train.spr.entities.Content(b.billAmount, b.billDate, b.id, c.customerName) " +
    "       from Bill b " +
    "       join Customer c on b.customerId = c.id and c.id = :id")
    List<Content> searchContent(@Param("id") Long idValue);
    

    按照参数名传参,使用第什么参数就在冒号后写参数名,方便阅读代码

CURD 操作

  • 增、删、改
    @Modifying
    @Transactional
    @Query(value = "INSERT INTO your_table (column1, column2) VALUES (:v1, :v2)", nativeQuery = true)
    int insert(@Param("v1") String value1, @Param("v2") String value2);@Modifying
    @Query("delete from Customer c where c.id = :id")
    void delete(@Param("id") Long id);@Modifying
    @Query("update Customer c set c.customerName = :name where c.id = :id")
    void update(@Param("name") String name,@Param("id") Long id);
    

    ⚠️ 注意

    增、删、改 都需要在接口方法上加上@Modifying 注解,至于@Transactional,这个需要根据实际情况决定,如果执行的是一个事务,那么@Transactional最好加在service层,如果不需要事务,仅是单一操作,那么加在repository层的接口方法上

  • @Query("select c from Customer c where c.customerId = ?1")
    List<Customer> searchContent( Long id);
    

http://www.ppmy.cn/devtools/131766.html

相关文章

网络--传输层协议--TCP

1、TCP协议的特性 面向连接(需要建立连接,才能继续通信) 面向字节流的一对一通信模式 通过流量控制和拥塞控制 -> 确保可靠传输 报头大小20字节(若带选项,最大60字节) 2、TCP报文字段 16位源端口号 和 16位目的端口号 -- 2 + 2 = 4 字节 32位序号 和 32位确认序…

Java开发配置文件的详情教程配置文件类型

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

vue使用方法创建组件

vue 中 创建 组件 使用 方法创建组件 vue2 中 import vueComponent from xxxx function createFn(){const creator Vue.extend(vueComponent);const instance new creator();document.appendChild(instance.$el); }vue3 中 import { createApp } from "vue"; im…

刘艳兵-DBA026-以下哪些HINT是有效的?

以下哪些HINT是有效的&#xff1f; A INDEX_FFS B INDEX_RS C NO_INDEX_FFS D NO_INDEX_RS 答&#xff1a; A INDEX_FFS C NO_INDEX_FFS INDEX_FFS 用于提示优化器对表执行快速全索引扫描&#xff08;Fast Full Index Scan&#xff09;。 NO_INDEX_FFS 用于…

【大数据学习 | kafka】producer之拦截器,序列化器与分区器

1. 自定义拦截器 interceptor是拦截器&#xff0c;可以拦截到发送到kafka中的数据进行二次处理&#xff0c;它是producer组成部分的第一个组件。 public static class MyInterceptor implements ProducerInterceptor<String,String>{Overridepublic ProducerRecord<…

精美的美食食谱分享首页

效果图&#xff1a; 完整代码&#xff0c;图片素材如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&…

Melty 主体流程图

┌───────────┐ │ 用户输入 │ └─────┬─────┘ │&#xff08;自然语言或指令&#xff09; │ ▼ ┌───────────┐ │ 自然语言处理 │ │ &#xff08;NLU 模块&#xff09;│ └─────┬─────┘ │ │ 解析用户意图 │ ▼ ┌─…

简单的 docker 部署ELK

简单的 docker 部署ELK 这是我的运维同事部署ELK的文档&#xff0c;我这里记录转载一下 服务规划 架构: Filebeat->kafka->logstash->ES kafka集群部署参照: kafka集群部署 部署服务程序路径/数据目录端口配置文件elasticsearch/data/elasticsearch9200/data/elas…