读书人

hibernatehql小结

发布时间: 2012-07-03 13:37:43 作者: rapoo

hibernate——hql总结

1. 查询整个映射对象所有字段?

Java代码
  1. //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段?????
  2. ????????String?hql?=?"from?Users";?????
  3. ????????Query?query?=?session.createQuery(hql);?????
  4. ?????????????
  5. ????????List<Users>?users?=?query.list();?????
  6. ????????for(Users?user?:?users){?????
  7. ????????????System.out.println(user.getName()?+?"?:?"?+?user.getPasswd()?+?"?:?"?+?user.getId());?????
  8. ????????}?????
  9. ????
  10. ?输出结果为:?????
  11. name1?:?password1?:?1????
  12. name2?:?password2?:?2????
  13. name3?:?password3?:?3????



2.查询单个字段??

Java代码?
  1. //查询单个字段?????
  2. ????????String?hql?=?"?select?name?from?Users";?????
  3. ????????Query?query?=?session.createQuery(hql);?????
  4. ?????????????
  5. ????????List<String>?list?=?query.list();?????
  6. ????????for(String?str?:?list){?????
  7. ????????????System.out.println(str);?????
  8. ????????}?????
  9. 输出结果为:?????
  10. name1?????
  11. name2?????
  12. name3????

3.查询其中几个字段?

  1. //查询其中几个字段?????
  2. ????????String?hql?=?"?select?name,passwd?from?Users";?????
  3. ????????Query?query?=?session.createQuery(hql);?????
  4. ????????//默认查询出来的list里存放的是一个Object数组?????
  5. ????????List<Object[]>?list?=?query.list();?????
  6. ????????for(Object[]?object?:?list){?????
  7. ????????????String?name?=?(String)object[0];?????
  8. ????????????String?passwd?=?(String)object[1];?????
  9. ?????????????????
  10. ????????????System.out.println(name?+?"?:?"?+?passwd);?????
  11. ????????}?????
  12. 输出结果为:?????
  13. name1?:?password1?????
  14. name2?:?password2?????
  15. name3?:?password3????

4.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回?
引用

//查询其中几个字段,添加new list(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了???
??????? String hql = " select new list(name,passwd) from Users";???
??????? Query query = session.createQuery(hql);???
??????? //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了???
??????? List<List> list = query.list();???
??????? for(List user : list){???
??????????? String name = (String)user.get(0);???
??????????? String passwd = (String)user.get(1);???
???????????????
??????????? System.out.println(name + " : " + passwd);???
??????? }???
??????? /**??
??????? 输出结果为:??
???????? name1 : password1??
??????? name2 : password2??
??????? name3 : password3??
???????? */?


