[Java Spring Data] Optional<> query response, orElse, orElseThrow, ifPresent

Repo:

复制代码
public interface CourseRepository extends CrudRepository<Course,Integer>{

    Optional<Course> findByName(String name);

    @Query("Select new com.example.university.view.CourseView" +
            "(c.name, c.instructor.member.lastName, c.department.name) from Course c where c.name=?1")
    Optional<CourseView> getCourseViewByName(String name);

}
复制代码

 

Test:

复制代码
    @Test
    public void runtimeErrors() {

        Course course = courseRepository.findByDepartmentName("Sciences");

        //Various ways to leverage the Optional
        CourseView view = courseRepository.getCourseViewByName("English 101").get();
        view = courseRepository.getCourseViewByName("English 101").orElseThrow();
        view = courseRepository.getCourseViewByName("English 100").orElse(
                new CourseView("dummyCourse",
                        "Bad Instructor",
                        "No Department"));
    }
复制代码

 

Usage:

复制代码
        //*******Complex Queries********
        //Leverage Optional.ifPresent to avoid null checks
        courseRepository.findByName("English 101").ifPresent(english101 -> {
            //Select c from Course c join c.prerequisites p where p.id = ?1
            System.out.println("\nFind Courses where English 101 is a prerequisite");
            courseRepository.findCourseByPrerequisite(english101.getId())
                    .forEach(System.out::println);

            //Select new com.example.university.view.CourseView
            //  (c.name, c.instructor.member.lastName, c.department.name) from Course c where c.id=?1
            System.out.println("\nCourseView for English 101 \n" +
                    courseRepository.getCourseView(english101.getId()));
        });
复制代码

 

posted @   Zhentiw  阅读(182)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-12-20 [React experimental] Fetch Modules Eagerly for SuspenseList
2019-12-20 [Algorithm] 69. Sqrt(x)
2018-12-20 [Algorithms] Build a Binary Tree in JavaScript and Several Traversal Algorithms
2016-12-20 [Compose] 14. Build curried functions
2016-12-20 [Angular Testing] Unit Testing -- Test component and service.
2014-12-20 [AngularJS] ngModelController render function
点击右上角即可分享
微信分享提示