构建hibernate项目
- 导入相关jar包
- 配置hibernate.cfg.xml
- 导头。hibernate-mapping-3.0.dtd
或
<!DOCTYPE hibernate-mapping
SYSTEM
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd" >
- 导头。hibernate-mapping-3.0.dtd
<hibernate-mapping package="cn.com.pojo">
<class name="User" table="userinfo" dynamic-update="true">
<id name="userId" column="userId">
<generator class="native"></generator>
</id>
<property name="username" column="loginname" type="string"></property>
<property name="password"></property>
<property name="regDate" type="java.sql.Date"></property>
</class>
</hibernate-mapping>
<!-- 联合主键 -->
<composite-id name="pk">
<key-property name="sid" column="sid"></key-property>
<key-property name="cid" column="cid"></key-property>
</composite-id>
<!-- 一对多配置 name是属性名称 -->
<!-- 配置双向一对多关联或双向多对多关联中 由谁来管理双方的关联关系 设置true由对方管理 -->
<!-- cascade会级联更新或删除。但是没有特殊情况,一般不设置。 -->
<set name="students" lazy="extra" inverse="true">
<!-- 关联的数据表外键 -->
<key column="classid"></key>
<!-- 关联的数据类型 -->
<one-to-many class="Student"/>
</set>
<!-- 多对多配置 name是关联属性名称 table是第三张中间表名字-->
<set name="students" table="scoretbl">
<key column="cid"></key>
<many-to-many class="Student" column="sid"></many-to-many>
</set>
<!-- 多对一配置 name表示的是类中属性名 column是关联的外键列的名称 class是关联类型 -->
<many-to-one name="classTbl" column="classid" class="ClassTbl" lazy="false"></many-to-one>
<!-- 多对多配置 name是关联属性名称 table是第三张中间表名字-->
<set name="courses" table="scoretbl">
<key column="sid"></key>
<many-to-many class="Course" column="cid"></many-to-many>
</set>
单例设计模式:保证应用中只有一个相关对象可用。往往是管理者。
- 饿汉模式
- 懒汉模式
- 私有的静态属性。
- 私有的构造函数。从外部无法new对象。
- 对外提供静态的访问方法,返回可用对象。
- 方法加多线程控制synchronized。防止多线程并发访问。
实体对象关联映射(ORM-mapping)
- 1 一对一 <one-to-one>
- 2 一对多 <set> <one-to-many> </set> / 多对一 <many-to-one>
- 3 多对多 <set> <many-to-many> </set>
一:查询方式
立即查询 lazy="false";
延时检索 lazy="true";
-
表连接检索 fetch="select"; 近似理解为立即检索
fetch="join"; 采用左外连接检索多表连接查询
- select [] from tbl1 t1,tbl2 t2 where t1.id1=t2.id2
- 左外连接查询,可将左表中没有关联的记录查出
- select st.sname,ct.classname from classtbl ct left join studenttbl st on st.classid=ct.classid
二:控制反转 invers="true" 由简单的一方去管理,在复杂的一方做这个设置
三:级联 cascade="all/delete/none/update/save" 慎用级联