单纯的只针对持久层框架 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中的数据类型对比(图片来自于网络)
注意数据类型的对应,一般不会出错。