Hibernate的配置文件,hibernate.cfg.xml

单纯的只针对持久层框架 Hibernate 配置文件的一些总结

一、Hibernate底层原理

1.  Hibernate保存原理

   目的:把domain对象保存到数据库的表,形成一条记录。

   sql: insert into t_employee(name,pwd) values(?,?);  需要数据库的表,列名

  (1). 所有能够到save方法里面传入的对象都必须在hibernate.cfg.xml进行注册(加载)

  (2). 比较映射文件里面是否有全限定的类名

     employee.getClass().getName()

     映射文件Package+.+name 比较

     映射文件Name 比较 还没有匹配报错

  (3).通过类名找到表名 t_employee

  (4).是否要id主键加入到 insert 语句

  •   关键看主键配置策略(方式)     <generator class="native" />
  •   通过方言类看怎样处理主键
  •   MySQLDialect加上

    mysql insert into t_employee(不用处理主键)

  •   Oracle10gDialect加上序列的处理

    oracle insert into t_employee (eid) values(seq_emp.nextval)


  (5).处理其他非主键属性

      找映射文件里面的property,看是否有column属性
       <property name="name"/> 
       <property name="password" column="pwd"/> 
     insert into t_employee (name, pwd) values (?, ?) 
  (6). ? 的值通过反射技术获取,把sql交给jdbc处理

2、Hibernate获取原理

   get方法的签名 

   public Object get(Class clazz, Serializable id); 

 

     第一个参数:字节码

   第二个参数:只有实现序列化的接口就可以作为主键

    Employee employee = (Employee) session.get(Employee.class, 1L); 

   都是查询表的所有的字段

二、单独 Hibernate 框架的配置文件 -->> hibernate.cfg.xml

1. resources 中的配置文件 hibernate.cfg.xml

 1 <!DOCTYPE hibernate-configuration PUBLIC
 2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 4 
 5 <hibernate-configuration>
 6     <session-factory>
 7         <!-- 1. 属性配置 -->
 8         <!-- 五个必须配置的属性 这里是写死的,当然也可用jdbc.properites 配置文件等 -->
 9         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
10         <property name="connection.url">jdbc:mysql:///hibernate</property>
11         <property name="connection.username">root</property>
12         <property name="connection.password">admin</property>
13         <!-- 方言:跨数据库的关键 (MySQL ORCALE ....) -->
14         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
15 
16         <!-- 可选配置的属性 -->
17         <!-- 是否显示hibernate中的sql -->
18         <property name="show_sql">true</property>
19         <!-- 自动建表 这里底下有另外的说明-->
20         <property name="hbm2ddl.auto">update</property>
21 
22         <!-- 2. 配置映射文件路径 -->
23         <mapping resource="cn/dx/hibernate/one/domain/Product.hbm.xml" />
24         <mapping resource="cn/dx/hibernate/one/domain/ProductDir.hbm.xml" />
25 
26         <!-- 3. 缓存配置 -->
27     </session-factory>
28 </hibernate-configuration>
1     <!-- 自动建表 : 建表策略的选择 -->
2     <!-- #hibernate.hbm2ddl.auto create-drop  -->
3     <!-- #hibernate.hbm2ddl.auto create   创建.新建 -->
4     <!-- #hibernate.hbm2ddl.auto update  更新.修改 -->
5     <!-- #hibernate.hbm2ddl.auto validate 验证 -->
6     <property name="hbm2ddl.auto">create</property>

 

2. domainMapper.xml 映射文件的配置

(1).在类的同级目录或者在相关resources的mapping下建立与类名Xxx相关的Xxx.hbm.xml映射文件.

(2).此处一Product类为例:

1 //Product.java
2 package cn.dx.hibernate.one.domain;
3 
4 public class Product {
5     private Long id;
6     private String name;
7     private Long dirId;
8     //此处应有getter setter 方法
9 }
 1 <!-- Product.hbm.xml -->
 2 <?xml version="1.0"?>
 3 <!DOCTYPE hibernate-mapping PUBLIC
 4         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 5         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 6 
 7 <hibernate-mapping>
 8     <!-- name:java中类名;table:数据库中表名 -->
 9     <class name="cn.dx.hibernate.one.domain.Product" >
10 
11         <!-- 主键列配置 -->
12         <id name="id" column="p_id">
13             <!-- 主键列设置自增 -->
14             <generator class="native" />
15         </id>
16 
17         <!-- 其他列配置 -->
18         <property name="name" column="p_name" />
19         <property name="dirId" column="p_dirId" />
20     </class>
21 </hibernate-mapping>
22

注:关于Hibernate和Java中的数据类型对比(图片来自于网络)

   注意数据类型的对应,一般不会出错。

 

posted @ 2016-10-11 19:11  世间草木  阅读(294)  评论(0编辑  收藏  举报