2.2 Hibernate开发步骤

2.2.1 创建持久化Java类

  • 提供一个无参的构造器:使Hibernate可以使用Constructor.newInstence()来实例化持久化类
  • 提供一个标识属性(重要) :通常映射为数据库表的主键字段,如果没有该属性,一些功能将不起作用,例如Session.saveOrUpdate()
  • 为类的持久化类字段声明访问方法:Hibernate对JavaBean风格的属性进行持久化
  • 使用非final类:在运行时生成代理是Hibernate的一个重要的功能,如果持久化类没有实现任何接口,Hibernate使用CGLIB生成代理,如果使用的是final类,则无法生成CGLIB代理
  • 重写 equals和hashCode方法:如果需要把持久化类的实例放在Set中(当需要进行关联映射时),则应重写这两个方法;例如:

    1. @Override
    2. public boolean equals(Object o) {
    3. if (this == o) return true;
    4. if (o == null || getClass() != o.getClass()) return false;
    5. UserEntity that = (UserEntity) o;
    6. if (username != null ? !username.equals(that.username) : that.username != null) return false;
    7. if (password != null ? !password.equals(that.password) : that.password != null) return false;
    8. if (uid != null ? !uid.equals(that.uid) : that.uid != null) return false;
    9. return true;
    10. }
    11. @Override
    12. public int hashCode() {
    13. int result = username != null ? username.hashCode() : 0;
    14. result = 31 * result + (password != null ? password.hashCode() : 0);
    15. result = 31 * result + (uid != null ? uid.hashCode() : 0);
    16. return result;
    17. }
  • Hibernate不要求持久化类继承任何父类或实现接口,这可以保证代码不被污染,这就是Hibernate被称为低侵入式设计的原因

    2.2.2 对象关系映射文件

    Hibernate采用XML格式的文件来指定对象和关系数据之间的映射,在运行时Hibernate将根据这个映射文件来生成各种SQL语句,映射文件的扩展名为
    *.hbm.xml
  1. <hibernate-mapping>
  2. <class name="cn.jxzhang.hibernate.domain.UserEntity" table="user" schema="hibernate1">
  3. <id name="uid">
  4. <column name="uid" sql-type="varchar(32)" length="32"/>
  5. <generator class="native"/>
  6. </id>
  7. <property name="username">
  8. <column name="username" sql-type="varchar(100)" length="100" not-null="true"/>
  9. </property>
  10. <property name="password">
  11. <column name="password" sql-type="varchar(100)" length="100" not-null="true"/>
  12. </property>
  13. </class>
  14. </hibernate-mapping>

generator标签:用于指定主键的生成方式。native表示使用数据库底层的生成方式来生成数据库主键
class标签:用于指定类和表的映射关系
id标签:指定持久类的OID以及表的主键
property标签:指定列与表之间的映射

2.2.3 Hibernate配置文件

  1. <hibernate-configuration>
  2. <session-factory>
  3. <!-- Database connection settings -->
  4. <property name="connection.url">jdbc:mysql://localhost:3306/hibernate1</property>
  5. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  6. <property name="connection.username">root</property>
  7. <property name="connection.password">123</property>
  8. <!-- JDBC connection pool (use the built-in) -->
  9. <property name="connection.pool_size">1</property>
  10. <!-- SQL dialect -->
  11. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  12. <!-- Enable Hibernate's automatic session context management -->
  13. <property name="current_session_context_class">thread</property>
  14. <!-- Echo all executed SQL to stdout -->
  15. <property name="show_sql">true</property>
  16. <!-- Drop and re-create the database schema on startup -->
  17. <property name="hbm2ddl.auto">update</property>
  18. <!-- Format SQL when echo -->
  19. <property name="format_sql">true</property>
  20. <!-- 指定程序需要关联的映射文件 -->
  21. <mapping class="cn.jxzhang.hibernate.domain.UserEntity"/>
  22. <mapping resource="cn/jxzhang/hibernate/domain/UserEntity.hbm.xml"/>
  23. </session-factory>
  24. </hibernate-configuration>