转转转!hibernate
01.Hibernate课堂纪要
02.
03.为什么要使用Hibernate
04.解决JDBC繁琐的代码问题。
05.Hibernate是在JDBC的基础上进行封装,只需要少量的代码完成持久化工作
06.
07.什么是orm映射
08.面向对象语言和关系数据库之间阻抗不匹配的问题。完成对象数据到关系数据库映射
09.
10.基本操作
11.1.添加包
12.2.添加hibernate.cfg.xml文件
13.3.添加对象和映射文件(object.hbm.xml)
14.
15.使用hibernate的七个步骤:
16.1.读取配置文件
17.Configurationcfg=newConfiguration().configre();
18.2.创建sessionFactoryfactory=cfg.buildSessionFactory();
19.3.创建sessionsession=factory.opensession();
20.4.打开事物Transactiontx=session.beginTransaction();
21.5.持久化操作session.save();...
22.6.提交事物tx.commint();
23.7.关闭session.close();
24.
25.
26.使用工具简化操作(操作方式)
27.1.添加hibernate支持
28.2.配置DBBrowser配置数据源
29.2.将表中的数据导出为实体和映射文件
30.
31.hibernate的三种状态
32.1.瞬时状态:
33.当new一个对象的时所处的状态为瞬时状态。
34.2.持久状态:
35.save或update的时所处的状态为持久状态
36.3.离线状态
37.a>删除前要先获取该对像,将该对象删除哦,获取的对象还存在,只是不能在于数据库
38.打交道,不受hibernate管理,称为离线状态。
39.b>删除数据或者关闭session的时候所处的状态为离线状态
40.
41.
42.get和load加载数据的区别
43.get:
44.1.使用get加载数据时,hibernate会先发hql语句,并将基本属性的数据加载进来。
45.如果不存在该数据,会抛出nullException空指针。
46.
47.2.当关闭session后,使用get()加载其关联数据时,将抛出onsessionException
48.session关闭后属于离线状态,并不能再获取其关联的数据。处理此方式有两种方法:
49.
50.方式一:在配置文件中设置lazy属性为false。
51.方式二:在代码块中先获取关联的非ID数据即可。
52.
53.删除数据时使用。呵呵
54.默认情况下,get不会去获取所关联的数据(session关闭的前提下)
55.
56.load:
57.1.load属于延迟加载。执行时hibernate不会先发hql语句。先获取ID,如果没有用到非Id属性,load不会去加载其他数据。当数据库没有与之对象的数据,将抛出ObjectNOFoundException.处理方式方式有:
58.
59.方式一:在配置文件中设置lazy属性为false。
60.方式二:在代码块中先获取非Id的数据
61.
62.更新数据使用...
63.
64.
65.
66.多对一单向关联(操作方式):
67.
68.1.在多的一方添加一的一方的实体作为属性
69.
70.2.配置文件中使用<many-to-one>标签,如:
71.<many-to-onename="group"
72.class="com.org.bean_many2one.Group"column="groupId"/>
73.3.保存数据
74.添加一的一方的数据
75.添加多的一方的数据并将一的Object放入set()中
76.
77.一对多单向关联(操作方式):
78.
79.1.在一的一方添加set集合,并设置get和set属性如
80.privateSetusers=newHashSet(0);
81.2.配置文件中使用<set>标签,如:
82.<setname="users">
83.<keycolumn="gid"/>
84.<one-to-manyclass="com.org.bean_one2many.User"/>
85.</set>
86.
87.3.保存数据(先save多的一方,在使用集合将对象add进去):
88.
89.Useruser1=newUser();
90.user1.setUname("xiaoling");
91.session.save(user1);
92.
93.Groupgroup=newGroup();
94.group.setGname("北大");
95.group.getUsers().add(user1);
96.
97.session.save(group);
98.tx.commit();
99.
100.
101.一对多双向关联
102.
103.1.一的一方添加set集合属性
104.privateSetusers=newHashSet(0);
105.配置文件:
106.<setname="users">
107.<keycolumn="gid"/>
108.<one-to-manyclass="com.org.bean_one2many2.User"/>
109.</set>
110.2.多的一方添加一的一方的为属性,并设置get和set方式
111.privateGroupgroup;
112.配置文件:
113.<many-to-onename="group"
114.class="com.org.bean_one2many2.Group"column="gid"/>
115.
116.
117.
118.多对多关联
119.
120.1.在A方使用Set集合为属性,在B那边使用A作为属性。
121.2.在A的一方配置配置文件
122.<setname="users">
123.<keycolumn="uid"/>
124.<one-to-manyclass="com.org.bean_many2many.User"/>
125.</set>
126.
127.在B的一方配置配置文件
128.<many-to-onename="group"
129.class="com.org.bean_many2many.Group"column="groupId"/>
130.
131.
132.
133.**************************************************************
134.级联cascade删除数据:
135.
136.使用cascade,其属性有all、save-update、delete、none。
137.一般使用save-update即可。
138.1.cascade=“delete”:删除数据时,如果外键在允许为空的情况下可以
139.执行操作,删除后多的一方为所关联的数据将会时Null,
140.2.一般情况下不使用该操作,其危险性较高。
141.
142.
143.
144.inverse属性
145.针对多对多的关联,如果其中某一方设置inverse为true,那么这一方及放弃
146.他们之间的关联关系。不会出现双方一起维护信息而引起的数据冗余。