Hibernate入门07_继承映射02_joined方式
2017-06-03 22:42
567 查看
一、hibernate继承映射之joined方式
joined方式:子类从父类继承的字段存放在父类的表里,子类自己独有的字段存在自己的表里二、还是以Student继承Person为例
三、代码
public class Person { private Integer id; private String name; private String age; //get/set... } public class Student extends Person { private String school; //get/set... }
Person.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2017-3-27 22:49:29 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping package="com.hibernate.n2n"> <class name="Person" table="PERSONS"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" /> </property> <property name="age" type="java.lang.String"> <column name="AGE" /> </property> <joined-subclass name="Student" table="STUDENTS"> <key column="STUDENT_ID"></key> <property name="school" type="string" column="SCHOOL"></property> </joined-subclass> </class> </hibernate-mapping>
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 配置链接数据库的基本信息 --> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/hibernate01</property> <!-- hibernate的基本信息 --> <!-- hibernate使用的数据库方言 --> <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!-- 执行操作时是否在控制台打印sql语句 --> <property name="show_sql">true</property> <!-- 是否对sql进行格式化 --> <property name="format_sql">true</property> <!-- 指定自动生成数据表的策略 --> <property name="hbm2ddl.auto">update</property> <!-- 设置hibernate的隔离级别 --> <property name="connection.isolation">2</property> <!-- 删除对象后,设置其OID为null --> <property name="use_identifier_rollback">true</property> <!-- 配置C3P0数据源 --> <property name="c3p0.max_size">100</property> <property name="c3p0.min_size">5</property> <property name="c3p0.acquire_increment">2</property> <property name="c3p0.idle_test_period">2000</property> <property name="c3p0.timeout">2000</property> <property name="c3p0.max_statements">10</property> <!-- 设置JDBC的statement读取数据库的时候每次从数据库中读取记录条数,这个值100合适,太大会损耗内存,小了速度慢 --> <property name="jdbc.fetch_size">100</property> <!-- 设置数据库进行批量删除,更新,插入的时候批次的大小,30比较合适 --> <property name="jdbc.batch_size">30</property> <!-- 指定关联的hbm.xml文件 --> <mapping resource="com/hibernate/n2n/Person.hbm.xml"/> </session-factory> </hibernate-configuration>
测试代码,Test
package com.hibernate.n2n; import static org.junit.Assert.*; import java.util.List; import java.util.Set; 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 org.junit.Test; public class HibernateTest { private SessionFactory sessionFactory; private Session session; private Transaction transaction; /*** * 插入性能稍弱 */ @Test public void testSave(){ Person person = new Person(); person.setAge("22"); person.setName("AA"); session.save(person); Student student = new Student(); student.setSchool("BB"); student.setAge("18"); student.setName("CC"); session.save(student); } /*** * 查询性能也稍弱 * 没有冗余的字段 */ @Test public void testQuery(){ //查询父类数据,只需查询一张表 List<Person> persons = session.createQuery("FROM Person").list(); System.out.println(persons.size()); //查询父类数据,也只需查询一张表 List<Student> students = session.createQuery("FROM Student").list(); System.out.println(students.size()); } @Before public void init() { System.out.println("HibernateTest.init()"); // 1.创建一个sessionFactory对象 Configuration configuration = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); // 2.创建一个session对象 session = sessionFactory.openSession(); // 3.开启事务 transaction = session.beginTransaction(); } @After public void destroy() { System.out.println("HibernateTest.destroy()"); // 5.提交事务 transaction.commit(); // 6.关闭session session.close(); // 7.关闭SessionFactory sessionFactory.close(); } }
四,运行结果
相关文章推荐
- Hibernate入门07_继承映射03_union方式
- Hibernate入门07_继承映射01_discriminator方式
- hibernate中继承映射的三种方式(SINGLE_TABLE,TABLE_PER_CLASS,JOINED)
- Hibernate4自学入门(九)——映射继承
- Hibernate入门(5):关联映射&继承映射
- Hibernate_映射_继承结构映射2_另外两种映射方式
- hibernate 继承映射 joined-subclass
- hibernate继承关系的映射(single_table,class_per_table,joined)
- Hibernate入门09 - 继承映射2
- 框架 day33 Hibernate,组件映射,继承映射,抓取(检索)策略-优化,检索方式总结
- Hibernate入门08 - 继承映射1
- Hibernate继承映射的三种方式
- Hibernate 学习笔记07 --集合映射_&_继承映射
- hibernate继承映射[映射单独一个tablexml版本]实例【与19相同,方式不同,未验证】(二十)
- Hibernate 继承映射实现方式之每个具体类对应一张表
- Hibernate_映射_继承结构映射1_使用一张表的方式
- Hibernate继承映射:每个子类一张表(joined-subclass)表结构
- Hibernate入门08 - 继承映射1
- hibernate 继承映射 joined-subclass
- Hibernate继承映射之使用多子表方式实例