hibernate学习笔记(九)

criteria的简单用法(使用的较少):

Session s=HibernateUtil.getCurrentSession();
		Transaction tx=s.beginTransaction();
		Criteria cri=s.createCriteria(Student.class);
		//添加检索条件
		cri.add(Restrictions.gt("sage", new Long(10)));
		List<Student> list=cri.list();
		for(Student s1: list){
			System.out.println(s1.getSname());
		}
		
		tx.commit();       


我们前边说的一直说的是hibernate开发模式中的DB->domain对象这种方式,其实还有一种方式是编写domain对象和映射文件然后自动生成DB,这种是官方推荐的,但是在实际的应用中不是很常用


这里我们说明如果要自动的创建出对应的数据库,需要做配置(hibernate.cfg.xml).

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

这里有四个配置值: create , update , create-drop, validate

create : 当我们的应用程序加载hibernate.cfg.xml [ new Configuration().config(); ]就会根据映射文件,创建出数据库, 每次都会重新创建, 原来表中的数据就没有了,就会被覆盖掉了;

update: 如果数据库中没有该表,则创建,如果有表,则看有没有变化,如果有变化,则更新;

create-drop: 在显示关闭 sessionFactory时,将drop掉数据库的schema;

validate: 相当于每次插入数据之前都会验证数据库中的表结构和hbm文件的结构是否一致


   domain对象的细节:

1. 需要一个无参的构造函数(用于hibernate反射该对象)

2. 应当有一个无业务逻辑的主键属性.

3. 给每个属性提供 get set方法.

4. 在domian对象中的属性,只有配置到了对象映射文件后,才会被hiberante管理.

5. 属性一般是private范围


对象关系文件中,有些属性是可以不配,hibernate会采用默认机制,比如

<class table=”?” > table 值不配,则以类的小写做表名

<property type=”?”> type不配置,则hibernate会根据类的属性类型,选择一个适当的类型


如何判断一个对象处于怎样的状态?

主要的依据是: 1. 看该对象是否处于session, 2, 看在数据库中有没有对应的记录

瞬时态没有session管理,同时数据库没有对应记录

持久态session管理,同时在数据库中有记录

脱管态/游离态: 没有session管理,但是在数据库中有记录.



懒加载:

简述当我们查询一个对象的时候,在默认情况下,返回的只是该对象的普通属性,当用户去使用对象属性时,才会向数据库发出再一次的查询.这种现象我们称为 lazy现象.

解决方法可以这样:

1. 显示初始化 Hibernate.initized(代理对象)

2. 修改对象关系文件 lazy  改写 lazy=false

通过过滤器(web项目) openSessionInView



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值