hibernate的查询

①【HQL】

常规四步走:

//①写hql语句 String hql ="from User as u where u.username=?"; String hql ="from User as u where u.username= :name";//另一种写法 //②创建query对象 Query query = session.createQuery(hql); //③对占位符赋值 query.setString(0,'tom'); query.serString('name','tom');//另一种写法 //④查询 query.list();

获取不完整对象(list是对象数组的集合,如果list是用数组实现的话那么他可以说是大数组中的每一个元素都是小数组。)

String hql = "select username,userpwd from User"; Query query = sesssion.createQuery(hql); List<Object> userlist = query.list();//此时查得的并不是List<User> for(Object obj:userlist){ Object[] thisuser = (Object[])obj;//将所得集合中的每个元素强制类型转换为对象数组 System.out.println("username:"+thisuser[0]+"/tuserpwd:"+thisuser[1]);//需要使用索引取值 }

特别的,当要查询的结果可以预见只有一个时,调用query.uniqueResult()方法进行查询,使用Object接收查询结果

String hql = "select count(id),sum(usermoney) from User"; Query query = session.createQuery(hql); Object obj = query.uniqueResult();//此例查得的结果仍为不完整对象 System.out.println("用户个数为:"+obj[0]+"/t总钱数为:"+obj[1]);

②【标准对象的查询】(个人认为与①中的第一种情况即常规情况类似,只不过是标准对象的查询可以调用添加限制条件的方法)

//标准化查询不需要写查询语句,若需要限制则通过cri的方法来添加限制 Criteria cri = session.createCriteria(User.class);//以此句来看可知Criteria跟Query是一个级别的 //①单个条件的添加(如果逐个添加,则各条件之间是and的关系) cri.add(Restrictions.eq("username","vivi")); cri.add(Restrictions.like("username","%vi%")); cri.add(Restrictions.or(Restrictions.eq("username","vivi"),Restrictions.like("username","%vi%")));//或语句的写法 //②分组与统计 //仅仅统计一项时的写法 cri.setProjection(Projections.sum("id")); //同时统计多项时的写法 ProjectionList list = Projections.projectionlist();//不是new出来的,看来是Projection类的静态方法 list.add(Projections.sum("usermoney")); list.add(Projections.count("id")); //查询同上(如果是唯一结果可以用Object接收,否则用list接收)

③【SQL查询】

//①写sql语句 String sql = "select * from t_user where username='vivi'"; //②创建SQLQuery对象 SQLQuery query = session.createSQLQuery(sql); //如果正好是完整对象,则可以写为session.createSQLQuery(sql).addEntity(User.class); //③查询(每个元素仍为对象数组) List<Object> list = query.list(); //④调用(同①的第二种情况)

你可能感兴趣的:(hibernate的查询)