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();
        }
    }


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

相关文章推荐

hibernate 视图显示,查询,myeclipse

1、 数据库建立视图 2、通过myeclipse的hibernate 反向工程,生成PO两个对象,和DAO 其中PO对象用注解生成,摒弃冗长的XML配置 2.1 po对象1:V...

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

1.首先我们要明确,hibernate4与之前的版本的开发没有本质区别,但是对于开发者来说,hibernate4利用的是最底层的开发方法,没有再继承hibernateDaoSupport。 2.hi...

关于自定义View思考与实践1

自定义view可继承自View,也可以继承自View的一些子类,如TextView、EditView等,编写一个自定义View,首先需要实现构造方法:XXX(Context context)是必须的,...

Android 自定义View之柱状图实践

快过年了,首先先给大家说声新年快乐!倘若你有了计划,便不会在道路上迷惘。遵从本心,毫不懈怠。新的一年,新的气象,2016年3月份,我和几个朋友写的猿计划App就要上线了,它来了并且告诉你:开发,不只是...

View的自由拖动(属性动画的实践之一)

View的自由移动

WPF新手实践3:MVVM Light Toolkit(三、ViewModel和View)

三、ViewModel和View 接下来,我准备用一个最简单的Login登录界面来试用MVVM Light Toolkit 框架的ViewModel。1、在合并好的项目的ViewModel目录中添加新...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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