hibernate 查询方式汇总




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

Java代码 收藏代码
  1. //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段
  2. Stringhql="fromUsers";
  3. Queryquery=session.createQuery(hql);
  4. Listusers=query.list();
  5. for(Usersuser:users){
  6. System.out.println(user.getName()+":"+user.getPasswd()+":"+user.getId());
  7. }



输出结果为:
name1 : password1 : 1
name2 : password2 : 2
name3 : password3 : 3

2.查询单个字段

Java代码 收藏代码
  1. //查询单个字段
  2. Stringhql="selectnamefromUsers";
  3. Queryquery=session.createQuery(hql);
  4. Listlist=query.list();
  5. for(Stringstr:list){
  6. System.out.println(str);
  7. }



输出结果为:
name1
name2
name3

Java代码 收藏代码
  1. //查询单个字段
  2. Stringhql="selectnamefromUsers";
  3. Queryquery=session.createQuery(hql);
  4. Listlist=query.list();
  5. for(Stringstr:list){
  6. System.out.println(str);
  7. }
  8. 输出结果为:
  9. name1
  10. name2
  11. name3



3.查询其中几个字段

Java代码 收藏代码
  1. //查询其中几个字段
  2. Stringhql="selectname,passwdfromUsers";
  3. Queryquery=session.createQuery(hql);
  4. //默认查询出来的list里存放的是一个Object数组
  5. Listlist=query.list();
  6. for(Object[]object:list){
  7. Stringname=(String)object[0];
  8. Stringpasswd=(String)object[1];
  9. System.out.println(name+":"+passwd);
  10. }



输出结果为:
name1 : password1
name2 : password2
name3 : password3

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

Java代码 收藏代码
  1. 引用
  2. //查询其中几个字段,添加newlist(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了
  3. Stringhql="selectnewlist(name,passwd)fromUsers";
  4. Queryquery=session.createQuery(hql);
  5. //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认
  6. 的Object数组了,而是List集合了
  7. Listlist=query.list();
  8. for(Listuser:list){
  9. Stringname=(String)user.get(0);
  10. Stringpasswd=(String)user.get(1);
  11. System.out.println(name+":"+passwd);
  12. }


/**
输出结果为:
name1 : password1
name2 : password2
name3 : password3
*/

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

Java代码

