转(csdn)hibernate多字段查询-

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

Java代码

1.//直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段

2.Stringhql="fromUsers";

3.Queryquery=session.createQuery(hql);

4.

5.List<Users>users=query.list();

6.for(Usersuser: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.Stringhql="selectnamefromUsers";

3.Queryquery=session.createQuery(hql);

4.

5.List<String>list=query.list();

6.for(Stringstr:list){

7.System.out.println(str);

8.}

9.输出结果为:

10.name1

11.name2

12.name3

3.查询其中几个字段

Java代码

1.//查询其中几个字段

2.Stringhql="selectname,passwdfromUsers";

3.Queryquery=session.createQuery(hql);

4.//默认查询出来的list里存放的是一个Object数组

5.List<Object[]>list=query.list();

6.for(Object[]object:list){

7.Stringname=(String)object[0];

8.Stringpasswd=(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形式返回

引用

//查询其中几个字段,添加newlist(),注意list里的l是小写的。也不需要导入包,这样通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了

Stringhql="selectnewlist(name,passwd)fromUsers";

Queryquery=session.createQuery(hql);

//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默认的Object数组了,而是List集合了

List<List>list=query.list();

for(Listuser:list){

Stringname=(String)user.get(0);

Stringpasswd=(String)user.get(1);

System.out.println(name+":"+passwd);

}

/**

输出结果为:

name1:password1

name2:password2

name3:password3

*/

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

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.List<Map>list=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.

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改为:Stringhql="selectnewset(name,passwd)fromUsers";

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

自定义类:

Java代码

1.packagecom.domain;

2.

3.publicclassMyUser{

4.

5.privateStringusername;

6.privateStringpassword;

7.//因为:Stringhql="selectnewcom.domain.MyUser(name,passwd)fromUsers";所以必须要有接受2个参数的构造函数

8.publicMyUser(Stringusername,Stringpassword){

9.this.username=username;

10.this.password=password;

11.}

12.

13.publicStringgetUsername(){

14.returnusername;

15.}

16.publicvoidsetUsername(Stringusername){

17.this.username=username;

18.}

19.publicStringgetPassword(){

20.returnpassword;

21.}

22.publicvoidsetPassword(Stringpassword){

23.this.password=password;

24.}

25.

26.

27.}

Java代码

1.//通过query.list()出来的list里存放的不再是默认的Object数组了,而是自定义的类MyUser,必须加包名,Stringhql="fromUsers";中的Users类也是必须加包名的,但是因为再Users.hbm.xml里<hibernate-mappingauto-import="true">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.List<MyUser>myUsers=query.list();

6.for(MyUsermyUser:myUsers){

7.Stringname=myUser.getUsername();

8.Stringpasswd=myUser.getPassword();

9.System.out.println(name+":"+passwd);

10.}

11./**

12.输出结果为:

13.name1:password1

14.name2:password2

15.name3:password3

16.*/

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.List<Users>list=query.list();

11.for(Usersusers:list){

12.System.out.println(users.getId());

13.}

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.List<Users>list=query.list();

11.for(Usersusers:list){

12.System.out.println(users.getId());

13.}

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.List<Users>list=query.list();

8.for(Usersusers:list){

9.System.out.println(users.getId());

10.}