湖南平台网站建设企业seo基础知识
news/
2025/9/23 3:07:08/
文章来源:
湖南平台网站建设企业,seo基础知识,网站建设类的计入什么科目,觉 网站在hibernate中#xff0c;通常配置对象关系映射关系有两种#xff0c;一种是基于xml的方式#xff0c;另一种是基于annotation的注解方式#xff0c;熟话说#xff0c;萝卜青菜#xff0c;可有所爱#xff0c;每个人都有自己喜欢的配置方式#xff0c;我在试了这两种方…在hibernate中通常配置对象关系映射关系有两种一种是基于xml的方式另一种是基于annotation的注解方式熟话说萝卜青菜可有所爱每个人都有自己喜欢的配置方式我在试了这两种方式以后发现使用annotation的方式可以更简介所以这里就简单记录下通过annotation来配置各种映射关系在hibernate4以后已经将annotation的jar包集成进来了如果使用hibernate3的版本就需要引入annotation的jar包。 一、单对象操作 Entity --- 如果我们当前这个bean要设置成实体对象就需要加上Entity这个注解
Table(namet_user) ---- 设置数据库的表名
public class User { private int id; private String username; private String password; private Date born; private Date registerDate; Column(nameregister_date) --- Column中的name属性对应了数据库的该字段名字里面还有其他属性例如lengthnullable等等 public Date getRegisterDate() { return registerDate; } public void setRegisterDate(Date registerDate) { this.registerDate registerDate; } Id --- 定义为数据库的主键ID (建议不要在属性上引入注解因为属性是private的如果引入注解会破坏其封装特性所以建议在getter方法上加入注解) GeneratedValue ---- ID的生成策略为自动生成 public int getId() { return id; } public void setId(int id) { this.id id; } ............ } 最后只需要在hibernate.cfg.xml文件里面将该实体类加进去即可 !-- 基于annotation的配置 --mapping classcom.xiaoluo.bean.User/
!-- 基于hbm.xml配置文件 --mapping resourcecom/xiaoluo/bean/User.hbm.xml/ 这样我们就可以写测试类来进行我们的CRUD操作了。 二、一对多的映射(one-to-many) 这里我们定义了两个实体类一个是ClassRoom一个是Student这两者是一对多的关联关系。 ClassRoom类 Entity
Table(namet_classroom)
public class ClassRoom
{private int id; private String className; private SetStudent students; public ClassRoom() { students new HashSetStudent(); } public void addStudent(Student student) { students.add(student); } Id GeneratedValue public int getId() { return id; } public void setId(int id) { this.id id; } public String getClassName() { return className; } public void setClassName(String className) { this.className className; } OneToMany(mappedByroom) --- OneToMany指定了一对多的关系mappedByroom指定了由多的那一方来维护关联关系mappedBy指的是多的一方对1的这一方的依赖的属性(注意如果没有指定由谁来维护关联关系则系统会给我们创建一张中间表) LazyCollection(LazyCollectionOption.EXTRA) --- LazyCollection属性设置成EXTRA指定了当如果查询数据的个数时候只会发出一条 count(*)的语句提高性能 public SetStudent getStudents() { return students; } public void setStudents(SetStudent students) { this.students students; } } Student类 Entity
Table(namet_student)
public class Student
{private int id; private String name; private int age; private ClassRoom room; ManyToOne(fetchFetchType.LAZY) --- ManyToOne指定了多对一的关系fetchFetchType.LAZY属性表示在多的那一方通过延迟加载的方式加载对象(默认不是延迟加载) JoinColumn(namerid) --- 通过 JoinColumn 的name属性指定了外键的名称 rid (注意如果我们不通过JoinColum来指定外键的名称系统会给我们声明一个名称) public ClassRoom getRoom() { return room; } public void setRoom(ClassRoom room) { this.room room; } Id GeneratedValue public int getId() { return id; } public void setId(int id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } public int getAge() { return age; } public void setAge(int age) { this.age age; } } 三、一对一映射(One-to-One) 一对一关系这里定义了一个Person对象以及一个IDCard对象 Person类 Entity
Table(namet_person)
public class Person
{private int id; private String name; private IDCard card; OneToOne(mappedByperson) --- 指定了OneToOne的关联关系mappedBy同样指定由对方来进行维护关联关系 public IDCard getCard() { return card; } public void setCard(IDCard card) { this.card card; } Id GeneratedValue public int getId() { return id; } public void setId(int id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } } IDCard类 Entity
Table(namet_id_card)
public class IDCard
{private int id; private String no; private Person person; Id GeneratedValue public int getId() { return id; } public void setId(int id) { this.id id; } public String getNo() { return no; } public void setNo(String no) { this.no no; } OneToOne --- OnetoOne指定了一对一的关联关系一对一中随便指定一方来维护映射关系这里选择IDCard来进行维护 JoinColumn(namepid) --- 指定外键的名字 pid public Person getPerson() { return person; } public void setPerson(Person person) { this.person person; } } 注意:在判断到底是谁维护关联关系时可以通过查看外键哪个实体类定义了外键哪个类就负责维护关联关系。 四、Many-to-Many映射(多对多映射关系) 多对多这里通常有两种处理方式一种是通过建立一张中间表然后由任一一个多的一方来维护关联关系另一种就是将多对多拆分成两个一对多的关联关系 1.通过中间表由任一一个多的一方来维护关联关系 Teacher类 Entity
Table(namet_teacher)
public class Teacher
{private int id; private String name; private SetCourse courses; public Teacher() { courses new HashSetCourse(); } public void addCourse(Course course) { courses.add(course); } Id GeneratedValue public int getId() { return id; } public void setId(int id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } ManyToMany(mappedByteachers) --- 表示由Course那一方来进行维护 public SetCourse getCourses() { return courses; } public void setCourses(SetCourse courses) { this.courses courses; } } Course类 Entity
Table(namet_course)
public class Course
{private int id; private String name; private SetTeacher teachers; public Course() { teachers new HashSetTeacher(); } public void addTeacher(Teacher teacher) { teachers.add(teacher); } ManyToMany --- ManyToMany指定多对多的关联关系 JoinTable(namet_teacher_course, joinColumns{ JoinColumn(namecid)}, inverseJoinColumns{ JoinColumn(name tid) }) --- 因为多对多之间会通过一张中间表来维护两表直接的关系所以通过 JoinTable 这个注解来声明name就是指定了中间表的名字JoinColumns是一个 JoinColumn类型的数组表示的是我这方在对方中的外键名称我方是Course所以在对方外键的名称就是 ridinverseJoinColumns也是一个 JoinColumn类型的数组表示的是对方在我这放中的外键名称对方是Teacher所以在我方外键的名称就是 tid public SetTeacher getTeachers() { return teachers; } public void setTeachers(SetTeacher teachers) { this.teachers teachers; } Id GeneratedValue public int getId() { return id; } public void setId(int id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } } 2.将Many-to-Many拆分成两个One-to-Many的映射(Admin、Role、AdminRole) Admin类 Entity
Table(namet_admin)
public class Admin
{private int id; private String name; private SetAdminRole ars; public Admin() { ars new HashSetAdminRole(); } public void add(AdminRole ar) { ars.add(ar); } Id GeneratedValue public int getId() { return id; } public void setId(int id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } OneToMany(mappedByadmin) --- OneToMany关联到了AdminRole这个类由AdminRole这个类来维护多对一的关系mappedByadmin LazyCollection(LazyCollectionOption.EXTRA) public SetAdminRole getArs() { return ars; } public void setArs(SetAdminRole ars) { this.ars ars; } } Role类 Entity
Table(namet_role)
public class Role
{private int id; private String name; private SetAdminRole ars; public Role() { ars new HashSetAdminRole(); } public void add(AdminRole ar) { ars.add(ar); } Id GeneratedValue public int getId() { return id; } public void setId(int id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } OneToMany(mappedByrole) --- OneToMany指定了由AdminRole这个类来维护多对一的关联关系mappedByrole LazyCollection(LazyCollectionOption.EXTRA) public SetAdminRole getArs() { return ars; } public void setArs(SetAdminRole ars) { this.ars ars; } } AdminRole类 Entity
Table(namet_admin_role)
public class AdminRole
{private int id; private String name; private Admin admin; private Role role; Id GeneratedValue public int getId() { return id; } public void setId(int id) { this.id id; } public String getName() { return name; } public void setName(String name) { this.name name; } ManyToOne --- ManyToOne关联到Admin JoinColumn(nameaid) public Admin getAdmin() { return admin; } public void setAdmin(Admin admin) { this.admin admin; } ManyToOne --- JoinColumn(namerid) public Role getRole() { return role; } public void setRole(Role role) { this.role role; } } 小技巧:通过hibernate来进行插入操作的时候不管是一对多、一对一还是多对多都只需要记住一点在哪个实体类声明了外键就由哪个类来维护关系在保存数据时总是先保存的是没有维护关联关系的那一方的数据后保存维护了关联关系的那一方的数据如 Person p new Person();p.setName(xiaoluo);session.save(p);IDCard card new IDCard();card.setNo(1111111111); card.setPerson(p); session.save(card); 以上就是对hibernate annotation注解方式来配置映射关系的一些总结。转载于:https://www.cnblogs.com/loong-hon/p/4926080.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911193.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!