Hibernate基础---映射文件、配置文件、Java对象的三种状态
来源:互联网 发布:网络融资平台利息高 编辑:程序博客网 时间:2024/06/03 12:43
一、配置Hibernate运行环境
这里我们使用Myeclipse 10自带的Hibernate支持配置环境
1.首先你需要创建数据连接(DB Driver)
配置的是oracle数据连接
2.右键项目选择 Myeclipse –>Add Hibernate Capabilities…
3.后续根据个人选择即可
会自动生成Hibernate环境和生成核心配置文件 以及 Hibernate的工具类HibernateSessionFactory
配置文件
<hibernate-configuration> <session-factory> <!-- 配置连接数据库的基本配置 --> <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property> <property name="connection.username">bajie</property> <property name="connection.password">556556</property> <propertyname="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> <!-- 是否显示sql语句 --> <property name="show_sql">true</property> <!-- 是否格式化显示sql语句 --> <property name="format_sql">true</property> <!-- 引入orm映射文件 --> <mapping resource="entiy/Users.hbm.xml" /> </session-factory>
HibernateSessionFactory工具类
最常用的方法
public class HibernateSessionFactory { /** * 保存线程变量,该变量只保存一个值,不同的线程保存各自的值 */ private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); private static org.hibernate.SessionFactory sessionFactory; private static Configuration configuration = new Configuration(); //配置文件的路径 private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static String configFile = CONFIG_FILE_LOCATION; //获取session //一次请求是一个线程,session是储存在threadLocal中 public static Session getSession() throws HibernateException { //从本次线程中获取session Session session = (Session) threadLocal.get(); //如果session为空或者 session未有开启--->在本线程从新获取session if (session == null || !session.isOpen()) { //如果sessionFactory 为空 那么从新创建一个sessionFactory if (sessionFactory == null) { rebuildSessionFactory(); } //进行获取session 的处理 session = (sessionFactory != null) ? sessionFactory.openSession() : null; //把这次从新获取到的session 写入线程 threadLocal.set(session); } return session; }}
映射文件District.hbm.xml
<hibernate-mapping> <!-- name对应的实体类 table对应数据库表 schema数据库管理员--> <class name="entiy.District" table="DISTRICT" schema="BAJIE"> <!-- id表示主键 property属性 name对应实体类的属性 type是对应java的数据类型 --> <!-- column 对应表的哪一个列 --> <id name="id" type="java.lang.Integer"> <column name="ID" precision="4" scale="0" /> <!-- 主键生成策略 --> <generator class="increment" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="100" not-null="true" /> </property> <!-- Hibernate的一对多的映射关系 --> <set name="streets" inverse="true" cascade="all" > <key> <column name="DISTRICT_ID" precision="4" scale="0" /> </key> <one-to-many class="entiy.Street" /> </set> </class></hibernate-mapping>
二、Java对象的三种状态
Hibernate 通过session管理Java对象 的状态,持久态是一个很重要的状态,持久状态的对象才会进行脏检查
1. 瞬时状态 : Java对象和数据库中的数据没有任何的关联 ( 依据OID–对象标识符来判断 ),此时Java对象的状态为瞬时状态 .
2. 持久状态 : 当对象与Session关联(oid) ,被session管理时,处于持久态; 持久态的对象拥有数据库标识(数据库中的主键) .
3. 游离状态 : 处于持久态的对象,脱离与其关联的session管理后, 对象处于游离状态 .
脏检查:session具有一个缓存,可以管理和跟踪所有持久化对象
1 . 快照: 当持久态对象被 session管理时, session会为对象的值类型的属性复制一份快照
2 . 脏对象: 当session管理的过程中, 对象的属性值发生改变, session执行检查时(脏检查),发现对象的当前属性和快照的属性不同, 那么当前对象会变成脏对象
3 . 提交: 当session 缓存中对象的属性发生变化时,并不会立即进行脏检查和执行 相对应的SQL语句, 而是在特定的时间点才会执行;
4 . 执行时机: 在默认情况下, session会在以下时间点属性缓存,执行脏检查–>发现脏对象的话,执行对应的SQL 语句
1.) :应用程序显式调用 Session的flush() 方法时.
2.) :应用程序调用 Transaction()的commit() 方法时.—>即提交事务时
- Hibernate基础---映射文件、配置文件、Java对象的三种状态
- hibernate映射对象三种状态的分析
- hibernate配置文件和基础概念,三种状态
- 持久化对象的状态、Hibernate配置文件、映射对象标识符 、 映射组成关系 、 Hibernate把持久话类的属性分为两种
- Hibernate中Java对象的三种状态
- hibernate中java对象的三种状态
- hibernate 中java对象的三种状态
- 3.Hibernate中java对象的三种状态
- Hibernate中Java对象的三种状态及其转换
- Hibernate基础之七:对象三种状态、增删改查时对应的状态变化
- Hibernate的对象的三种状态
- Hibernate的对象的三种状态
- Hibernate的三种对象状态
- hibernate对象的三种状态
- hibernate 实体对象的三种状态
- hibernate对象的三种状态
- Hibernate对象的三种状态
- Hibernate对象的三种状态
- 7.4 用穷举法计算两个正整数的最小公倍数
- Java课程1: Hello World
- vue下使用select2,绑定数据问题
- Python异常
- 8.1
- Hibernate基础---映射文件、配置文件、Java对象的三种状态
- 读取数据流
- Python自然语言处理 11 语言数据管理
- Java 集合转换(数组、List、Set、Map相互转换)
- Mysql中Drop,Truncate,Delete的区别
- qt 实现文字转语音
- 深度学习调参:简短的注意事项
- Lua中的面向对象new方法的运用
- RSA加密解密及数字签名Java实现