JPA & H2内存数据库 demo

本文基于SpringBoot工程,引用的依赖包有thymeleaf、springmvc、jpa、h2、mysql,考虑篇幅,有些代码省略。

1、使用JPA需继承CrudRepository接口

继承CrudRepository接口的好处是不用写sql语句。

创建com.zzz.ssjpa.repository.UserRepository.java接口(repository层相当于dao层),代码如下:

public interface UserRepository extends CrudRepository<User, Long>{
}

com.zzz.ssjpa.controller.UserController.java添加测试代码如下:

	/**
	 * @Title: register   
	 * @Description: 
	 * 注册页面的表单提交user数据到这里,
	 * 调用repository的save方法存储数据到h2内存数据库中
	 * @param: @param user
	 * @param: @return 参数
	 * @return: ModelAndView 返回类型
	 * @throws
	 */
	@RequestMapping("/user/register.action")
	public ModelAndView register(User user) {
		System.out.println(user);
		//System.out.println("register已经运行");
		
		userRepository.save(user);//并没有具体实现,因为遵循了JPA
		
		return new ModelAndView("redirect:/index.action");
	}

2、配置h2控制台

application.properties内容如下:

#thymeleaf编码
spring.thymeleaf.encoding=UTF-8
#热部署静态文件
spring.thymeleaf.cache=false
#使用HTML5标准
spring.thymeleaf.mode=HTML5

#使用h2控制台显示,在项目网址后加/h2-console回车后在浏览器中显示
spring.h2.console.enabled=true

3、运行测试

在注册表单中提交user数据后,查看h2数据库,在浏览器中输入网址http://localhost:8080/h2-console:
在这里插入图片描述
需要h2的jdbc地址才可以登录,在eclipse控制台中找到jdbc地址,复制粘贴上去,就可以connect了:
在这里插入图片描述
查询提交并存储的user数据:
在这里插入图片描述
看到数据就成功了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个使用 Spring Boot 框架编写的简单排班示例。这个示例使用了 Spring Data JPA 来访问数据库数据库使用了 H2 内存数据库。你可以将代码复制到一个 Java 项目中,并添加必要的依赖来运行它。 这个示例的核心是一个名为 `Shift` 的实体类,它表示一个班次。`Shift` 类有三个属性:`id`、`name` 和 `startTime`。`id` 是主键,`name` 表示班次的名称,`startTime` 表示班次开始时间。 ```java @Entity public class Shift { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private LocalTime startTime; // 构造函数、getter 和 setter 略 } ``` 接下来是一个名为 `ShiftRepository` 的接口,它继承了 Spring Data JPA 的 `JpaRepository` 接口。`ShiftRepository` 接口用于访问数据库中的班次数据。 ```java @Repository public interface ShiftRepository extends JpaRepository<Shift, Long> { } ``` 然后是一个名为 `Schedule` 的实体类,它表示一个排班计划。`Schedule` 类有三个属性:`id`、`date` 和 `shift`。`id` 是主键,`date` 表示排班日期,`shift` 表示当天的班次。 ```java @Entity public class Schedule { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private LocalDate date; @ManyToOne private Shift shift; // 构造函数、getter 和 setter 略 } ``` 接下来是一个名为 `ScheduleRepository` 的接口,它继承了 Spring Data JPA 的 `JpaRepository` 接口。`ScheduleRepository` 接口用于访问数据库中的排班计划数据。 ```java @Repository public interface ScheduleRepository extends JpaRepository<Schedule, Long> { Schedule findByDate(LocalDate date); } ``` 然后是一个名为 `ScheduleService` 的服务类,它提供了一些方法来操作排班计划数据。`ScheduleService` 类使用了 `ShiftRepository` 和 `ScheduleRepository` 接口来访问数据库。 ```java @Service public class ScheduleService { private final ShiftRepository shiftRepository; private final ScheduleRepository scheduleRepository; public ScheduleService(ShiftRepository shiftRepository, ScheduleRepository scheduleRepository) { this.shiftRepository = shiftRepository; this.scheduleRepository = scheduleRepository; } public List<Shift> getAllShifts() { return shiftRepository.findAll(); } public Shift getShiftById(Long id) { return shiftRepository.findById(id).orElse(null); } public void saveSchedule(LocalDate date, Long shiftId) { Shift shift = shiftRepository.findById(shiftId).orElse(null); if (shift == null) { throw new IllegalArgumentException("Invalid shift ID: " + shiftId); } Schedule schedule = new Schedule(); schedule.setDate(date); schedule.setShift(shift); scheduleRepository.save(schedule); } public void deleteSchedule(LocalDate date) { Schedule schedule = scheduleRepository.findByDate(date); if (schedule != null) { scheduleRepository.delete(schedule); } } public List<Schedule> getAllSchedules() { return scheduleRepository.findAll(); } } ``` 最后是一个名为 `ScheduleController` 的控制器类,它处理 HTTP 请求并调用 `ScheduleService` 类中的方法来操作排班计划数据。 ```java @RestController public class ScheduleController { private final ScheduleService scheduleService; public ScheduleController(ScheduleService scheduleService) { this.scheduleService = scheduleService; } @GetMapping("/shifts") public List<Shift> getAllShifts() { return scheduleService.getAllShifts(); } @GetMapping("/shifts/{id}") public Shift getShiftById(@PathVariable Long id) { return scheduleService.getShiftById(id); } @PostMapping("/schedules") public void saveSchedule(@RequestBody Map<String, Object> payload) { LocalDate date = LocalDate.parse((String) payload.get("date")); Long shiftId = Long.parseLong((String) payload.get("shiftId")); scheduleService.saveSchedule(date, shiftId); } @DeleteMapping("/schedules/{date}") public void deleteSchedule(@PathVariable String date) { scheduleService.deleteSchedule(LocalDate.parse(date)); } @GetMapping("/schedules") public List<Schedule> getAllSchedules() { return scheduleService.getAllSchedules(); } } ``` 这个示例使用了 H2 内存数据库,因此你不需要安装任何数据库软件。你可以在 `src/main/resources/application.properties` 文件中设置数据库相关的配置: ``` spring.datasource.url=jdbc:h2:mem:testdb spring.jpa.hibernate.ddl-auto=create spring.h2.console.enabled=true spring.h2.console.path=/h2-console ``` 最后,你可以使用以下命令来编译和运行这个示例: ``` ./mvnw spring-boot:run ``` 这个示例提供了以下几个 HTTP 接口: - `GET /shifts`:获取所有班次; - `GET /shifts/{id}`:根据 ID 获取一个班次; - `POST /schedules`:创建一个排班计划; - `DELETE /schedules/{date}`:删除一个排班计划; - `GET /schedules`:获取所有排班计划。 你可以使用 Postman 或类似的工具来测试这些接口。这个示例可以作为一个简单的排班系统的基础,你可以根据自己的需求进行扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值