您的位置:首页 > 其它

HQL语句--select(选择)

2016-09-01 12:51 211 查看
以Object[]类型返回选择的属性:

如果在select子句中只是指定了选择的对象和属性,没有指定返回的数据类型,默认查询结果以对象数组Object[]形式返回。

eg:

@Test
public void testSelectClauseObjectArray(){ //通过select子句指定返回Object[]类型查询结果
//注:不能只指定一个属性,因为返回类型就不是对象数组,而是对象,要将Object[]改为Object
String hql="select s.name,s.tel,s.address,s.star from Seller s"; //通过别名来引用持久化类的属性。

Query query =session.createQuery(hql);

List<Object[]> list=query.list(); //返回结果是对象数组

for (Object[] objects : list) {
System.out.println("name:"+objects[0]); //在对象数组中的位置与选择属性顺序一致
System.out.println("tel:"+objects[1]);
System.out.println("address:"+objects[2]);
System.out.println("star:"+objects[3]);
}
}


控制台:



:当只查询持久化类的一个属性时,返回的结果就是对象Object,而不是对象数组Object[],那么更改如下:

@Test
public void testSelectClauseObjectArray(){ //通过select子句指定返回Object[]类型查询结果
//注:只指定一个属性时,返回类型就不是对象数组,而是对象,要将Object[]改为Object
String hql="select s.name from Seller s"; //通过别名来引用持久化类的属性。

Query query =session.createQuery(hql);

List<Object> list=query.list(); //返回结果是对象

for (Object objects : list) {
System.out.println("name:"+objects); //在对象中的位置与选择属性顺序一致
}
}


控制台:



以Lisi集合形式返回查询的结果

在select子句中使用new list来指定返回查询结果

eg:

@Test
public void testSelectClauseList(){ //通过select子句指定返回数据类型是List集合
//通过new list来指定返回的数据类型是List集合形式
String hql="select new list(s.name,s.tel,s.address) from Seller s";

Query query=session.createQuery(hql);

List<List> lists=query.list() ;//查询结果是List集合形式

for (List list : lists) {
System.out.println("name:"+list.get(0)); //索引信息就是在select子句中相应位置信息
System.out.println("tel:"+list.get(1));
System.out.println("address:"+list.get(2));
}
}


控制台:



通过Map返回查询结果

在select子句中使用new map指定查询结果的返回数据类型。在获取值时,map中的key值是属性在select子句中相应的索引值,它的类型是字符串类型。

map集合获得结果,除了通过序号获得属性信息,还可通过别名获取。

eg:

@Test
public void testSelectClauseMap(){ //通过select子句指定返回数据类型是map形式
//通过new map来指定返回数据类型是map类型
String hql="select new map(s.name as name,s.tel as tel,s.address as address) from Seller s";
Query query=session.createQuery(hql);

List<Map> maps=query.list(); //结果是map形式

for (Map map : maps) {
//key值就是属性在select子句中相应的位置信息,key值是字符串类型
//map集合获得结果,除了通过序号获得属性信息,还可通过别名获取
System.out.println("name:"+map.get("0"));
System.out.println("tel:"+map.get("1"));
System.out.println("address:"+map.get("2"));
//          System.out.println("name:"+map.get("name"));
//          System.out.println("tel:"+map.get("tel"));
//          System.out.println("address:"+map.get("address"));
}
}


控制台:



通过自定义类型返回查询结果

在持久化类中定义相应的构造器,构造器的参数就是我们要选择返回的属性信息。然后在select子句中调用定义的构造器。

在Seller.java持久化类中增加构造器:

//定义一个构造器,参数是选择返回的属性信息
public Seller(String name,String tel,String address){
this.name=name;
this.tel=tel;
this.address=address;
}


测试类SellerTest:

@Test
public void testSelectClauseSelf(){ //select子句以自定义类型返回查询结果
//使用自定义类型来设置返回的数据类型
String hql="select new Seller(s.name,s.tel,s.address) from Seller s";
Query query=session.createQuery(hql);

List<Seller> sellers=query.list(); //查询结果是Seller持久化类型
for (Seller seller : sellers) {
System.out.println("name:"+seller.getName());
System.out.println("tel:"+seller.getTel());
System.out.println("address:"+seller.getAddress());
}
}


控制台:



持久化类无参构造方法的重要性

当我们指定了构造器,hibernate框架就会调用我们选择的构造器;而未指定构造器时,hibernate就是调用默认构造器。

distinct关键字:去除查询结果中的重复元素

eg:select distinct sex from Customer c

@Test
public void testDistinct(){ //测试distinct关键字
String hql="select distinct c.sex from Customer c";
Query query=session.createQuery(hql);
List<Object> list=query.list(); //返回结果是对象

for (Object object : list) {
System.out.println(object);
}
}


控制台(结果无重复元素):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hql select