hibernate——Day04

Day04

总结:

一、一对一的关联关系映射(外键 + 唯一)

         基于外键的

                   有外键方:<many-to-onename="obj" class=".." column=".."unique="true"/>

                   无外键方:<one-to-onename=".." class=".." property-ref="obj"/>

 

         基于主键的

                   有外键方:<one-to-one...>

                   无外键方:<one-to-one...>

 

         操作:

                   在采用基于外键的方式时:只有有外键方可以维护关联关系。

                   在采用基于主键的方式时:双方都不可以维护关系。

 

 

二、继承结构映射

         1,整个继承结构使用一张表。列上不能有not-null="true"。

         2,每个类对应一张表,抽象类也对应表。

         3,每个具体类对应一张表,抽象类不对应表。

 

 

三、HQL语句

         与SQL的语法类似。

         HQL查询的对象、属性,所以写的时候写的是类名、属性名。

         HQL的关键字不区分大小写,类名与属性名区分大小写。

         语法:

                   SELECT     别名/属性名/表达式

                   FROM       实体 AS 别名

                   WHERE    过滤条件

                   ORDERBY        排序条件

                  

                   SELECT     别名/属性名/表达式

                   FROM       实体 AS 别名

                   WHERE    过滤条件

                   GROUPBY        分组条件

                   HAVING             分组后的结果的过滤条件

                   ORDERBY        排序条件

 

懒加载:

         也叫延迟加载,不是在执行获取操作时马上生成SQL,而是在第一次使用时生成SQL。

         分成两种:

                   类级别的:

                            <class... lazy="true/false">

                   属性级别的:

                            <set/list/map/bag... lazy="...">

                            <many-to-one... lazy="...">

                            <one-to-one... lazy="...">

         在使用懒加载特性时,可能会有LazyInitializationException异常:

                   原因:    

                            真正的去获取数据时,Session已经没有了。

                   解决办法:

                            方式一:让Session在真正加载后再关闭。

                            方式二:或是在Sessoin关闭前执行Hibernate.initialize(department.getEmployees());

数据库连接池

需要导入特定的jar包:在主配置文件中配置数据库连接池的信息。

<!-- C3P0连接池设定-->

       <!-- 使用c3p0连接池  配置连接池提供的供应商-->

       <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider                                                                                                                                                    </property>

       <!--在连接池中可用的数据库连接的最少数目 -->

       <property name="c3p0.min_size">5</property>

       <!--在连接池中所有数据库连接的最大数目  -->

       <property name="c3p0.max_size">20</property>

二级缓存

<!-- 使用二级缓存,默认是未打开的。 -->

       <!-- 指定要使用的缓存的提供商,这也就打开了二级缓存

       <property name="cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>

       -->

       <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

       <!-- 开启使用查询缓存 -->

       <property name="cache.use_query_cache">true</property>

       <!-- 指定要使用二级缓存的实体类 -->

       <class-cache usage="read-write"class="cn.itcast.l_second_cache.Employee"/>

       <class-cache usage="read-write"class="cn.itcast.l_second_cache.Department"/>

       <collection-cache usage="read-write"collection="cn.itcast.l_second_cache.Department.employees"/>

 

映射关系模板

一对多(set)

<set name = …>

<key column=…/>

<one-to-many class=…>

</set>

 

多对一:

<many-to-one  name=… class=… column=…/>

 

多对多:

<set name=… table=…>

<key column=…/>

<many-to-many calss=… column=…/>

</set>

 

一对一(基于外键的有外键方):

<many-to-one name=… calss=… column=…unique=”true”/>

一对一(基于外键的无外键方)

<one-to-one  name=… class=… property-ref=…/>

填空:

Name属相:填当前属性名称

Class:当前属性所的类名称

Column:在many-to-one中:就写name的值加上id后缀

       在一对多的key中,写对方类的表达这个关系的外键列名

       多对多的key 中:写自己类的名称加上id后缀

       在多对多的many-to-many中写对方类加上id后缀。

      Property-ref:对方name的值。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值