JPA OneToMany 和 ManyToOne 超简单入门示例

什么是 OneToMany 和 ManyToOne? OneToMany(一对多):一个东西可以对应多个另一个东西,比如一个用户有多个好友关系 ManyToOne(多对一):多个东西对应一个东西,比如多个好友关系都属于同一个用户 用好友关系举例理解 1. 用户实体(One 方) @Entity data class User { @Id var id: Long? = null var username: String = "" // 一个用户有多个好友关系,mappedBy 指向关联的属性名 @OneToMany(mappedBy = "user") var friendRelations: List<Friendship> = emptyList() } 2. 好友关系实体(Many 方) @Entity data class Friendship { @Id var id: Long? = null // 多个好友关系属于一个用户,@JoinColumn 定义外键列 @ManyToOne @JoinColumn(name = "user_id") var user: User? = null var friendId: Long = 0 } 核心配置一句话解释 @OneToMany:放在 “一” 的那一方,告诉 JPA 这个东西可以有多个关联对象 mappedBy = “user”:表示关联关系由对方(Friendship)的 user 属性维护 @ManyToOne:放在 “多” 的那一方,表示这个东西属于另一个东西 @JoinColumn(name = “user_id”):在数据库表中创建 user_id 列作为外键

July 5, 2025 · 1 min

Create a RESTful Web Service With a Database Using Spring Boot

没有什么比官方教程更好的了 官方链接 那就做个简单的 demo 方便以后查询 创建项目,添加依赖 Web | Spring Web SQL | Spring Data JDBC SQL | H2 Database 创建数据类 @Table("TASKS") data class Task(val name: String, @Id var id: String? = null) 创建 Controller 层 @RestController @RequestMapping("/") class TaskController(private val service: TaskService) { @GetMapping fun listTasks() = ResponseEntity.ok(service.findTasks()) @GetMapping("/{id}") fun getTaskById(@PathVariable id: String) = service.findTaskById(id).toResponseEntity() @DeleteMapping("/{id}") fun delete(@PathVariable id: String) = service.deleteTaskById(id) @PostMapping fun post(@RequestBody task: Task): ResponseEntity<Task> { val savedTask = service.save(task) return ResponseEntity.created(URI("/${savedTask.id}")).body(savedTask) } private fun Task?.toResponseEntity() = this?.let { ResponseEntity.ok(it) } ?: ResponseEntity.notFound().build() } 创建数据库接口 interface TaskRepository : CrudRepository<Task, String> 实现Service层 @Service class TaskService(private val db: TaskRepository) { fun findTasks(): List<Task> = db.findAll().toList() fun findTaskById(id: String): Task? = db.findByIdOrNull(id) fun save(task: Task): Task = db.save(task) fun deleteTaskById(id: String) = db.deleteById(id) } 创建数据库初始化脚本 在 src/main/resources/schema.sql 创建: CREATE TABLE IF NOT EXISTS tasks ( id VARCHAR(60) DEFAULT RANDOM_UUID() PRIMARY KEY, name VARCHAR NOT NULL ); 配置application.properties spring.application.name=demo spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:file:./data/testdb spring.datasource.username=name spring.datasource.password=password spring.sql.init.schema-locations=classpath:schema.sql spring.sql.init.mode=always 这里的 name 是项目名称,第三行的数据库 URL 有两种选择: ...

June 23, 2025 · 2 min