Hibernate笔记

学习HIbernate,同时做的笔记,主要是给自己看,如果您感觉有用最好,若有不当的地方,还请指教。笔记做的不是很详细,所以有点像是提纲携领。

Hibernate

1.    generator属性用来表示主键的生成方式。

2.    User.hbm.xml文件是用来建立Java类和数据库的表关系的映射(对象关系映射)。

3.    构建HibernateUtil类对获取连接进行管理

public final class HibernateUtil { private static SessionFactory sessionFactory; //为了防止用户new这个类,于是将该类的构造函数声明为私有的,不能实例化 private HibernateUtil(){ } //将建立连接会话的代码放在静态代码块中,这样在加载该类的时候就会首先执行该段代码 static{ Configuration cfg = new Configuration(); cfg.configure(); sessionFactory = cfg.buildSessionFactory(); } public static SessionFactory getSessionFactory() { return sessionFactory; } public static Session getSession(){ return sessionFactory.openSession(); } }

4.    session的几个方法save(Object object)、get(int id)、update()、delete()、Load()等方法。

5.    对象的状态

1)       瞬时状态(比如创建的User对象的实例,判断对象的状态是根据对象与session和数据库的关系区分的。如果对象在瞬时状态则表明该对象刚刚被创建与session和数据库没有关系,也不能被Hibernate进行管理);

2)       持久状态(表示该对象已经被session管理,对象的所有变化,Hibernate都能管理知道;并且该对象已经放入数据库中,数据库中有对象的记录与之对应);

3)       脱管状态(表示该对象脱离了session的管理,但是对象已经存入数据库中,对象不能被Hibernate管理);

6.    脱管的对象状态时需要调用update()方法进行更新。

7.    但不知道对象的状态时调用saveOrupdate()方法进行处理,让Hibernate进行判断对象的状态(根据id进行判断)。

8.    hql语言的使用String hql = "from User as user whereuser.name=?";注意hql的使用是对于对象而言的。所以User是对象的名称,而不是数据库中表的名称。查询利用Query对象。

9.    条件查询的使用Criteria对象

Criteria c =s.createCriteria(User.class); c.add(Restrictions.eq("name",name));

可以向条件查询对象中添加条件,其他的语法与Query对象没有太大差别。

10. 编写Dao层(Hibernate的数据访问层),UserDao定义为接口,再编写UserDaiHibernateImpl类去实现该接口。最后编写测试类模仿逻辑业务层去使用数据访问层。

11. 关系映射:多对一的关系映射,多对一的映射标签:many-to-one标签

<many-to-one name="department"column="department_id"></many-to-one>

12. 在建立多对一的关系时,比如建立员工和部门的关系时,定义员工类是在该类里边要定义部门的引用,这样Hibernate就能够建立数据库中员工和部门的映射。

13.  

建立一对多的关系的方法是:在部门类中建立一个set集合,在部门的配置文件中配置

<set name="emps"> <key column="department_id"/> <one-to-many class="Employee"/> </set>

14.  

一对一的关系,比如人和身份证的关系。建立Person和IdCard两个类,并且在两个类中分别引用两者。关键配置:Person的配置文件

<hibernate-mapping package="com.lcq.hibernate.domain"> <class name="Person"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <one-to-onename="idCard"/> </class> </hibernate-mapping>

和IdCard的配置文件

<hibernate-mapping package="com.lcq.hibernate.domain"> <class name="IdCard" table="id_card"> <id name="id"> <generator class="foreign"> <param name="property">person</param> </generator> </id> <property name="usefulLife"column="useful_life"/> <one-to-one name="person"constrained="true"/> </class> </hibernate-mapping>

15. 多对多的关系映射。在数据库中多对多的实现是建立中间表的方法,也就是两个一对多实现多对多。

注意在实际的使用过程中使用多对多的映射方式是比较少的因为如果关系中的某一方的数据量过大的话就会使得效率极低。因为有中间表,需要查很多张表才能查到。

16. 组件关联的映射方式,当两个对象之间的关系是包含关系,并且想把两张表合成为一张表时可以使用。

17. 在思考Hibernate内部是如何处理的问题时可以思考对象是如何存入数据库中,并且数据库是如何查询出对象的两个方面进行思考。

18. 在Hibernate中使用集合时应该注意,使用最多的是Set集合,并且在对象中定义集合时要使用接口,因为Hibernate内部把Java的集合又重写了一遍,所以如果直接使用具体的类的话会造成类型转换异常。所以要使用面向接口的编程。

19.  

关联关系的级联操作,利用cascade关键字,设置属性为save-update,在保存department是可以自动保存employment

<set name="emps"cascade="save-update"> <key column="department_id"/> <one-to-many class="Employee"/> </set>

20. inverse关键字的使用,老师和学生的关系,让数目多的一方去维护两者的关系;所以让学生维护和老师的关系。在老师的学生集合属性中添加inverse属性为true。注意inverse不能在有序的集合中使用,比如list、array。




转载于:https://www.cnblogs.com/lcqBlogs/archive/2012/03/03/2392368.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值