2.2 Hibernate开发步骤
2.2.1 创建持久化Java类
- 提供一个无参的构造器:使Hibernate可以使用Constructor.newInstence()来实例化持久化类
- 提供一个标识属性(重要) :通常映射为数据库表的主键字段,如果没有该属性,一些功能将不起作用,例如Session.saveOrUpdate()
- 为类的持久化类字段声明访问方法:Hibernate对JavaBean风格的属性进行持久化
- 使用非final类:在运行时生成代理是Hibernate的一个重要的功能,如果持久化类没有实现任何接口,Hibernate使用CGLIB生成代理,如果使用的是final类,则无法生成CGLIB代理
重写 equals和hashCode方法:如果需要把持久化类的实例放在Set中(当需要进行关联映射时),则应重写这两个方法;例如:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
UserEntity that = (UserEntity) o;
if (username != null ? !username.equals(that.username) : that.username != null) return false;
if (password != null ? !password.equals(that.password) : that.password != null) return false;
if (uid != null ? !uid.equals(that.uid) : that.uid != null) return false;
return true;
}
@Override
public int hashCode() {
int result = username != null ? username.hashCode() : 0;
result = 31 * result + (password != null ? password.hashCode() : 0);
result = 31 * result + (uid != null ? uid.hashCode() : 0);
return result;
}
- Hibernate不要求持久化类继承任何父类或实现接口,这可以保证代码不被污染,这就是Hibernate被称为低侵入式设计的原因
2.2.2 对象关系映射文件
Hibernate采用XML格式的文件来指定对象和关系数据之间的映射,在运行时Hibernate将根据这个映射文件来生成各种SQL语句,映射文件的扩展名为*.hbm.xml
<hibernate-mapping>
<class name="cn.jxzhang.hibernate.domain.UserEntity" table="user" schema="hibernate1">
<id name="uid">
<column name="uid" sql-type="varchar(32)" length="32"/>
<generator class="native"/>
</id>
<property name="username">
<column name="username" sql-type="varchar(100)" length="100" not-null="true"/>
</property>
<property name="password">
<column name="password" sql-type="varchar(100)" length="100" not-null="true"/>
</property>
</class>
</hibernate-mapping>
generator标签:用于指定主键的生成方式。native表示使用数据库底层的生成方式来生成数据库主键
class标签:用于指定类和表的映射关系
id标签:指定持久类的OID以及表的主键
property标签:指定列与表之间的映射
2.2.3 Hibernate配置文件
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate1</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- Format SQL when echo -->
<property name="format_sql">true</property>
<!-- 指定程序需要关联的映射文件 -->
<mapping class="cn.jxzhang.hibernate.domain.UserEntity"/>
<mapping resource="cn/jxzhang/hibernate/domain/UserEntity.hbm.xml"/>
</session-factory>
</hibernate-configuration>
当前内容版权归 chocolate213 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 chocolate213 .