hibernate学习笔记02---hibernate的几个方法

1、hibernate管理的类要求:
	(1)该类至少有一个无参的构造方法;
	(2)类必须是非final的,否则懒加载无法使用
	
2、session的几个方法:
	get:只能根据id来得到一条记录
		......
		User user=session.get(userClass,id);
		.....
	load:只能根据id来得到一条记录
		User user=session.load(userClass,id);
	区别:load的懒加载的,执行了get后会里面访问数据库,进行查询的;
			而load方法执行了后不里面去方法数据库,而是在使用时才访问;
			如:User user=session.load(userClass,id);----执行了他不访问数据库
				System.out.println(user.getName());----执行他是才访问数据库;
			ps:用load时会先创建出一个User对象,所以即使不访问数据库,此时
				也会有个user对象,及user不会为空;
	persist:保存
		persist和save的区别是:
			在没有开启事务的时候用save方法,他会向数据库中插入记录,但是
				因为没有事务提交,所以自动回滚,最终数据库中没有该记录;
			而persist,如果没有开启事务,则根本不会向数据 库中插入记录。
	对象的几个状态:
		(1)瞬时状态:
				User user=new User();---此时对象于session和数据库都没关联
		(2)持久状态:
				session.save(user);---此时于session和数据库都有关联
		(3)脱管状态:
				session.close();
				此时的user从session中脱管---此时于session没有关联,但数据库中有对象记录

3、hql查询:
	get,load只能根据id查询,如果根据name查怎get,load是不可以的;
	hql是针对对象的查询,而sql是针对表的查询
		String hql="from User as user where user.name=?";----User 类不是表
		//query类似JDBC中的PreparedStatement(PreparedStatement ps=conn.prepareStatement(sql))
		Query query=session.createQuery(hql);
		query.setString(0,"lid");----下标从零开始,JDBC从1开始
		List list=query.list();----list()的作用类似于JDBC的executQuery();
		//User user=(User)query.uniqueResult();---如果确定只有一个结果,可以用该方法
	
4、hql的命名参数:
	假设:String hql="from User as user where user.name=? and user.age=?....."
		像上面假设有多个? 我们在为?赋值时是必须对应的,如果?很多或者顺序不小心变了
		,这些都很很容易造成错误;
	解决办法:
		String hql="from User as user where user.name=:name and user.age=:a";
		Query query=session.createQuery(hql);
		query.setString("name","lid");
		query.setInt("a",12);
		这样只要变量名称对应上就可以,不用关心顺序;
		
5、分页用到的两个方法:
		query.setFirstResult(0);---从哪一条开始取数据
		query.setMaxResult(100);---取多少条数据
		底层就是用的mysql或者oracle等内部的分页,如mysql则是limit(0,100)
		
6、Criteria---条件查询:
		Criteria c=c.createQuery(User.class);
		c.add(Restrictions.eq("name","lid"));---添加约束条件,让name属性等于"lid"
		c.add(Restrictions.gt("birthday",new Date()));---生日大于当前时间的
		c.add(Restrictions.lt("age",12))---年龄小于12的
		List list=c.list();
		//User user=(User)c.uniqueResult();
	
	
				
				

你可能感兴趣的:(hibernate学习笔记02---hibernate的几个方法)