持久化类就是 简单的JavaBean ;Hibernate鼓励采用 POJO编程模型来实现持久化类;Hibernate要求持久化必须具有一个无参数的构造方法,属性必须有getXxx()和setXxx()方法,hibernate通过get和set方法操作和访问属性,实现java.io.Serializable接口;如果需要放入HttpSession中就必须实现这个接口。
实体类需要和映射文件在一个包下
实体类:Employee
public class Employee implements Serializable {
private String empno;
private String ename ;
private String job ;
private String mgr ;
private Date hiredate ;
private Double sal ;
private Double comm ;
private Integer deptno;
//省略get 和 set 方法
}
映射文件:Employee.hbm.xml 注意命名规范
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.accp.hibernate.entity.Employee" table="Employee">
<id name="empno" column="EMPNO" type="java.lang.String">
<!-- 手动分配 -->
<generator class="assigned"></generator>
<!-- oracle的自增 -->
<!-- <generator class="sequence">
<param name="sequence">seq_employee</param>
</generator> -->
</id>
<property name="ename" column="ENAME" type="java.lang.String"> </property>
<property name="job" column="JOB" type="java.lang.String"> </property>
<property name="mgr" column="MGR" type="java.lang.String"> </property>
<property name="hiredate" column="HIREDATE" type="java.util.Date"> </property>
<property name="sal" column="SAL" type="java.lang.Double"> </property>
<property name="comm" column="COMM" type="java.lang.Double"> </property>
<property name="deptno" column="DEPTNO" type="java.lang.Integer"> </property>
</class>
</hibernate-mapping>
now。从上往下分析配置文件:
<?xml version="1.0" encoding="UTF-8"?>
xml声明,版本号 字符编码
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
映射文件规范,这个必须要有 在 hibernate架包下的org.hibernate 包中可以找到,直接copy过来即可 直接上图:
<hibernate-mapping>
<class name="com.accp.hibernate.entity.Employee" table="Employee">
<id name="empno" column="EMPNO" type="java.lang.String">
<!-- 手动分配 -->
<generator class="assigned"></generator>
<!-- oracle的自增 -->
<!-- <generator class="sequence">
<param name="sequence">seq_employee</param>
</generator> -->
</id>
<property name="ename" column="ENAME" type="java.lang.String"> </property>
<property name="job" column="JOB" type="java.lang.String"> </property>
<property name="mgr" column="MGR" type="java.lang.String"> </property>
<property name="hiredate" column="HIREDATE" type="java.util.Date"> </property>
<property name="sal" column="SAL" type="java.lang.Double"> </property>
<property name="comm" column="COMM" type="java.lang.Double"> </property>
<property name="deptno" column="DEPTNO" type="java.lang.Integer"> </property>
</class>
</hibernate-mapping>
class :表示一个实体;
table属性: 对应实体类的表名;
name属性:实体类的完全限定名;
id: 表示主键
name:实体类的属性名
column:对应的列名
type:属性的类型
generator:主键生成的策略;
assigned:应用程序分配,与Hibernate无关
sequence:oracle的sequence序列
param:序列的名称
native:由Hibernate根据底层数据库自行判断采用何种主键生成策略,即由使用的数据库生成主键的值
identity:对如sqlserver,DB2,MySQL 等支持标识列的数据库,自增列
property:标识实体类的属性 和数据表的列对应
name:属性名
column:数据表的列名
type:属性的类型
最后需要在hibernate.cfg.xml配置文件中引用此映射文件:
<mapping resource="com/accp/hibernate/entity/Employee.hbm.xml" />