山西农大21级SpringDataJPA实训课堂笔记

版权申诉
0 下载量 140 浏览量 更新于2024-11-10 收藏 899KB ZIP 举报
资源摘要信息:"sxau-山西农大21级 实训" sxau-山西农大21级实训是针对山西农业大学2021级学生开展的实践教学活动,旨在通过实训将课堂上所学的理论知识与实际应用相结合,提高学生的实践操作能力。实训内容涉及SpringDataJPA等现代信息技术,而相关课堂笔记则为SpringDataJPA的详细学习记录。SpringDataJPA是Spring框架的一部分,它简化了数据持久层的操作,通过接口定义及注解配置,快速实现对数据库的访问和操作,大大提高了Java应用开发的效率。 知识点一:SpringDataJPA的概述 SpringDataJPA是Spring框架中的一个模块,它主要用于简化数据持久层的操作,对Java Persistence API (JPA) 提供了额外的便利和功能。JPA是一个Java持久化规范,用于简化Java持久化操作,它基于ORM(对象关系映射)技术,使得Java开发人员可以更专注于业务逻辑的实现,而不需要过多关注底层数据库操作。SpringDataJPA为JPA提供了一个基于Spring的编程模型,让开发者能够以声明性的方式操作数据层,并且提供了一系列自动配置和约定优于配置的原则。 知识点二:SpringDataJPA的基本使用 在使用SpringDataJPA之前,首先需要配置好Spring环境和数据库环境。然后通过maven或gradle等构建工具引入SpringDataJPA和数据库驱动的依赖。接下来需要配置JPA相关的bean,包括实体管理器工厂(EntityManagerFactory)、事务管理器(TransactionManager)等。在SpringBoot项目中,由于其约定优于配置的理念,这些配置可以大大简化。 SpringDataJPA的核心是Repository接口,通过继承SpringDataJPA提供的各种Repository接口,可以快速定义数据访问层。例如,继承`CrudRepository`或`JpaRepository`接口,就可以直接使用它们提供的标准CRUD操作,而无需手动编写实现代码。通过自定义查询方法,SpringDataJPA支持在接口方法名中使用约定规则来自动生成查询,如使用“find...By...”、“read...By...”、“get...By...”等命名规则定义方法。 知识点三:SpringDataJPA的高级特性 SpringDataJPA提供了一些高级特性,包括: 1. Specifications(规范查询):允许通过Java代码定义复杂的查询,类似于Hibernate Criteria API。 2. QueryDSL集成:这是一个类型安全的查询构建框架,可以与SpringDataJPA无缝集成。 3. Auditing(审计):自动跟踪实体的创建时间和最后修改时间。 4. 自定义Repository接口实现:可以为特定业务场景编写自定义方法的实现。 5. 事务管理:SpringDataJPA可以和Spring的声明式事务管理无缝集成,提供了灵活的事务处理能力。 知识点四:实训与SpringDataJPA的结合应用 在实训中,学生可能会被要求完成一些具体的任务,比如设计一个简单的数据库模型,并通过SpringDataJPA实现对该模型的基本增删改查操作。实训过程可能会涉及以下内容: 1. 实体类的设计:设计与数据库表对应的Java实体类,定义字段、注解等。 2. Repository接口的实现:根据实训要求,实现一个或多个自定义的Repository接口。 3. 业务逻辑层(Service)的编写:编写业务逻辑代码,调用Repository接口提供的方法。 4. 控制器层(Controller)的实现:创建RESTful API或MVC控制器,接收前端请求并调用服务层。 5. 测试用例的编写:编写单元测试和集成测试,验证数据访问层的功能正确性。 6. 事务管理的应用:在必要时使用Spring的声明式事务管理来管理数据库事务。 通过实训,学生能够将SpringDataJPA理论知识应用到实际开发中,加深对数据持久化操作和企业级应用开发流程的理解,为将来从事相关工作打下坚实的基础。

public void initalCourse() { File file = new File("course.bat"); /** * 判断这个文件或者目录是否存在,默认是true存在的,如果不存在则为false */ if (!file.exists()) { List<Course> list = new ArrayList<>(); //创建课程对象 Course course1 = new Course(1001, "初始化HTML5", "前端开发", 30, "30小时", "teacherZhang"); Course course2 = new Course(1002, "HTML5+CSS3", "前端开发", 40, "40小时", "teacherZhang"); Course course3 = new Course(1003, "javaSE入门", "后端开发", 40, "90小时", "lisi"); Course course4 = new Course(1004, "MYSQL数据库", "后端开发", 50, "50小时", "zhangsan"); //将所有课程添加到集合中 list.add(course1); list.add(course2); list.add(course3); list.add(course4); //将集合添加到文件中 saveCourse(list); } } /** * 查询全部课程的信息 */ private void showAllCourse() { //调用显示全部的课程的方法 if (role != null) { List<Course> query = role.query(); showList(query); } } private void showList(List<Course> list){ System.out.println("课程编号\t课程名称\t\t课程类别\t\t总课时\t总时长\t主讲老师"); for (Course course:list) { System.out.println(course);//调用了Course默认的toString } } public List<Course> query() { if (teaAuthority == null) { System.out.println("对不起,您还没有登录,请先登录再去操作数据"); } else { return teaAuthority.getAllCourse(); } return null; } Exception in thread "main" java.lang.NullPointerException at com.sxau.learningsystem.service.impl.SuperServiceImpl.showList(SuperServiceImpl.java:255) at com.sxau.learningsystem.service.impl.SuperServiceImpl.showCourseByType(SuperServiceImpl.java:268) at com.sxau.learningsystem.service.impl.SuperServiceImpl.showTeacherMenu(SuperServiceImpl.java:167) at com.sxau.learningsystem.service.impl.SuperServiceImpl.accreditRole(SuperServiceImpl.java:145) at com.sxau.learningsystem.service.impl.SuperServiceImpl.mainMenu(SuperServiceImpl.java:46) at com.sxau.learningsystem.test.Test.main(Test.java:14)

2023-07-12 上传

public void initalCourse() { File file = new File("course.bat"); /** 判断这个文件或者目录是否存在,默认是true存在的,如果不存在则为false */ if (!file.exists()) { List<Course> list = new ArrayList<>(); //创建课程对象 Course course1 = new Course(1001, "初始化HTML5", "前端开发", 30, "30小时", "teacherZhang"); Course course2 = new Course(1002, "HTML5+CSS3", "前端开发", 40, "40小时", "teacherZhang"); Course course3 = new Course(1003, "javaSE入门", "后端开发", 40, "90小时", "lisi"); Course course4 = new Course(1004, "MYSQL数据库", "后端开发", 50, "50小时", "zhangsan"); //将所有课程添加到集合中 list.add(course1); list.add(course2); list.add(course3); list.add(course4); //将集合添加到文件中 saveCourse(list); } } /** 查询全部课程的信息 */ private void showAllCourse() { //调用显示全部的课程的方法 if (role != null) { List<Course> query = role.query(); showList(query); } } private void showList(List<Course> list){ System.out.println("课程编号\t课程名称\t\t课程类别\t\t总课时\t总时长\t主讲老师"); for (Course course:list) { System.out.println(course);//调用了Course默认的toString } } public List<Course> query() { if (teaAuthority == null) { System.out.println("对不起,您还没有登录,请先登录再去操作数据"); } else { return teaAuthority.getAllCourse(); } return null; } 这里for (Course course:list) {报错Exception in thread "main" java.lang.NullPointerException at com.sxau.learningsystem.service.impl.SuperServiceImpl.showList(SuperServiceImpl.java:255)

2023-07-12 上传