1.  什么是ORM

    ORMObject/Relationship Mapping):对象/关系映射

 

2. SQL语句有什么不好?

    不同的数据库使用的SQL语法不同。比如:PL/SQLT/SQL

 同样的功能在不同的数据库中有不同的实现方式。比如分页SQL

    程序过分依赖SQL语句对程序的移植及扩展,维护带来很大麻烦。

 

3. 什么是Hibernate

  HibernateJava领域的一款开源的ORM框架技术。

  HibernateJDBC进行了非常轻量级的对象封装。

 

4. 编写Hibernate例子

 创建Hibernate的配置文件——hibernate.cfg.xml

 创建持久化类

   创建对象——关系映射文件

 通过Hibernate API编写访问数据库的代码

 导入Hibernate必须的jar---hibernate-release-4.2.4.Final\lib\required

   导入Mysqljdbc驱动--mysql-connector-java-5.1.7-bin.jar

 导入Junit4jar--junit-4.10.jar

 

5. 使用Junit进行测试

@Test:测试方法②

@Before:初始化方法①

@After:释放资源③

 

6. hibernate.cfg.xml常用配置

 SSH——Hibernate学习笔记

7. Session

 session可以理解为操作数据库的对象。

 sessionconnection,是多对一关系,每个session都有一个与之对应的

 connection,一个connection不同时刻可以供多个session使用。

把对象保存在关系数据库中需要调用session的各种方法,如:save()update()delete()createQuery()等。

 

8. Transaction简介

 hibernate对数据库的操作都是封装在事务中的,并且默认是非自动提交的方式。所以session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中。

 如果你想让hibernatejdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbcconnection后,设置其为自动提交事务模式。(注意:不推荐使用

 SSH——Hibernate学习笔记

 

9. 如何获取session对象

1) openSession

2) getCurrentSession

如果使用getCurrentSession需要在hibernate.cfg.xml文件进行配置:

如果是本地事务(jdbc事务)

<property name=hibernate.current_session_context_class>thread</property>

如果是全局事务(jta事务)

<property name=hibernate.current_session_context_class>jta</property>

 

 

 

 

10. openSessiongetCurrentSession的区别

 getCurrentSession在事务提交或者回滚之后自动关闭,而openSession需要你手动关闭。如果使用openSession而没有手动关闭,多次之后导致连接池溢出。

 openSession每次创建新的session对象,getCurrentSession使用现有的session对象。

 

11. Hbm配置文件常用设置

   <hibernate-mapping

         schema=schemalName

         catalog=catalogName 

         default-cascade=cascade_style//级联风格

         default-access=field|property|ClassName//访问策略

         default-lazy=true|false//加载策略

         package=package/>

 

<class

     name=ClassName

     table=tableName//表明

     batch-size=N//数据条数

     where=condition//抓取数据条数

     entity-name=EntityName/>

<id//主键

     name=propertyName//属性

     type=typename//数据类型

     column=column_name//映射的字段的名称

     length=length//字段的长度

     <generator class=generatorClass/>//主键生成策略

 </id>

 

 

12. 单一主键

 assigned  java应用程序负责生成(手工赋值)。

 native    由底层数据库自动生成标识符,如果是MySQL就是increment,如果是Oracle就是sequence,等等。

 SSH——Hibernate学习笔记

 

13. 基本类型

 SSH——Hibernate学习笔记

SSH——Hibernate学习笔记

 

 

14. 对象类型

 SSH——Hibernate学习笔记

 

    MySql不支持标准SQLCLOB类型,在Mysql中,用TEXTMEDIUMTEXTLONGTEXT类型来表示长度超过255的长文本数据。

 

15. 组建属性

实体类中的某个属性属于用户自定义的类的对象

<component name=address class=Address>

   <property name=postcode column=POSTCODE></property>

   <property name=phone column=PHONE></property>

   <property name=address column=ADDRESS></property>

</component>

 

 

16. 单表CRUD操作实例

 save

update

delete

get/load(查询单个记录)

 

17. getload的区别

①. 在不考虑缓存的情况下,get方法会在调用之后立即向数据库发出sql句,返回持久化对象。

②. load方法会在调用后返回一个代理对象。该代理对象只保存了实体对象的id,直到使用对象的非主键属性时才会发出sql语句。

③. 查询数据库中不存在的数据时,get方法返回null

④. load方法抛出异常org.hibernate.ObjectNotFoundException

 

18. Hibernate开发流程

 SSH——Hibernate学习笔记

 

相关文章: