Hibernate学习笔记:第一例

重学hibernate,决定分享学习笔记。
新建一个project,名字叫做hibernate, 普通的java project就可以了。导入jar包,hibernate依赖很多jar包,我把用上的jar包都列出来,包括但不限于这些。这些jar包作什么用我就不一一解释了。因为我用到了sqlserver 2000,所以数据库驱动msbase.jar, mssqlserver.jar, msutil.jar要copy进来,如果用其他的数据库, 则这个要替换掉,还有一个我比较奇怪的是,Hibernate依赖了jta.jar. 这些jar包到处都有,如果你想集中download,到hibernate.org下载最新的全包hibernate-distribution-3.3.2.GA


src目录下新建包dao,里面放所有的dao接口;新建package dao.hibernate放dao接口的hibernate实现类,sessionfactory,

Hibernate.cfg.xml. 新建package model放所有的pojo以及hbm映射文件。最后src目录是这个样子的:


在dao.hibernate建HibernateSessionFactory.java:

在dao.hibernate下建Hibernate.cfg.xml: 需要注意的是如果是sqlserver2005,则驱动名称有所不同:com.microsoft.sqlserver.jdbc.SQLServerDriver,这个问题很贱。

一个BaseHibernateDao:

新建pojo Book.java:

你需要一个数据库来做测试,不管怎么样,学hibernate数据库肯定是要用到的。我在家里用的是sqlserver2000,我新建的数据库名字就叫作hibernate。

model下新建一个映射文件Book.hbm.xml:值得注意的是:如果数据库有schema,别忘了加上schemacatalog(数据库名)
该文件后面带有DML建表语句.
 
一个BookHibernateDao.java:是BookDao的实现类. 值得注意的是该类里面带有test case.

运行BookHibernateDao就可以测试hibernate是否可以正常运行了.如果不出错,应该打印出所有的book.
这里解释几个问题:
1 HibernateSessionFactory的这种写法是MyEclipse自动生成的代码, 如果你手头也有MyEclipse,你也可以自动生成HibernateSessionFactory, Hibernate.cfg.xml, pojo, hbm.xml 以及dao, 但是我觉得最好都动手写一下, 包括配置文件.要不出去面试的时候人家问某某属性该怎么配? 咦? 没听过~? 我个人觉得HibernateSessionFactory这种写法很好,它是采用ThreadLocal,把session和当前线程关联,解决了session的线程安全问题。
2 BookHibernateDao中save和delete方法中我把transaction的东西注销了,这得益于Hibernate.cfg.xml中的配置:
<property name="connection.autocommit">true</property> ,  这句话的意思相当于在jdbc中:connection.setAutoCommit(true);如果你没有配置connection.autocommit = true; 就需要在程序中显式的提交事务;这个问题不少新手问到过。但是就算配置了autocommit, 也不要忘记了getSession().flush(); 为什么要调这句话,源码中是这么说的:Force this session to flush. Must be called at the end of a unit of work, before commiting the transaction and closing the session; session对对象的增删改都是暂时做标记放在session里面,调用flush之后,session会和数据库同步,该存的存,该删的删.
3 关于id: 在hibernate的世界里, 识别一个对象靠id,本例中使用uuid来自动生成32位的String类型的id,uuid的灵活性好,不依赖于数据库,但是有点浪费空间; 也可以换成int型的id,
create table book (
 id int identity(1,1) primary key,
 name varchar(20) not null,
 author varchar(20),
 price float
)

则可以使用identity 或者native 生成器, <generator class="identity" /> ; 如果是oracle数据库而且使用sequence作id生成器,则可以选sequence , <generator class="sequence"> <param name="sequence">sequence 的名字 </param> </generator> 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值