目录
1.Spring加载Hibernate的SessionFactory :
3.Session的openSession()和getCurrentSession() :
一、Spring结合Hibernate的使用
1.Spring加载Hibernate的SessionFactory :
<!-- 配置SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
</bean>
2. SessionFactory的使用:
sessionFactory sf = new Configuration().configure().buildSessionFactory();
或是核心配置文件命名改变:
sessionFactory sf = new Configuration().configure(“config.cfg.xml”).buildSessionFactory();
3.Session的openSession()和getCurrentSession() :
openSession : 每次使用都新建;
GetCurrentSession() : 是单例模式的,线程安全的;
注意:
GetCurrentSession 必须和current_session_context_class 结合使用;
<property> key="hibernate.current_session_context_class">thread</property>
(需要注意,这里的current_session_context_class属性有几个属性值:jta 、 thread 常用 , custom、managed 少用 )
a).thread使用connection 单数据库连接管理事务
b).jta (Java transaction api) Java 分布式事务管理 (多数据库访问),jta 由中间件提供(JBoss WebLogic 等, 但是tomcat 不支持)
二、*.hbm.xml常用设置
<hibernate-mapping
schema="schemaName" //设置模式名字
catalog="catalogName" //设置目录名称
default-cascade="cascade_style" //级联风格
default-access="field|property|ClassName" //访问策略
default-lazy="true|false" //加载策略
package="packagename" //设置默认包名
/>
说明:
schema和catalog 为了解决命名冲突,在数据库中,有多个catalog,一个catalog有多个schema,而数据库的对象(table,存储过程,视图,索引等)组成了schema。有时catalog 对应的是数据库名,schema对应的是数据库用户名。
<class
name="ClassName" //映射到哪个类
table="tableName" //映射到哪张表
batch-size="N" //抓取策略,一次抓取多少条记录
where="condition" //抓取条件
entity-name="EntityName" //支持一个实体类映射到多张表
/>
说明:
entity-name : 当一个model类对应多张表时,可能两张表有相同的字段,也有不同的字段,该属性就适用于这种情况。
<id //id表示主键
name="propertyName" //映射到哪个属性
type="typename" //数据类型
column="column_name"//数据库中字段名
length="length" //数据长度
<generaotr class="generatorClass"/> //主键生成策略
/>
三、列举主键生成策略
即generator标签Class取值有哪些,其主要作用是:
- Assigned : 自定义主键生成策略,一般通过setter方法设置主键的值;
- Increment : 查找该表中主键的最大值,在基础上加1;
- Hilo (high low) : 通过一个额外的表保存hi的值。
<id name=”id” >
<generaotr class="hilo"> //主键生成策略
<param table=”hibernate_hilo” />
<param column=”next_hi” />
<param maxlo=”100” />
</generaotr >
</id>
<!--说明: 如果自己不新建表的话,默认是hibernate_hilo, 列next_hi-->
- Seqhilo: 将表替换成序列,序列需要提前新建好;
- Uuid: 32位,删除了“-”;
- GUID : 128位,全球唯一标识符;
- Foreign(外键):
<id name=”id” >
<generaotr class="foreign"> //主键生成策略
<param name=”property” value=”user” />
</generaotr >
</id>
<one-to-one name=”user” class=”domain.User” constrained=”true”/>
- Identify : 自增长,如sql server ;
- Sequence : 序列,如Oracle;
- Native : 三选一,分别是identify, sequence, hilo;
四、Hibernate.cfg.xml 标签配置:
<hibernate-configuration>
<session-factory>
<!--方言 -->
<property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
<!--是否展示sql -->
<property name="show_sql">true</property>
<!-- update,若对象有更新,则更新,create 表示重新生成,可能造成数据丢失 -->
<property name="hbm2ddl.autuo">update</property>
<!-- 导入映射配置 -->
<mapping resource="com/exercise/model/Users.hbm.xml" />
</session-factory>
</hibernate-configuration>
五、Hibernate 的使用步骤
- Hibernate.cfg.mxl :
配置数据源,以及映射*.hbm.xml 文件;
- ****.hbm.xml :
配置pojo类相关字段属性;
- 持久化类JavaBean:
要求如下:
- 只有getter和setter方法,没有业务方法;
- 要有主键字段;
- 可序列化:实现java.io.Serializable 接口