传智播客——Hibernate(1)

八月的最后一天,我们迎来了SSH框架中最难的HibernateHibernate是一款非常优秀、成熟的ORM(对象/关系映射)框架,流行的ORM框架还有Ibatis,EJB,TopLink等。下面我们就开始今天的学习。

1.       用佟刚老师的话说,咱们先来爽一下,完成一个简单的Hibernate操作:

(1). lib/required 目录下的 jar 包加入到当前工程的 classpath

(2). project/tutorials/web/src/main/resources 目录下复制 hibernate.cfg.xml 文件到 src 目录下, 该文件中配置了 Hibernate

        连接数据库的基本信息

(3). project/tutorials/web/src/main/resources/org/hibernate/tutorial/domain 目录下复制 Person.hbm.xml 文件到 src

        目录下或其包目录中

(4). 把数据库驱动程序加入到当前工程的 classpath

(5). 修改  hibernate.cfg.xml 文件中关于数据库连接的基本信息:

    1). 数据库方言: dialect. project/etc 目录下找到 hibernate.properties.template 文件, 在其中搜索 MySQL 找到 MySQL 的数据库方言.

    2). 是否自动生成数据表: hbm2ddl.auto. 改为 update

(6). 修改 Person.hbm.xml 文件, 注意修改 package 节点

(7). 参照 Person.hbm.xml 文件新建 Person

(8). 测试.

             

              Configuration conf = new Configuration().configure();

              SessionFactory sessionFactory = conf.buildSessionFactory();

              Session session = sessionFactory.openSession();

             

              //**

              Person person = new Person();

              //**

              person.setAge(12);

              //**

              person.setName("Tom");

             

              Transaction tx = session.beginTransaction();

             

              //**

              session.save(person);

             

              tx.commit();

             

              session.close();

2.       save persist 方法的区别:

(1. 没有开启事物的条件下 save 会产生insert语句,然后事物回滚,取消插入。而persist不会产生insert语句,不会执行任何插入操作.

       (2. 当对一个 ”具备OID属性” 对象执行 save() 方法时, 会把该对象以一个新的 oid 保存到数据库中; 但执行 persist() 方法时会抛出一个异常.

3.  load get 方法的区别:

       (1. hibernate 认为该 id 对应的对象(数据库记录)在数据库 中是一定存在的,进而使用代理来延迟加载该对象; 在用到该对象中的属性数据时才查询数据库,若查不到,则抛出 ObjectNotFoundEcception 异常。 注意: 并非调用 load 方法一定会生成代理对象-- 由于 session 中的缓存对于hibernate来说是个较廉价的资源,所以在load 时会先查一下session 缓存看看该id对应的对象是否存在,不存在则创建代理。

   2. get方法:  hibernate会确认该id对应的数据是否存在,首先在 session 缓存中查找,然后在二级缓存中查找,还没有就查数据库,数据库中没有就返回null

4.  update 方法:

1. 它只会被用于对一个 "离线对象" 进行更新操作。而一个PO对象当它已经处于 Session 状态管理的时候,是不需要写update

2. 若对应的记录不存在, 会抛出异常

5.   saveOrUpdate 方法:

   1. 若持久化对象在数据库中有对应记录, 执行 update

2. 若指定了 id, 但在数据库中还没有对应的记录, 抛出异常

3. 若是一个瞬时对象, 执行 save

6.   merge 方法:

       1. 若持久化对象在数据库中有对应记录,

              1). 若提供的对象和数据库中记录完全一样, 只执行查询操作

              2). 否则执行查询和更新操作

       2. 若持久化对象在数据库中没有对应的记录, 执行插入操作.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值