第4.21课 上课 配置文件介绍, hibernate体系结构, 持久化对象的状…
4_21

配置文件介绍
全局配置文件
hibernate.cfg.xml
1.数据库方言:
hibernate.dialect : org.hibernate.dialect.MySQL5InnoDBDialect
2.是否显示SQL语句:
hibernate.show_sql : true|false
3.是否格式化SQL语句:
hibernate.format_sql : true|false
4.配置是否支持自动创建表:
hibernate.hbm2ddl.auto: create_drop|create|update|validate
5.数据库连接的信息:
hibernate.connection.driver_class : 数据库驱动类
hibernate.connection.url : 连接数据库URL
hibernate.connection.username : 连接数据库用户名
hibernate.connection.password : 连接数据库密码
6.c3p0连接池的信息:
hibernate.c3p0.max_size : 最大连接数
hibernate.c3p0.min_size : 最小连接数
7.配置持久化类:
<mapping class="com.yayadou.domain.Person"/>
<mapping resource="com/yayadou/domain/User.hbm.xml"/>
hibernate.properties + 持久化类
hibernate.properties
#-- 配置数据库方言,告诉Hibernate4我们用得是什么样的数据库
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#-- 配置显示SQL语句
hibernate.show_sql=true
#-- 配置格式化SQL语句
hibernate.format_sql=true
#-- 配置是否支持自动创建表:
# create-drop: 当创建SessionFactory时就会创建表、当SessionFactory关闭时就会删除表.
# create: 当创建SessionFactory时先删除表,再创建表 (每次)
# update: 当创建SessionFactory时会判断,如果表不存在就创建表,存在就不会创建表,后面会修改表结构.
# validate : 只做验证(不会创建表) (不需要Hibernate4创建表)
hibernate.hbm2ddl.auto=update
#-- 配置连接数据库的驱动类
hibernate.connection.driver_class=com.mysql.jdbc.Driver
#-- 配置连接数据库的URL (创建数据库)
hibernate.connection.url=jdbc:mysql://localhost:3306/hibernate_db
#-- 配置连接数据库的用户名
hibernate.connection.username=root
#-- 配置连接数据库的密码
hibernate.connection.password=root
#-- 配置c3p0连接池中最大连接数
hibernate.c3p0.max_size=10
#-- 配置c3p0连接池中最小连接数
hibernate.c3p0.min_size=2
添加持久化类
/** 第一步:创建Configuration */
Configuration configuration = new Configuration() // 默认加载hibernate.properties属性文件
.addAnnotatedClass(Person.class) // 添加持久化类
.addAnnotatedClass(Xxx.class); // 添加持久化类
缓存配置文件
ehcache.xml
持久化类配置文件
xxx.hbm.xml
xxx.hbm.xml
hbm: Hibernate Mapping (Hibernate映射文件)
<!-- package: 包名 -->
<hibernate-mapping package="com.yayadou.domain">
<!-- name:指定类名 table:指定表名 -->
<class name="User" table="USER_INFO">
<!-- 主键列 -->
<id name="id" column="user_id">
<!-- 指定主键生成策略 -->
<generator class="native"/>
</id>
<!-- 属性名转化成表中列名 -->
<property name="name" column="user_name"/>
<!-- 属性名转化成表中列名 -->
<property name="phone" column="user_phone"/>
<property name="属性名" column="表中列名"/>
</class>
</hibernate-mapping>
hibernate体系结构
概览图

完整体系图

持久化对象的状态
持久化类 持久化对象 = new 持久化类();

瞬态(Transient)
Transient 瞬态:
new 持久化类(),刚new出来的,从来没有与Session关联过.
也就是没有调用Session的方法对它进行操作过。
持久化(Persistent)
Persistent 持久化状态: 正在被Session管理中。调用Session的方法对它进行操作过,这个时候Session没有关闭.
该对象正在Session一级缓存中.(一级缓存中的对象都是存放在内存中).
如果你调用持久化状态对象的set方法,它会影响数据库表中的数据.
你对持久化状态对象做的修改,会同步到底层的数据库表中,
它不是立即同步到底层的数据库,默认是在事务提交时才同步。
脱管(Detached)
Detached 脱管状态:脱离了Session的管理,曾经被Session管理过,现在没有被Session管理。
Session的几个主要方法概览
Session的主要方法说明:
1.保存(添加)
-- Serializable save(entity); // entity : 持久化状态
-- void saveOrUpdate(entity); // entity : 持久化状态
-- void persist(entity); // entity : 持久化状态
-- Object obj = merge(entity); // entity : 瞬态,obj : 持久化状态
2.修改
-- void update(entity); // entity : 持久化状态
-- void saveOrUpdate(entity); // entity : 持久化状态
-- Object obj = merge(entity); // entity : 瞬态,obj : 持久化状态
3.删除
-- void delete(entity); // entity : 瞬态
4.根据主键获取实体
-- Object entity = session.get(持久化类, 主键id值); // entity : 持久化状态
-- Object entity = session.load(持久化类, 主键id值); // entity : 持久化状态
浙公网安备 33010602011771号