linux cpu占用率如何看
240
2022-09-06
hibernate初探之单向一对多映射
什么叫做单向一对多的映射呢?
我们首先要知道映射是有方向的,分为单向和双向。
比如班级和学生。站在班级的角度,一个班级可以有多个学生, 在这里班级就是“一”方 学生就是“多”方
这种关系就是一对多的关系,如果只站在班级的角度,那就是单向的一对多的关系。
一对多的关系我们应该怎么实现呢?
在数据库中我们会通过主外键的方式实现,在多学生表中添加一个外键指向班级
在hibernate中我们会通过在“一”的一方使用
使用工具
Junint单元测试工具mysql-connector-java-5.1.7-bin.jarhibernate 4.2.4.jar
hibernate配置文件
org.hibernate.dialect.MySQLDialect
因为我们还没有在数据库中创建表 所以要在
hibernate配置文件设置
持久化类
students 学生类
package com.scx.entity;public class Students { //学生主键 private int sId; //学生姓名 private String sName; //学生性别 private String sex; //学生年龄 private int age; public Students(int sId, String sName, String sex, int age) { this.sId = sId; this.sName = sName; this.sex = sex; this.age = age; } public Students() { } public int getsId() { return sId; } public void setsId(int sId) { this.sId = sId; } public String getsName() { return sName; } public void setsName(String sName) { this.sName = sName; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
grade 班级类
package com.scx.entity;import java.util.HashSet;import java.util.Set;public class Grade { //班级主键 private int gId; //班级名称 private String gName; //学生集合 private Set
对象关系映射文件
Students.hbm.xml
Grade.hbm.xml
注意看 在Grade.hbm.xml中我们需要配置单向的一对多关联关系
使用junit通过Hibernate API编写访问数据库的代码
import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.After;import org.junit.Before;import com.scx.entity.Grade;import com.scx.entity.Students;public class Test { private Configuration config; private ServiceRegistry serviceRegistry; private SessionFactory sessionFactory; private Session session; private Transaction transaction; @Before public void init() { //创建配置对象 config = new Configuration().configure(); //创建服务注册对象 serviceRegistry = new ServiceRegistryBuilder().applySettings( config.getProperties()).buildServiceRegistry(); //创建会话工厂对象 sessionFactory=config.buildSessionFactory(serviceRegistry); //会话对象 session=sessionFactory.openSession(); //开启事务 transaction=session.beginTransaction(); } @After public void destroy(){ transaction.commit();//提交事务 session.close();//关闭会话 sessionFactory.close();//关闭会话工厂 } @org.junit.Test public void testSave(){ Students stu1=new Students(1, "小明", "男", 15); Students stu2=new Students(2, "小红", "女", 15); Grade g1=new Grade(); Grade g2=new Grade(); g1.setgName("软件一班"); g2.setgName("软件二班"); g1.addStudents(stu1); g2.addStudents(stu2); session.save(g1); session.save(g2); session.save(stu1); session.save(stu2); }}
实例化了两个学生 两个班级 分别属于一个班级
运行结果如下:
根据班级查找班级所有学生
首先修改hibernate配置文件中的生成表策略为update
然后新添加一个测试
@org.junit.Test public void findStudentsByGrade(){ Grade g=(Grade) session.get(Grade.class, 1); System.out.println(g.getgName()); Set
运行结果:
更新学生信息
@org.junit.Test public void update(){ Grade g=new Grade(); g.setgName("软件三班"); Students stu=(Students) session.get(Students.class, 1); g.addStudents(stu); session.save(g); }
新建一个班级为软件三班 并将编号为1的学生添加到软件三班
运行结果:
删除学生
@org.junit.Test public void delete(){ Students stu=(Students) session.get(Students.class, 2); session.delete(stu); }
查找编号为2的学生 并删除
运行结果如下:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~