springboot系列09:jpa的高级使用2
限制查询
-
查询取前一个实体
1 2 3 | <br> /**<br> * 取年龄最大 */ User findTopByOrderByAgeDesc(); |
-
测试类
1 2 3 4 | @Test public void testFindTopByOrderByAgeDesc(){ Assert.assertEquals( 30 ,( int )userRepository.findTopByOrderByAgeDesc().getAge()); } |
自定义查询
使用自定义的 SQL 来查询,在 SQL 的查询方法上面使用@Query
注解,如涉及到删除和修改在需要加上@Modifying
.也可以根据需要添加 @Transactional
对事物的支持,查询超时的设置等
-
更新语句
1 2 3 4 5 6 7 | /** * 更新用户名 */ @Transactional @Modifying @Query ( "update com.example.jpa.domain.User u set u.userName = ?1 where u.id = ?2" ) int updateUserNameById(String userName, Long id); |
-
测试类
1 2 3 4 | @Test public void testUpdateUserNameById(){ Assert.assertEquals( 1 ,userRepository.updateUserNameById( "zhangliang" ,12L)); } |
-
自定义查询
1 2 3 4 5 | /** * 用户名模糊查询 */ @Query ( "select u from com.example.jpa.domain.User u where u.userName like ?1" ) List<User> findByUserNameLike(String userName); |
-
测试
1 2 3 4 | @Test public void testFindByUserNameLike(){ Assert.assertEquals( 2 ,userRepository.findByUserNameLike( "%zhang%" ).size()); } |
-
删除
1 2 3 4 5 6 7 | /** * 删除 */ @Transactional @Modifying @Query ( "delete from com.example.jpa.domain.User where id = ?1" ) int deleteByUserId(Long id); |
-
测试
1 2 3 4 | @Test public void testDeleteByUserId(){ Assert.assertEquals( 0 ,userRepository.deleteByUserId(0L)); } |
多表查询
第一种利用 Hibernate 的级联查询来实现,第二种是创建一个结果集的接口来接收连表查询后的结果
第一种实现:
-
定义爱好类,实现一个用户有多个爱好
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | package com.example.jpa.domain; import lombok.Data; import javax.persistence.*; import java.io.Serializable; @Data @Entity (name = "tb_hobby" ) public class Hobby implements Serializable { @Id @GeneratedValue private Long id; @Column (nullable = false , unique = true ) private String name; } |
-
用户类添加映射关系
1 2 3 | @OneToMany (fetch=FetchType.EAGER) @JoinColumn (name= "user_id" ,referencedColumnName= "id" ) private List<Hobby> hobbies; |
-
自定义查询
1 2 | @Query ( "select u from com.example.jpa.domain.User u where u.id=?1" ) User findUserHobby(Long id); |
-
测试
1 2 3 4 | @Test public void testFindUserHobby(){ Assert.assertEquals( 2 ,userRepository.findUserHobby(1L).getHobbies().size()); } |
分类:
spring boot
标签:
spring
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)