Hibernate4对View的查询实践

原创 2017年01月03日 16:57:08

最初我们使用Hibernate的方法一般都比较初级,或是直接写SQL语句,然后让Hibernate去直接执行查询,然后返回Object[]结果。这样做完全没有利用到Hibernate的特性,只是单纯的让Hibernate去执行JDBC的功能。

后来我们引入ORM,还算是用到了一点Hibernate的功能,使单表查询具有了一定的封装性。但是在对于返回类型与数据库字段不一致,或是多表查询时,我们一般是取出直接映射到表的Entity实体,然后自己在Service层封装返回对象,不仅编码非常不方便,而且增大了服务器的负担。

后来我们选择使用视图来进行数据库的多表查询,这样虽然增大了一些数据库的开销,但是我们的代码开发变得容易了许多,也增强了代码的易读性。

后来我们发现在大型项目中,DAO层出现了大量的HQL/SQL语句,这就造成了修改困难和代码易读性下降的缺点。我们开始引入Criteria——Hibernate标准化查询。这样既增强了代码的易读性,又较好的保证了Hibernate的良好封装性。

但是在使用视图查询时,由于视图是没有主键的,而Hibernate的ORM要求映射对象必须要有主键。所以Hibernate使用了一个办法来实现这个功能,就是引入了@EmbeddedId这一联合主键的方式来表示我们的视图对象,并将它封装在一个“ViewName+Id”的实体对象中,在它的外层才是我们查询时所用到的视图名。

然而一般视图都是直接提供给前端的返回对象,如果外面套一层Id,实在是不方便,于是我们只好写一个类来帮助我们进行封装。做一个妥协,由于没有循环创建对象,这种方法基本不影响服务器效率


    public void getViewPageResult(Page<T> page,Class clazz){
        List<T> list = page.getResult(); //获取Page的视图返回结果(内嵌联合主键Id的)
        List<T2> listAfter = new ArrayList<T2>(0); //真正要返回给前端的结果
        T2 resultTemp = null;
        try {
            Method method = clazz.getMethod("getId", null); //取出Hibernate返回的视图对象中的Id字段
            for (T temp : list) {
                resultTemp = (T2) method.invoke(temp);
                listAfter.add(resultTemp); //取出并放到最终要返回的结果类型中
            }
            page.setResult(listAfter);
        } catch (Exception e){
            e.printStackTrace();
        }
    }


版权声明:本文为博主原创文章,未经博主允许不得转载。

hibernate4框架的增删查改(包含hql)数据等功能方法

本次程序测试的是hibernate4框架的增加、修改、删除、查询等方法,每种功能都集合了几种简单的方法来进行测试,程序猿可按需获取; hibernate框架搭建之后,使用它的流程基本是:获取confi...
  • alan_liuyue
  • alan_liuyue
  • 2016年11月29日 09:10
  • 3830

Hibernate中使用HQL进行查询操作

注意:HQL语言,是基于对象进行查询的,不是基于数据库的表。 1、基本的HQL查询 1.1 使用HQL查询的一般步骤 public void test01() { Session sessio...
  • zbw18297786698
  • zbw18297786698
  • 2016年07月22日 15:27
  • 11916

解决Hibernate查找视图有一个空值的时候返回的对象为null的问题

Hibernate在查找视图时,返回的List不为空,且List.isEmpty()也为false,但List里面都为空对象,这是因为在视图中有NULL值,myEclipse自动生成的配置文件中,视图...
  • u012833063
  • u012833063
  • 2014年01月06日 17:16
  • 2437

hibernate4对sql语句的一些基本操作

1.首先我们要明确,hibernate4与之前的版本的开发没有本质区别,但是对于开发者来说,hibernate4利用的是最底层的开发方法,没有再继承hibernateDaoSupport。 2.hi...
  • HBL6016
  • HBL6016
  • 2015年11月23日 00:59
  • 220

[VMware Horizon] VMware Horizon View 5.2 实践教程 (英文版)

  • 2013年09月27日 11:00
  • 7.24MB
  • 下载

VMware Horizon View 虚拟桌面最佳实践

  • 2016年01月17日 22:16
  • 3.71MB
  • 下载

Android自定义View实践--圆盘温度计

  • 2016年07月30日 20:24
  • 261KB
  • 下载

UE4对模型制作镜子的思考

UE4制作镜子的效果,首先要用到一个组件(Scene Capture 2D)感觉就是一个摄像机,为了使镜面看到对面的物体必然要使用RenderTarget渲染到纹理进行显示。最后在材质中对Render...
  • weiyuxinyuan
  • weiyuxinyuan
  • 2017年12月12日 18:58
  • 50

Eclipse使用jUnit4对MapReduce程序进行单元测试

Eclipse使用jUnit4对MapReduce程序进行单元测试在项目下创建test目录,存放所有的单元测试代码技巧:test目录下的包结构尽量和src下的包结构一致,便于代码的维护和可读性将tes...
  • liuyuan_jq
  • liuyuan_jq
  • 2016年04月26日 12:28
  • 283

利用junit4对springMVC所有层进行测试

参考文章链接:http://blog.csdn.net/ma_shuqiang/article/details/46683389 ,里面有比较详细的Spring测试常用注解 最近在sprin...
  • m0_38031760
  • m0_38031760
  • 2017年03月29日 09:07
  • 2238
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Hibernate4对View的查询实践
举报原因:
原因补充:

(最多只允许输入30个字)