一、O/R Mapping
对象-关系映射是一门非常实用的工程技术,它实现了Java应用中的对象到关系数据库中的表的自动的(和透明的)持久化,使用元数据(meta data)描述对象与数据库间的映射。
提高生产率
可维护性
更好性能
二、持久层技术比较
三、Hibernate的组成
3、持久化类和关系数据库的映射
四、Hibernate-cfg.xml
<hibernate-configuration>
<session-factory>
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<propertyname="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="connection.username">root</property>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="myeclipse.connection.profile">
mysqlconnection
</property>
<mapping resource="com/my/po/Stu.hbm.xml"/>
</session-factory>
</hibernate-configuration>
五、持久化Java类必须遵循的原则
六、持久化类和关系数据库的映射
七、*.hbm.xml文件
<hibernate-mapping>
<class name="com.my.po.Stu" table="stu" catalog="test">
<cache usage="read-write"/>
<id name="stuId" type="java.lang.Integer" unsaved-value="none">
<column name="stu_id" />
<generatorclass="increment" />
</id>
<property name="stuName" type="java.lang.String">
<column name="stu_name" length="10" />
</property>
<property name="stuSec" type="java.lang.String">
<column name="stu_sec" length="10" />
</property>
<property name="stuSco" type="java.lang.Integer">
<column name="stu_sco" />
</property>
</class>
</hibernate-mapping>
八、Configuration类
- Hibernate运行的底层信息:数据库的URL、用户名、密码、 JDBC驱动类,数据库Dialect,数据库连接池等。
Hibernate映射文件(*.hbm.xml)。
- 属性文件(hibernate.properties)。
调用代码:Configurationcfg = new Configuration();
- Xml文件(hibernate.cfg.xml)。
调用代码:Configuration cfg = newConfiguration().configure();
九、SessionFactory
会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。
SessionFactorysessionFactory = cfg.buildSessionFactory();
十、Session(会话)
Session代表与数据库之间的一次操作,它的概念介于Connection和Transaction之间。
Session也称为持久化管理器,因为它是与持久化有关的操作接口。
Session通过SessionFactory打开,在所有的工作完成后,需要关闭。
它与Web层的HttpSession没有任何关系。
Session session = sessionFactory.openSession();
十一、Transaction(事务)
它将应用代码从底层的事务实现中抽象出来——这可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代理结构(CORBA)——允许应用通过一组一致的API控制事务边界。这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性。
Transaction tx = session.beginTransaction();
十二、Query
Query(查询)接口允许你在数据库上执行查询并控制查询如何执行。查询语句使用HQL或者本地数据库的SQL方言编写。
Query query = session.createQuery(“from User”);
十三、映射文件中unsaved-value 属性
- none : 总是更新
- any: 总是存储
- null : ID 为空 (null) 时存储
- valid: ID 为空 (null) 或者指定值时存储