16hibernate hibernate学生、课程、分数设计案例

本文介绍了如何利用联合主键和嵌入式对象实现复杂的数据表映射,通过示例展示了如何在Java中使用Hibernate进行数据库操作,包括对象的保存、加载和关联操作。
1.使用联合主键@Embedded
	a.实现Serializable接口

student:
id
name

course://student和course是ManyToMany
id
name

score:(同时是student和course连接表)
//studentid和courseid不能使用自动生成
studentid//先存student,然后把id拿出来放到score表里
courseid//先存course,然后把id拿出来放到score表里
score


2.不使用联合主键(较方便)
student://和score是OneToMany
id
name

course://和score是OneToMany
id
name

score:
id
studentid
courseid
score

@Entity
public class Student
{
	private int id;
	private String name;
	@ManyToMany
	@JoinTable(name="score",
		joinColumns=@JoinColumn(name="student_id"),
		inverseJoinColumns=@JoinColumn(name="course_id")
		)
	private Set<Course> courses = new HashSet<Course>();
	//hibernate会以此为根据建表
	//会将student_id和course_id设置为联合主键
	//此案例中score表手动创建
}

@Entity
public class Course
{
	private int id;
	private String name;
}

@Entity
@Table(name="score")
public class Score
{
	@Id
	@GeneratedValue
	private int id;
	private int score;
	@ManyToOne
	@JoinColumn(name="student_id")
	private Student student;
	@ManyToOne
	@JoinColumn(name="course_id")
	private Course course;
}

public void testSave(){
	Student s = new Student();
	s.setName("zs");
	Course c = new Course();
	c.setName("java");
	Score score = new Score();
	score.setCourse(c);
	score.setStudent(s);

	Session session = sessionFactory.openSession();
	session.beginTransaction();
	session.save(s);
	session.save(c);
	session.save(score);

	session.getTransaction().commit();
	session.close();
}

public void testLoad(){
	testSave();
	Session session = sessionFactory.openSession();
	session.beginTransaction();

	Student s = (Student)session.load(Student.class,1);
	for(Course c:s.getCourses()){
		System.out.println(c.getName());
	}

	session.getTransaction().commit();
	session.close();
}

### 基于Java的学生成绩管理系统课程设计概述 学生成绩管理系统是一个典型的Web应用程序案例,旨在帮助教育机构高效管理和维护学生的学习记录。此类系统通常涉及多个方面的工作流程优化和技术栈的选择。 #### 技术选型与架构说明 对于基于Java的学生成绩管理系统而言,常见的技术组合包括但不限于: - **前端层**:HTML/CSS/JavaScript用于构建用户交互界面;Bootstrap框架简化响应式布局的设计[^4]。 - **业务逻辑层**:Spring MVC作为控制器组件负责接收HTTP请求并调用相应的服务类来处理业务需求;此外还可以考虑引入MyBatis或Hibernate ORM工具映射实体对象到关系型数据库表结构中去[^3]。 - **持久化存储层**:MySQL被广泛应用于保存应用所需的数据模型实例,如学生档案、科目详情及考试分数等信息[^1]。 - **安全机制**:为了保障平台的安全性和稳定性,在身份验证环节可选用Shiro或者Spring Security库提供认证授权支持。 #### 功能模块划分 整个项目大致可分为以下几个子系统: - 用户管理:允许注册新账号并对现有成员执行增删改查操作; - 权限控制:定义不同角色所能访问资源范围及其对应的操作权限集; - 学籍事务:录入新生基本信息、调整班级分配情况以及办理休退手续等功能; - 教务安排:开设学期计划内的公共必修课目列表并向特定年级推送通知公告; - 成绩评定:收集期末测验结果录入系统内供查询统计分析之用[^2]。 #### 示例代码片段展示 下面给出一段简单的`StudentController.java`文件中的方法用来新增一条学员记录: ```java // StudentController.java @RestController @RequestMapping("/students") public class StudentController { @Autowired private StudentService studentService; /** * 添加新的学生条目 */ @PostMapping("") public ResponseEntity<String> addNewStudent(@RequestBody Student newStudent){ try { boolean result = this.studentService.save(newStudent); if(result){ return ResponseEntity.ok("成功添加"); }else{ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服务器错误"); } } catch (Exception e) { logger.error(e.getMessage(),e); return ResponseEntity.badRequest().body("参数异常"); } } } ``` 此段程序展示了如何利用RESTful API风格暴露接口给外部客户端调用,并通过依赖注入的方式获取到了具体的服务实现类来进行实际的数据存取工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值