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

来源:互联网 发布:淘宝信誉131458 编辑:程序博客网 时间:2024/06/08 00:17
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();

原创粉丝点击