第一部分:什么视图?
视图也就是view,是一个虚拟的表,拥有和数据库表一样的操作方式,其中只是提取你想要的数据显示,数据是当前相关数据表中的最新数据,视图是数据库的一个对象,数据库只存储视图的定义,不存储视图中的数据(视图中的数据来自其他库表),比如
用户表,tb_user,有字段id,身份证号,姓名,地址,联系电话,
表中数据:
其中地址和和身份证号和电话是很敏感的,假设有一个需求,
只需要用户名和电话(假设是这样),
方式一:直接查询tb_user表的完整信息,然后在在业务代码中将其他数据屏蔽掉
方式二:sql 中只选出用户名和电话这两个字段
方式三:建立视图,user_view,其中包含 (id,name,phone)这三个字段(建立使徒的方式很简单,用navicat,操作如下)
步骤1,新建查询:select id,name,phone from tb_user;
步骤2,选中视图(图中是连接的sqlserver,这个不影响),新建视图,选择定义(当然也可以选择视图创建工具,但是 多表查询时好像不太好使,可能出不了数据(我比较菜,就选择定义了)),将步骤1中的那句能出数 据的 sql 粘贴到定义 下面的那个大框中
点击预览,可以看到这个视图的数据
选择保存,命名为user_view
现在对视图进行查询,select * from user_view;
第二部分:视图优缺点?
参考链接(该链接还包含事物,存储过程,函数,索引等见解,很厉害,本文涉及到的部分已摘下)
优点:
1>.视图的优点
A.数据安全性。对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上。
B.查询简单化。
为复杂的查询建立一个视图,用户不必输入复杂的查询语句,只需针对此视图做简单的查询即可。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。
C.逻辑数据独立性。
视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。
对于视图的操作,例如,查询只依赖于视图的定义,当构成视图的基本表需要修改时,只需要修改视图定义中的子查询部分,而基于视图的查询不用改变。
2>视图的缺点
A.性能。
SQL Server必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,SQL Server也把它变成一个复杂的结合体,需要花费一定的时间。
B.修改限制。
当用户试图修改视图的某些行时,SQL Server必须把它转化为对基本表的某些行的修改。事实上,当从视图中插入或者删除时,情况也是这样。对于简单视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的,这些视图有如下特征:
a.有UNIQUE等集合操作符的视图。
b.有GROUP BY子句的视图。
c.有诸如AVG\SUM\MAX等聚合函数的视图。
d.使用DISTINCT关键字的视图。
e.连接表的视图(其中有些例外)
(3).创建视图的限制:
在创建视图时,还要注意试图必须满足以下几点限制:
<1>.不能将规则或者DEFAULT定义关联于视图。
<2>.定义视图的查询中不能含有ORDER BY\COMPURER\COMPUTER BY 子句和INTO关键字
<3>.如果视图中某一列是一个算术表达式、构造函数或者常数,而且视图中两个或者更多的不同列拥有一个相同的名字(这种情况通常是因为在视图的定义中有一个连接,而且这两个或者多个来自不同表的列拥有相同的名字),此时,用户需要为视图的每一列指定列的名称
那么如何来在hibernate中给视图映射实体类,就像数据库表那样,其实就是那样
第三部分:hiberbnate中给视图建立实体映射步骤
第一步:建立视图
这里省略了,看到这儿的估计都会
第二步:建立试图对应的实体类
这里省略了,看到这儿的估计都会
第三步:用注解或者配置文件建立映射关系
这里省略了,看到这儿的估计都会
第四步:就可以对视图向实体表一样增删改查
这里省略了,看到这儿的估计都会
如果忘了,给一个参考链接传送门,额,这是配置文件的,差不多,