Hibernate

mac2025-04-25  5

1.eclipse安装hibernateTool——help 2.src,new ,.cfg.xml cfg.xml:session-factory: 连接数据库的名字密码驱动URL 指定数据库的SQL方言: hibernate mysql方言: show_sql:在控制台上显示执行的sql语句true format_sql:格式化的去显示true DDL:生成策略:没有表的话生成一个表create <mapping :映射文件 Hibernate configuration File(cfg.xml)

<session-factory> <property name="connection.username">system</property> <property name="connection.password">docare</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property> <!--指定数据库使用的SQL方言--> <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> <!--当show_sql属性为true时表示在程序运行时在控制台输出SQL语句,默认为false,建议在调试程序时设为true,发布程序之前再改为false,因为输出SQL语句会影响程序的运行速度--> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- DDL语句生成策略 --> <property name="hbm2ddl.auto">create</property> <mapping resource="Dept.hbm.xml"/><!--添加要用的对象-关系映射文件--> </session-factory> 实体对象关系映射文件hibernateXML Mappering file(hbm.xml):选择要持久化的实体类

类和对应的数据库表 type=“int” 有唯一的主键。cloumn的名字是主键 generator自己去定义主键

某一部分进行单独测试——单元测试,不用通过main方法直接运行 @test测试此方法(将数据放入数据库) @before执行测试方法前先执行这个方法(获取连接。获取sqlsessionfactory) @after执行测试方法后执行这个方法(关闭连接) 新建test文件夹

hbm2ddl.auto属性详解 <property name="hbm2ddl.auto">create</property> 此属性可以有4个值,分别如下: (1)create-drop (2)create (3)update (4)validate 各属性的含义及效果: (1)<property name="hibernate.hbm2ddl.auto"> create-drop </property> create-drop:表示在hebarinate初始化时创建表格,程序运行结束的时候会删除相应的表格,在实际项目中不用 (2)<property name="hibernate.hbm2ddl.auto">create</property> 在hibernate初始化时会创建表格,在运行结束之后不删除表格,而是在下一次运行的时候如果有旧的删掉,没有旧的,重新建表格 (3)<property name="hibernate.hbm2ddl.auto">update</property> 只是根据映射文件去和数据库中的表对应起来,如果不一致,就更新表的结构 (4)<property name="hibernate.hbm2ddl.auto">validate</property> 校验映射文件和数据库中的表是不是能对应起来,不能对应报错,实际中常用 主键生成方式详解 <generator class="assigned" /> 常用类型: ①identify,用于MySql数据库。特点:递增 <id name="id" column="id"> <generator class="identity"/> </id> ②sequence,使用序列,用于Oracle <id name="id" column="id"> <generator class="sequence"> <param name="sequence">序列名</param> </generator> </id> ③assigned:用户自定义id <id name="id" column="id"> <generator class="assigned"/> </id> 【Session】 Hibernate执行流程 advtar 什么是session 可以简单的理解为session是一个可以操作数据库的对象。 session与connection对象的多对一的关系,每个session多有一个与之对应的connection对象,一个connection不同时刻可以供多个session使用。 把对象保存到数据库中需要调用session的各种方法,如save(),update(),delete(),createQuery()等 事务transaction hibernate对数据库的操作都是封装在事务中的,并且默认是非自动提交状态。 所以在编码当中如果没有开启和提交事务,对象不会真正保存到数据库。 想要hibernate自动提交事务,可调用session的doWork方法,但实际开发中不推荐使用。 获取session方式 1.sessionFactory.openSession() 2.sessionFactory.getCurrentSession() 如果使用getCurrentSession需要在hibernate.cgf.xml文件中进行配置: 如果使用的是本地事务(jdbc事务) <property name="hibernate.current_session_context_class">thread</property> 如果使用的是全局事务(jta事务) <property name="hibernate.current_session_context_class">jta</property> 3.两种创建session方式的区别 ①getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession不会自动关闭,需要手动关闭。如果多次未进行手动关闭,会导致连接池溢出。 ​ ②openSession每次会创建新的session,而getCurrentSession会使用现有的对象。
最新回复(0)