Java代码 收藏代码
  1. //查询其中几个字段,添加newmap(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了
  2. Stringhql="selectnewmap(name,passwd)fromUsers";
  3. Queryquery=session.createQuery(hql);
  4. //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了
  5. Listlist=query.list();
  6. for(Mapuser:list){
  7. //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值
  8. //如果将hql改为:Stringhql="selectnewmap(nameasusername,passwdaspassword)fromUsers";,那么key将不是字符串0,1,2...了,而是"username","password"了
  9. Stringname=(String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形
  10. Stringpasswd=(String)user.get("1");
  11. System.out.println(name+":"+passwd);
  12. }
  13. /**
  14. 输出结果为:
  15. name1:password1
  16. name2:password2
  17. name3:password3
  18. */
  19. //查询其中几个字段,添加newmap(),注意map里的m是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了
  20. Stringhql="selectnewmap(name,passwd)fromUsers";
  21. Queryquery=session.createQuery(hql);
  22. //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是Map集合了
  23. Listlist=query.list();
  24. for(Mapuser:list){
  25. //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value是字段值
  26. //如果将hql改为:Stringhql="selectnewmap(nameasusername,passwdaspassword)fromUsers";,那么key将不是字符串0,1,2...了,而是"username","password"了
  27. Stringname=(String)user.get("0");//get("0");是get(key),注意:0,1,2...是字符串,而不是整形
  28. Stringpasswd=(String)user.get("1");
  29. System.out.println(name+":"+passwd);
  30. }



/**
输出结果为:
name1 : password1
name2 : password2
name3 : password3
*/

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

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

自定义类:

Java代码 收藏代码
  1. packagecom.domain;
  2. publicclassMyUser{
  3. privateStringusername;
  4. privateStringpassword;
  5. //因为:Stringhql="selectnewcom.domain.MyUser(name,passwd)fromUsers";所以必须要有接受2个参数的构造函数
  6. publicMyUser(Stringusername,Stringpassword){
  7. this.username=username;
  8. this.password=password;
  9. }
  10. publicStringgetUsername(){
  11. returnusername;
  12. }
  13. publicvoidsetUsername(Stringusername){
  14. this.username=username;
  15. }
  16. publicStringgetPassword(){
  17. returnpassword;
  18. }
  19. publicvoidsetPassword(Stringpassword){
  20. this.password=password;
  21. }
  22. }
  23. packagecom.domain;
  24. publicclassMyUser{
  25. privateStringusername;
  26. privateStringpassword;
  27. //因为:Stringhql="selectnewcom.domain.MyUser(name,passwd)fromUsers";所以必须要有接受2个参数的构造函数
  28. publicMyUser(Stringusername,Stringpassword){
  29. this.username=username;
  30. this.password=password;
  31. }
  32. publicStringgetUsername(){
  33. returnusername;
  34. }
  35. publicvoidsetUsername(Stringusername){
  36. this.username=username;
  37. }
  38. publicStringgetPassword(){
  39. returnpassword;
  40. }
  41. publicvoidsetPassword(Stringpassword){
  42. this.password=password;
  43. }
  44. }





Java代码 收藏代码
  1. //通过query.list()出来的list里存放的不再是默认的Object数组了,而是自定义的类MyUser,必须加包名,Stringhql="fromUsers";中的Users类也是必须加包名的,但是因为再Users.hbm.xml里auto-import默认值为true(所以auto-import属性也可以不写),自动导入了
  2. Stringhql="selectnewcom.domain.MyUser(name,passwd)fromUsers";
  3. Queryquery=session.createQuery(hql);
  4. //默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是MyUser对象了
  5. ListmyUsers=query.list();
  6. for(MyUsermyUser:myUsers){
  7. Stringname=myUser.getUsername();
  8. Stringpasswd=myUser.getPassword();
  9. System.out.println(name+":"+passwd);
  10. }




/**
输出结果为:
name1 : password1
name2 : password2
name3 : password3
*/

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

8:条件查询

Java代码 收藏代码
  1. //条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数
  2. Stringhql="fromUserswherename=?andpasswd=?";
  3. Queryquery=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. Listlist=query.list();
  11. for(Usersusers:list){
  12. System.out.println(users.getId());
  13. }
  14. //条件查询,参数索引值从0开始,索引位置。通过setString,setParameter设置参数
  15. Stringhql="fromUserswherename=?andpasswd=?";
  16. Queryquery=session.createQuery(hql);
  17. //第1种方式
  18. //query.setString(0,"name1");
  19. //query.setString(1,"password1");
  20. //第2种方式
  21. query.setParameter(0,"name1",Hibernate.STRING);
  22. query.setParameter(1,"password1",Hibernate.STRING);
  23. Listlist=query.list();
  24. for(Usersusers:list){
  25. System.out.println(users.getId());
  26. }



Java代码 收藏代码
  1. //条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数
  2. Stringhql="fromUserswherename=:usernameandpasswd=:password";
  3. Queryquery=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. Listlist=query.list();
  11. for(Usersusers:list){
  12. System.out.println(users.getId());
  13. }
  14. //条件查询,自定义索引名(参数名):username,:password.通过setString,setParameter设置参数
  15. Stringhql="fromUserswherename=:usernameandpasswd=:password";
  16. Queryquery=session.createQuery(hql);
  17. //第1种方式
  18. //query.setString("username","name1");
  19. //query.setString("password","password1");
  20. //第2种方式,第3个参数确定类型
  21. query.setParameter("username","name1",Hibernate.STRING);
  22. query.setParameter("password","password1",Hibernate.STRING);
  23. Listlist=query.list();
  24. for(Usersusers:list){
  25. System.out.println(users.getId());
  26. }




Java代码 收藏代码
  1. //条件查询,通过setProperties设置参数
  2. Stringhql="fromUserswherename=:usernameandpasswd=:password";
  3. Queryquery=session.createQuery(hql);
  4. //MyUser类的2个属性必须和:username和:password对应
  5. MyUsermyUser=newMyUser("name1","password1");
  6. query.setProperties(myUser);
  7. Listlist=query.list();
  8. for(Usersusers:list){
  9. System.out.println(users.getId());
  10. }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值