首页 > 数据库 >jpa 原生SQL写法

jpa 原生SQL写法

时间:2022-10-09 12:56:06浏览次数:81  
标签:name jpa price Param value SQL Query 写法

jpa 原生SQL写法

当你的抽象类继承了JpaRepository类时,就会拥有一些基本的增删改查操作。但是,很多时候只有这些简单的功能是不够的的,jpa也支持原生SQL和实体类SQL进行自定义查询。

简单例子:

  1. @Query(value = "select name,author,price from Book b where b.price>?1 and b.price<?2")
  2. List<Book> findByPriceRange(long price1, long price2);

Like表达式:

  1. @Query(value = "select name,author,price from Book b where b.name like %:name%")
  2. List<Book> findByNameMatch(@Param("name") String name);

原生SQL

使用Native SQL Query(nativeQuery=true则使用原生SQL默认HQL)

所谓本地查询,就是使用原生的sql语句(根据数据库的不同,在sql的语法或结构方面可能有所区别)进行查询数据库的操作

  1. @Query(value = "select * from book b where b.name=?1", nativeQuery = true)
  2. List<Book> findByName(String name);

实体类SQL

  1. @Query(value = "SELECT new com.x3.schedule.saas.table.ScheduleUserView(" +
  2. " t2.userId, t1.title, t1.content, t1.completeTime, t2.scheduleState)" +
  3. " FROM ScheduleTable t1 LEFT JOIN ScheduleUserTable t2 ON t1.scheduleId = t2.scheduleId " +
  4. " WHERE t2.userId = ?1 AND t2.scheduleState = ?2")
  5. List<ScheduleUserView> findScheduleListByState(Long userId, int scheduleState);

使用@Param注解注入参数

  1. @Query(value = "select name,author,price from Book b where b.name = :name AND b.author=:author AND b.price=:price")
  2. List<Book> findByNamedParam(@Param("name") String name, @Param("author") String author,
  3. @Param("price") long price);

SPEL表达式(使用时请参考最后的补充说明)

'#{#entityName}'值为'Book'对象对应的数据表名称(book)。

  1. @Query(value = "select * from #{#entityName} b where b.name=?1", nativeQuery = true)
  2. List<Book> findByName(String name);

注:

1)update或delete时必须使用@Modifying和@Transactional对方法进行注解,才能使得ORM知道现在要执行的是写操作

2)有时候不加@Param注解参数,可能会报如下异常:

org.springframework.dao.InvalidDataAccessApiUsageException: Name must not be null or empty!; nested exception is java.lang.IllegalArgumentException: Name must not be null or empty!

3)当使用集合作为条件时,可参考此处的ids

  1. @Transactional
  2. @Modifying
  3. @Query("update ShopCoupon sc set sc.deleted = true where sc.id in :ids")
  4. public void deleteByIds(@Param(value = "ids") List<String> ids);

https://blog.csdn.net/weixin_40910372/article/details/108644851

标签:name,jpa,price,Param,value,SQL,Query,写法
From: https://www.cnblogs.com/sunny3158/p/16771751.html

相关文章

  • JPA多种方式写SQL
    JPA多种方式写SQL方式一:直接使用jpa继承了JpaRepository的DAO直接定义,优点是简单方便booleanexistsCodeByCodeAndCodeType(Stringcode,CodeTypecodeType);方式......
  • SQL Server 2000 跨域连接
    原文地址:https://www.cnblogs.com/easypass/archive/2011/04/10/2011043.html一、ping服务器IP能否ping通。这个实际上是看和远程sqlserver2000服务器的物理连......
  • sharding 目前支持和不支持的 sql
     描述:使用sharding 中间件,不支持一些sql具体看官网:​​https://shardingsphere.apache.org/document/current/cn/features/sharding/use-norms/sql/​​......
  • easyswoole - mysql以及redis连接池
    1.安装组件安装easyswoole/pool通用连接池组件composerrequireeasyswoole/pool安装easyswoole/redis-pool协程连接池组件composerrequireeasyswoole/redis-p......
  • 整理一下 几个 MySQL 1000W 级别的问题
    ## 首先要关注占用的多大的内存​​ MYSQL-算一算1000万条数据大概占了多大磁盘空间​​ ## mysql批量插入数据,一次插入多少行数据效率最高?​​https://www.imooc.c......
  • mysql 连接-左外连接-left join
    外连接左外连接,关键字:table1LEFTOUTERJOINtable2on条件where条件左外连接结果=内连接+左边表中失配的元组结果包括左表中的所有数据行,和右表中符合连接条......
  • SQL抽象语法树及改写场景应用
    1背景我们平时会写各种各样或简单或复杂的sql语句,提交后就会得到我们想要的结果集。比如sql语句,”select*fromt_userwhereuser_id>10;”,意在从表t_user中筛选出us......
  • mysql 删除索引 Cannot drop index 'IX_t_billing_setup_CustomerID_WarehouseID': n
     --创建表createtablet_billing_setup(BillingSetupIDintnotnullauto_incrementcomment'编号',CustomerIDintnotnullcomment'',......
  • mysql 连接-自连接
    自连接表连接自己,通过某个条件Id|Name|Salary|ManagerId----+-------+--------+-----------1|Joe|70000|32|Henry|80000|4......
  • mysql SQL 优化
    一、背景随着业务不断迭代,系统中出现了较多的SQL慢查。慢查虽不致命,但会让商家感知到系统较慢,影响使用体验。在进行慢查优化过程中,我们积累了一些经验。本文将基于我们的......