5.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回?

  1. //查询其中几个字段,添加new?map(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了?????
  2. ????????String?hql?=?"?select?new?map(name,passwd)?from?Users";?????
  3. ????????Query?query?=?session.createQuery(hql);?????
  4. ????????//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了?????
  5. ????????List<Map>?list?=?query.list();?????
  6. ????????for(Map?user?:?list){?????
  7. ????????????//一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值?????
  8. ????????????//如果将hql改为:String?hql?=?"?select?new?map(name?as?username,passwd?as?password)?from?Users";,那么key将不是字符串0,1,2...了,而是"username","password"了?????
  9. ????????????String?name?=?(String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形?????
  10. ????????????String?passwd?=?(String)user.get("1");?????
  11. ?????????????????
  12. ????????????System.out.println(name?+?"?:?"?+?passwd);?????
  13. ????????}?????
  14. ????????/**???
  15. ????????输出结果为:???
  16. ?????????name1?:?password1???
  17. ????????name2?:?password2???
  18. ????????name3?:?password3???
  19. ?????????*/????


6.修改默认查询结果(query.list())不以Object[]数组形式返回,以Set形式返回,但是因为Set里是不允许有重复的元素,所以:username和password的值不能相同。只需将hql改为:String hql = " select new set(name,passwd) from Users";?

7.修改默认查询结果(query.list())不以Object[]数组形式返回,以自定义类型返回?
自定义类:?

?
  1. package?com.domain;?????
  2. ????
  3. public?class?MyUser?{?????
  4. ????
  5. ????private?String?username;?????
  6. ????private?String?password;?????
  7. //因为:String?hql?=?"?select?new??com.domain.MyUser(name,passwd)?from?Users";所以必须要有接受2个参数的构造函数?????
  8. ????public?MyUser(String?username,String?password){?????
  9. ????????this.username?=?username;?????
  10. ????????this.password?=?password;?????
  11. ????}?????
  12. ?????????
  13. ????public?String?getUsername()?{?????
  14. ????????return?username;?????
  15. ????}?????
  16. ????public?void?setUsername(String?username)?{?????
  17. ????????this.username?=?username;?????
  18. ????}?????
  19. ????public?String?getPassword()?{?????
  20. ????????return?password;?????
  21. ????}?????
  22. ????public?void?setPassword(String?password)?{?????
  23. ????????this.password?=?password;?????
  24. ????}?????
  25. ?????????
  26. ?????????
  27. }????

?

  1. //通过query.list()出来的list里存放的不再是默认的Object数组了,而是自定义的类MyUser,必须加包名,String?hql?=?"from?Users";中的Users类也是必须加包名的,但是因为再Users.hbm.xml里<hibernate-mapping?auto-import="true">?auto-import默认值为true(所以auto-import属性也可以不写),自动导入了?????
  2. ????????String?hql?=?"?select?new??com.domain.MyUser(name,passwd)?from?Users";?????
  3. ????????Query?query?=?session.createQuery(hql);?????
  4. ????????//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是MyUser对象了?????
  5. ????????List<MyUser>?myUsers?=?query.list();?????
  6. ????????for(MyUser?myUser?:?myUsers){?????
  7. ????????????String?name?=?myUser.getUsername();?????
  8. ????????????String?passwd?=?myUser.getPassword();?????
  9. ????????????System.out.println(name?+?"?:?"?+?passwd);?????
  10. ????????}?????
  11. ????????/**???
  12. ????????输出结果为:???
  13. ????????name1?:?password1???
  14. ????????name2?:?password2???
  15. ????????name3?:?password3???
  16. ?????????*/? ??

8:条件查询?

?
  1. //条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数?????
  2. ????????String?hql?=?"from?Users?where?name=??and?passwd=?";?????
  3. ????????Query?query?=?session.createQuery(hql);?????
  4. ????????//第1种方式?????
  5. //??????query.setString(0,?"name1");?????
  6. //??????query.setString(1,?"password1");?????
  7. ????????//第2种方式?????
  8. ????????query.setParameter(0,?"name1",Hibernate.STRING);?????
  9. ????????query.setParameter(1,?"password1",Hibernate.STRING);?????
  10. ????????List<Users>?list?=?query.list();?????
  11. ????????for(Users?users?:?list){?????
  12. ????????????System.out.println(users.getId());?????
  13. ????????}?????

?

  1. //条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数?????
  2. ????????String?hql?=?"from?Users?where?name=:username?and?passwd=:password";?????
  3. ????????Query?query?=?session.createQuery(hql);?????
  4. ????????//第1种方式?????
  5. //??????query.setString("username",?"name1");?????
  6. //??????query.setString("password",?"password1");?????
  7. ????????//第2种方式,第3个参数确定类型?????
  8. ????????query.setParameter("username",?"name1",Hibernate.STRING);?????
  9. ????????query.setParameter("password",?"password1",Hibernate.STRING);?????
  10. ????????List<Users>?list?=?query.list();?????
  11. ????????for(Users?users?:?list){?????
  12. ????????????System.out.println(users.getId());?????
  13. ????????}????

?

  1. //条件查询,通过setProperties设置参数?????
  2. ????????String?hql?=?"from?Users?where?name=:username?and?passwd=:password";?????
  3. ????????Query?query?=?session.createQuery(hql);?????
  4. ????????//MyUser类的2个属性必须和:username和:password对应?????
  5. ????????MyUser?myUser?=?new?MyUser("name1","password1");?????
  6. ????????query.setProperties(myUser);?????
  7. ????????List<Users>?list?=?query.list();?????
  8. ????????for(Users?users?:?list){?????
  9. ????????????System.out.println(users.getId());?????
  10. ????????} ?

读书人网 >其他数据库

热点推荐