如果用hibernate执行原生sql进行数据查询可以调用

SQLQuery query = getSession().createSQLQuery(sql);

然后再执行

query.list()

这样便可以将结果查询出来,查这样查询出来的结果。是由值数组组成的list。

可一般我们想要的结果应该是以字段名为key的map组成的list或者是表名对应的对象组成的list。

这两种结果均可通过hibernate提供的api来实现

对于第一种想要的结果:

可以通过重写AliasedTupleSubsetResultTransformer来实现,如果下面的代码

AliasedTupleSubsetResultTransformer f = new AliasedTupleSubsetResultTransformer() {
            
            @Override
            public boolean isTransformedValueATupleElement(String[] arg0, int arg1) {
             
                return false;
            }
            
            
            @Override//重写这个方法是关键
            public Object transformTuple(Object[] tuple/*值数组*/, String[] aliases/*字段数组*/) { 
                Map<String, Object> map = new HashMap<String, Object>();
                for(int i = 0; i < aliases.length; i ++){
                    
                    map.put(aliases[i].toLowerCase(), tuple[i]);
                     
                }
                return map;
            }
        };
         List<Map<String, Object>> resultList = query.setResultTransformer(f).list();

对于第二种想要的结果即转换成对应类的对象list,这种留给有心人去实现吧,

这种应该通过扩展SQLQuery.setResultSetMapping()去实现的。

相关文章:

  • 2021-10-16
  • 2021-11-18
  • 2021-08-31
  • 2022-01-19
  • 2022-01-01
  • 2021-11-06
  • 2021-08-05
  • 2022-12-23
猜你喜欢
  • 2021-12-16
  • 2021-09-15
  • 2022-12-23
  • 2021-06-10
  • 2021-10-31
  • 2021-08-28
  • 2022-01-01
相关资源
相似解决方案