hibernate数据持久化组件
对象持久化,把数据保存在永久的存储介质中(数据库)
OR/M(object relation mapping)对象关系映射。
POJO类,就是标准的Java Bean。
Hibernate就是一个可以自动的根据xml完成对象关系映射,并持久化到数据库的开源组件。
Hibernate的底层也是有JDBC实现的。
hibernate是通过xml文件的配置,对数据库的底层的方言,以及数据库连接所需的信息,以及连接数据库的驱动。
hibernate的系统配置文件的名字一般叫做hibernate.cfg.xml,一般是映射类名加 .hbm.xml。一般将映射类的xml文件和实体类放在一起。
hibernate.cfg.xml中会设置数据库的连接信息,以及引用的其他文件的文件名,和一些其他的设置,这个文件一般放在项目的根目录下。
相关类和接口:
SessionFactory是线程安全的重量级的对象,一个应用一个。
Session是线程不安全的轻量级的对象,由SessionFactory产生,一个线程一个,用完就关。可以是一个事务一个或者是一个view一个。
Transaction事务对象,由Session对象产生,负责事务的提交和回滚
Configuration 读Hibernate配置文件,主要是读取其中的数据库配置信息,Configuration可以产生SessionFactory
环境配置
hibernate.cfg.xml的写法:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property><!--显示sql语句-->
<property name="format_sql">true</property><!--使显示的sql语句格式化-->
<property name="dialect">....</property><!--使用的数据库方言信息-->
<property name="connection.driver_class">....</property>
<!--使用的数据库的驱动-->
<property name="connection.url">....</property>
<!--连接数据库使用的url-->
<property name="connection.username">...</property>
<!--连接数据库的用户名-->
<property name="connection.password">...</property>
<!--连接数据库的密码-->
<mapping resource="xxx/xxxx/Xxxxxx.hbm.xml"/>
<!--引入的映射对象的xml文件的全路径及文件名-->
</session-factory>
</hibernate-configuration>
e.g.:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="myeclipse.connection.profile">oracle</property>
<property name="hibernate.connection.url">
jdbc:oracle:thin:@localhost:1521:orcl
</property>
<property name="hibernate.connection.username">scott</property>
<property name="hibernate.connection.password">tiger</property>
<property name="hibernate.connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<property name="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">2</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">create</property-->
<!--property name="hbm2ddl.auto">create</property!-->
<mapping resource="app/pojo/banji.hbm.xml" />
<mapping resource="app/pojo/student.hbm.xml" />
</session-factory>
</hibernate-configuration>
hibernate的映射文件.hbm.xml的写法
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="XXX.XXX.XXX"><!--映射类所在的包-->
<class name="Xxxxx及需要持久化的对象的xml映射文件的位置x" table="Xxxxx"><!--将类和数据库的表联系起来-->
<id name="studentId" column="studentId"><!--主键生成策略-->
<generator class="assigned"/>
<!--指定主键生成策略为用户指定-->
</id>
<property name="XXX" column="XXXX" type="string"/>
<!--类中的书性和字段之间建立联系-->
<property name="homeAddress" column="homeAddress"/>
<property name="schoolAddress" column="schoolAddress"/>
<property name="brithday" column="brithday" type="data"/>
<!--在hibernate中其他类型可以自动识别只有Data类型必须指名-->
</class>
</hibernate-mapping>
e.g.:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="app.pojo">
<class name="Student" table="tb_student" >
<comment>Users may bid for or sell auction items.</comment>
<id name="num">
<generator class="assigned" />
</id>
<property name="name" />
<property name="score" />
<!-- many-to-one name="bj" column="banji" not-null="true" cascade="all"></many-to-one-->
</class>
</hibernate-mapping>