工作多年调用视图到多次,自己写代码使用视图还是头一回,也觉得新鲜,那就开始呗, 数据库系统是Oracle
1 我用的数据库连接客户端是Navicat ,首先创建视图,其实视图就是调用表的操作,提取自己需要的数据放到视图下面,相对于java来说,可以把视图看成是特殊的表对待,这里说的特殊指的是 通过hql语句调用访问数据库的时候涉及到关联表的问题. 创建视图如下:
然后通过myeclipse的 hiberange reverse engineering 生成pojo和hbm.xml文件. 生成后发现生成了两个pojo和一个hbm.xml文件,如下:
然后在代码中使用的时候部分代码如下:
if (idNumberStr.equals("")){
StringBuffer wherePart = new StringBuffer();
List<Object> parmaters = new ArrayList<Object>();
wherePart.append(" id.hrid = ? ");
parmaters.add(uniquedId);
wherePart.append(" and id.datetime >=? ");
parmaters.add(_startDate);
wherePart.append(" and id.datetime <=? ");
parmaters.add(_endDate);
cdaList = this.cdaDao.queryObjectsByWhere(
VICdaSummary.class, wherePart.toString(), parmaters.toArray(),
null, startRow, rowCount);
为什么代码中要使用 id.hrid ,id.datetime 等等,而不是直接使用hrid,datetime呢,查的也是VICdaSummary这个视图啊, 原因是(hql语句的视图查询)使用的是联合主键查询,sql语句的视图查询不需要使用id.hrid等, 和查询表一样, 在 VICdaSummary.java 类中引用了 VICdaSummaryId.java类 ,且作为主键 ,参见下图:
在参加下图:
在视图中我们应该保证视图中的每个字段都不为空(null ) ,因此我做了如下处理:
将可能为空的字段赋值为 empty ,字符串类型的 .
下面附上sql语句的视图查询部分代码:
上图中并没有使用 id.HRID 是吧. ok 搞定.
补充:视图的执行是在,java调用该视图的时候触发该视图执行设计视图的语句 ,然后从结果集中拿回java传递的语句所查询的内容. 让部分操作交给数据库系统执行,尤其在涉及到多表操作时候,及其有用.