Hibernate解决实体类不方便的方案

2017-02-14 17:51

前言

众所周知,Java的面向对象的机制太过强,而大家在做数据库查询时几乎都是清一色的使用实体类的List接收查询结果集,但是如果使用原生语句进行查询的时候,在使用别名、联表或者其中有聚合函数时会出一些问题,可能就再需要写实体类,再手动关联临时表。

举个栗子

比如说我要查询表中class_name列每个元素出现次数,我就需要写

SELECT `class_name`, COUNT(*) FROM `table_name` GROUP BY `class_name`

这时候出来的是临时表,如果再写一个实体类进行关联的话会有点不合时宜

解决方案

平时在查询的时候连贯操作中有一个关联实体类的操作

List<ClassName> listObj = ......(addEntity(ClassName.class)).list()

如果去掉那个关联操作的话可以直接用List的对象数组来接收了

List<Object[]> listObj = .......list()

在使用的话,因为刚刚上面那个栗子中查询出来的临时表只有两列,那就对应的是集合中对象数字的第0个元素和第1个元素

遍历输出

for(int i=0; i<listObj.size(); i++){
    //listObj.get(i)[0]表示临时表中第i行的class_name
    //listObj.get(i)[1]表示临时表中第i行的统计数
    System.out.println(listObj.get(i)[0] + ' : ' +listObj.get(i)[1]);
}

其中还有坑

如果数据库字段用的是char类型,用List