Spring JPA 常用用法

一、关键字

1.1 And
    findByNameAndPwd
    where name= ? and pwd =?
1.2 Or
    findByNameOrSex
    where name= ? or sex=?

1.3 Is,Equals
    findById,findByIdEquals
    where id= ?

1.4 Between
    findByIdBetween
    where id between ? and ?

1.5 LessThan
    findByIdLessThan
    where id < ?

1.6 LessThanEquals
    findByIdLessThanEquals
    where id <= ?

1.7 GreaterThan
    findByIdGreaterThan
    where id > ?
1.8 GreaterThanEquals
    findByIdGreaterThanEquals
    where id > = ?
1.9 After
    findByIdAfter
    where id > ?
1.10 Before
    findByIdBefore
    where id < ?
1.11 IsNull
    findByNameIsNull
    where name is null
1.12 isNotNull,NotNull
    findByNameNotNull
    where name is not null
1.13 Like
    findByNameLike
    where name like ?
1.14 NotLike
    findByNameNotLike
    where name not like ?
1.15 StartingWith
    findByNameStartingWith
    where name like '?%'
1.16 EndingWith
    findByNameEndingWith
    where name like '%?'
1.17 Containing
    findByNameContaining
    where name like '%?%'
1.18 OrderBy
    findByIdOrderByXDesc
    where id=? order by x desc
1.19 Not
    findByNameNot
    where name <> ?
1.20 In
    findByIdIn(Collection<?> c)
    where id in (?)
1.21 NotIn
    findByIdNotIn(Collection<?> c)
    where id not  in (?)
1.22 True
    findByAaaTue
    where aaa = true

1.23 False
    findByAaaFalse
    where aaa = false
1.24 IgnoreCase
    findByNameIgnoreCase
    where UPPER(name)=UPPER(?)

1.25 where name in(?,?...) and age<?
    public List<Employee> findByNameInAndAgeLessThan(List<String> names,Integer age);
    在方法上加@Query就不需要遵守上面的规则了,可以进行自定义sql。

二、传参方式 :


2.1 ?1方式
    @Query("select o from Employee o where o.name=?1 and o.age=?2")
    public List<Employee> queryParams1(String name,Integer age);
2.2 @Param方式
    @Query("select o from Employee o where o.name=:name and o.age=:age")
    public List<Employee> queryParams2(@Param("name") String name, @Param("age") Integer age);
    修改数据的时候需要使用到三个注解
2.3 update or delete操作时需要加上@Modifying注解以告诉spring data 是update or dalete操作,并且需要在service上开启事务 @Transactional
例如:仅仅加上@Modifying这个会报错,需要打开事务,需要在service层方法上开启事务
dao层:    
    @Modifying
    @Query("update Employee o set o.age=:age where o.id=:id")
    public void update(@Param("id") Integer id,@Param("age") Integer age);
service层:
    @Transactional
    public void update(Integer id,Integer age){
        employeeRepository.update(id,age);
    }

三、查询
3.1.使用JPA命名查询
@Entity
@NamedQuery(name=User.findByCoursePackId,query="select u from User u where u.id = ?1")
public class User(){}

3.2.实现声明接口方法
List<CoursePackAndCourse> findByCoursePackId(String coursePackId);

3.3.使用Query代替
select操作

@Query("select q from Answer q where q.id = :id")
void selectAnswerByIdAndState(@Param("id") String id);

DELETE和UPDATE操作时必须在query方法上增加@Modifying,以通知Spring Data这是一个DELETE或UPDATE操作。如果UPDATE或DELETE操作需要使用事务,应在Service层的方法上添加事务操作。
@Modifying
@Query("update Answer q set q.state = :state where q.id = :id")
void updateState(@Param("id") String id, @Param("state") Integer state);

使用Like查询
@Query("select q from Answer q where q.id like %:id")
void updateState(@Param("id") String id);

3.4.实现设置nativeQuery=true的方法代码
update or delete
@Modifying
@Query(value = "DELETE FROM q_course_group WHERE course_id IN (:courseIds)", nativeQuery = true)
void deleteAll(@Param("courseIds") Set<String> courseIds);

select 

@Query(value = "select q FROM q_course_group q WHERE course_id IN (:courseIds)", nativeQuery = true)
void selectTest(@Param("courseIds") Set<String> courseIds);

四、分页

public interface UserRepository extends JpaRepository<User, Long> {
  @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
    countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
    nativeQuery = true)
  Page<User> findByLastname(String lastname, Pageable pageable);
}
Spring JPASpring框架的一个模块,它提供了一种简化和优化数据库访问的方式。使用Spring JPA可以避免手动编写SQL语句,而是通过简单的注解和方法命名规则来实现对数据库的操作。 在使用Spring JPA时,首先需要在项目中引入相关的依赖。相比于传统的Spring配置,Spring JPA的配置更加简单。你可以通过在Spring配置文件中声明`<jpa:repositories>`标签来启用Spring JPA,并配置相关属性,比如指定实体类所在的包,指定数据源等。 接着,你需要在实体类中使用注解来定义实体和字段的映射关系,比如使用`@Entity`注解标记实体类,使用`@Table`注解来指定表名,使用`@Column`注解来指定字段名等。 在使用Spring JPA进行数据库操作时,你可以使用继承自`JpaRepository`接口的自定义接口。这个接口提供了很多常用的数据库操作方法,比如增删改查等。你可以根据需要自定义方法,在方法名中使用特定的关键字来实现不同的查询操作,比如使用`findBy`、`deleteBy`等前缀来实现根据条件查询或删除的功能。 除了基本的CRUD操作之外,Spring JPA还提供了更高级的功能,比如分页查询、排序查询、数据库事务管理等。你可以使用`PagingAndSortingRepository`接口和`JpaTransactionManager`来实现这些功能。 总之,Spring JPA提供了一种更加简化和便捷的方式来进行数据库操作,通过注解和方法命名规则,你可以快速地实现各种数据库操作需求。引用<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SpringDataJpa使用详解](https://blog.youkuaiyun.com/wzmde007/article/details/100031551)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值