以一个案例来说明:
工程结构:
代码:
student类:
package pojo_f;
//P_id(id,学号)
public class student{
private Integer id;
private String name;
private person person;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public person getPerson() {
return person;
}
public void setPerson(person person) {
this.person = person;
}
@Override
public String toString() {
return "student id=" + id + ", name=" + name;
}
}
person类:
package pojo_f;
import java.util.HashSet;
import java.util.Set;
public class person {
private long id;
private String name;
private Set<student> students=new HashSet<student>();
//个人表(id,姓名,性别)
public Set<student> getStudents() {
return students;
}
public void setStudents(Set<student> students) {
this.students = students;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "person =" + id + ", name=" + name;
}
}
student的相关配置student.hbm.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="pojo_f">
<class name="student" table="学生(关联)">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" type="string" />
<many-to-one name="person" class="person"></many-to-one>
</class>
</hibernate-mapping>
person的相关配置person.hbm.xml文件:
、
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="pojo_f">
<class name="person" table="中国人">
<id name="id" column="id">
<generator class="native" />
</id>
<property name="name" type="string" />
<set name="students" inverse="true">
<!-- inverse="true"表示本方不维护关联关系 -->
<key column="person_Id"/>
<one-to-many class="student"/>
</set>
</class>
</hibernate-mapping>
test测试文件:
package pojo_f;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class test {
/**
* @param args
*/
private static SessionFactory sessionFactory=new Configuration()
.configure("hibernate.cfg.xml")//读取指定的主配置文件
.addClass(person.class)
.addClass(student.class)
.buildSessionFactory();
public static void main(String[] args) {
// TODO Auto-generated method stub
Session session=sessionFactory.openSession();
Transaction transaction=session.beginTransaction();//事务
//开始一个事物
//------------------------------------------------------------
//构建对象
person per=new person();
per.setName("九江学院peson");
student stu1=new student();
stu1.setName("佐酒先生");
student stu2=new student();
stu2.setName("潘大掌柜");
stu1.setPerson(per);
stu2.setPerson(per);
per.getStudents().add(stu1);
per.getStudents().add(stu2);
session.save(per);
session.save(stu1);
session.save(stu2);
System.out.println(per);
System.out.println(stu1);
System.out.println(stu2);
//提交事物
//------------------------------------------------------------
transaction.commit();//提交事务
System.out.println("恭喜您,保存成功");
session.close(); //关闭session,释放资源
sessionFactory.close();
//显示信息
}
}
另外,还有映射文件hibernate.cfg.xml文件的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- ======配置数据库信息======= -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!-- ======辅助配置======= -->
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
实体与映射关系配置总结:
<!-- users属性,本类与User的一对多 -->格式:?1 属性,本类与 ?2 的 ?3
?1 属性名
?2 关联对类型
?3 关系
多对一:
<many-to-one name="?1属性" class="?2" column="属性_id"></many-to-one>
注:column中的属性id还要写在与之对应的实体的column上
<set name="?1属性">
<key column="属性_id"></key>
<one-to-many class="?2"/>
</set>
多对多(Set):
比如user与role
user属性,本类与user的多对多
<key column="roleId"></key>
<many-to-many class="?2" column="userId"></many-to-many>
</set>
role属性,本类与user的多对多:
<set name="?1属性" table="user_role">
<key column="userId"></key>
<many-to-many class="?2" column="roleId"></many-to-many>
</set>