Hibernate笔记(一)

初始配置:

1.建立新项目,加入相应的jar包,最好自定义一个liberary,命名为Hibernate,将需要的jar文件加入,hibernate-core,/requires,slf-nop jar

2.引入mysql的jdbc的驱动包

3.mysql中建立对应的数据库和表

4.建立hibernate配置文件(建议从原始文档copy)hibernate.cfg.xml  ,xxxxx.hbm.xml

 

 

测试类:

 

建立Annotation版的hibernate:

 加入annotation的jar包:ejb3-persisitance,hibernate-commons-annotations

 

建立Teacher类和TeacherTest类测试

修改Configuration为

Configuration cfg=new AnnotationConfiguration();

 

在Teacher类上方加上   @Entity

Teacher类的方法 getId()   上加@Id  说明Id是主键

修改hibernate配置文件hibernate.cfg.xml加入

<mapping class="cn.edu.haut.hibernate.model.Teacher"/>

 

 

设置自动提示:

java-editor-editor assistance 默认的for java加入@

 

 

通过Annotation建表(若存在则自动删除):

在hibernate.cfg.xml中加入sdf

<property name="hbm2ddl.auto">create</property>

其他可选字段参考hibernate doc

 

 

实际工作中往往是先建表后建类

 

搭建日志环境 log4j 和测试环境JUnit

1.搭建日志环境:

利用slf4j的接口和log4j的实现搭建

首先删除自定义类库hibernate中的 slf4j-non-1.5.8.jar,添加log4j的jar包(log4j-1.2.16.jar),再添加slf4j中的slf4j-log4j12-1.5.8.jar包,将slf4j接口和log4j实现连接在一起,(适配器adapter模式),加入log4j的配置文件,可以copy  /hibernate-distribution-3.3.2.GA/project/etc目录下的log4j.properties文件,输出ddl语句,屏蔽掉无需语句。ok,搭建成功

 

2.搭建测试环境:

建立自己的类库MyJUnit,引入JUnit的jar包,在buildpath中加入MyJUnit

new一个source folder用来存放测试用例源文件, 建议建立和所测试类名所在包名一致的包名,建立测试类:

 

 

sessionfactory的建立比较耗时,写一个単例,

@BeforeClas,指的是对象初始换之前,class load之后马上执行该方法

 

JUnit的BUG:

hibernate.cfg.xml文件写错,junit有可能不报错,解决办法:
1.对sf进行try{}catch()                         2.加main方法,调用beforeClass();

 

Format Sql

  <property name="show_sql">true</property>

<property name="format_sql">true</property> 

 

 

Hibernate基础配置:

表名和类名不同:
类上方加
@Table(name="_teacher")

都加在get方法上
字段名和属性名相同
相当于默认添加
@Basic
字段名和属性名不对应:
在属性上方加
@Column(name="_name")

不需要持久化的字段:
@Transient


映射日期和时间类型:
@Temporal(TemporalType.DATE)   (只记录日期)

映射枚举类型:
@Enumerated(EnumType.STRING)

 

 

ID生成策略:


xml 参考doc
Annotation配置
@ID
@GenerateValue(默认是auto)

@GenerateValue(strategy=GenerationType.IDENTITY)
@GenerateValue(strategy=GenerationType.SEQUENCE)

TableGenerator(跨数据库平台,非常少用)


联合主键:
id+name
组件类实现Serializable重写equals和hashcode
xml配置:doc文档
Annotation:doc文档,主键映射

 

 

核心API

 

三种状态:


核心开发接口,三种状态


Configuration
AnnotationConfiguration.configure.buildSessionFactory();
AnnotationConfiguration.configure得到默认配置文件hibernate.cfg.xml,也可以指定别的位置

 

SessionFactory(session可以理解为数据库的连接)
Session session=sessionFactory.getCurrentFactory();

 

sessionFactory:做成単例
a.用来产生和管理Session
b.通常情况下每个应用只需一个SessionFactory
c.除非要访问多个数据库
d.关注两个方法:openSession() getCurrentSession()
   openSession()每次都是新的,需要close
   getCurrentSession从上下文找,如果有用旧的如果没有用新的
 1.用途,界定事物边界
 2.事务提交自动close
 3.current-session_context_class(jta thread)(java transaction)
      thread用connection事务

      jta使用application server提供的事务,多用于分布式


三种状态:
id自动生成的(@GeneratedValue)

Transient(new一个对象未设id)
Persistent(调用save之后)
Detached (session执行close后)

 

三种状态的区分:
a.有没有id
b.id在数据库中有没有
c.在缓中有没有id

(transaction  缓存中一个对象,无id)
(persistent 有id,内存有,数据库有,缓存有 )
(detached 内存中有,缓存中没有,数据库有)

 

 

 Session接口:
save()
delete()
load()
get()
get和load的区别:
load返回代理对象(设计模式-动态代理(设计模式中最难的)),等到真正用到时才

发出sql语句
不存在对应记录表现不一样
get直接从数据库加载不会延迟
update()
更新部分更改的字段
使用HQL语句(建议)
saveOrUpdate()
clear()

schemeExport

 

 

 

关系映射:

一对一双向关联:
OneToOne
凡是双向关联设mappedBy属性

 

组件映射(两个对象映射到同一张表)
@Embeded

多对多的双向关联
加一张中间表

ManyToMany

 

 

 


多对一和一对多
manyToOne
在多的一方加外键


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值