此文件可参考hibernate工程
主键的生成方式:
1、identity 根据底层数据库的能力,来作为主键的自增长策略;适用于 mysql、db2、sqlserver等;不适用于oracle数据库;一对多和多对一
基于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>
<!-- 维护与数据库中的关系 -->
<class name="com.zhiyou100.entity.Book" table="T_book">
<id name="id" column="id" type="int">
<generator class="identity"></generator>
</id>
<!-- many-to-one:多对一 name:一方属性名 column:外键名 class: 一方的实体类 -->
<property name="name" column="name" type="string"></property>
<many-to-one name="student" column="sid"
class="com.zhiyou100.entity.Student"/>
</class>
</hibernate-mapping>
<hibernate-mapping>
<!-- 维护与数据库中的关系 -->
<class name="com.zhiyou100.entity.Student" table="T_student">
<id name="id" column="id" type="int">
<generator class="identity" />
<!-- <generator class="increment" /> -->
</id>
<property name="name" column="name" type="string"></property>
<property name="age" column="age" type="int"></property>
<!-- 声明外键为sid -->
<set name="books">
<key column="sid"></key>
<!-- one-to-many:多对一 class: 多方的实体类 -->
<one-to-many class="com.zhiyou100.entity.Book"/>
</set>
</class>
</hibernate-mapping>
测试类
//one-to-many
@Test
public void testOne2Many() {
Session session = openSession();
Student student = (Student) session.get(Student.class,3);
System.out.println(student);
Set<Book> books = student.getBooks();
for (Book book : books) {
System.out.println(book);
}
session.close();
}
懒加载
//验证懒加载的原理 (get不进行懒加载,load进行懒加载)
@Test
public void testLazyload() {
Session s = openSession();
Student student = (Student) s.get(Student.class, 2);
System.out.println("-----------------------------");
System.out.println(student);
s.close();
}
@Test
public void testLazyload2() {
Session s = openSession();
Student student = (Student) s.load(Student.class, 2);
System.out.println("-----------------------------");
//你获取数据时它才运行SQL语句
System.out.println(student);
s.close();
}