hisql 高级功能数据检测将错误数据拦截在系统外 一
git clone https://github.com/tansar/HiSql.git
在设计第二范式数据库时经常会把可能重复的数据单独做一种表关联,但是在写入表时为了数据的严谨需要校验一下值在另外一张表中存不存在
如 用一张用户表(HTest01
) 该表表结构如下
其中字段UTYP
的值在另外一张表H_UType
中做了维护表结构如下
为了演示使用我们向H_UType
中写入三条数据如下所示
//在表中添加用户类型 Modi方法的意思是 如果存在则更新没有则插入
sqlClient.Modi("H_UType", new List<object> {
new { UTYP = "U1", UTypeName = "普通用户" },
new { UTYP = "U2", UTypeName = "中级用户" },
new { UTYP = "U3", UTypeName = "高级用户" }
}).ExecCommand();
正常我们向表HTest01
写入数据时字段UTYP
的值必须要存在于表H_UType
中 不然这条数据就是一条不符合逻辑的数据,也可以认为这是条脏数据,在写代码时如果没有做一些校验就有可有把这种数据成功保存到数据库中
HiSql
作者在日常开发过种也经常碰到这种问题,特别是在多业务场景多人团队开发时尤为明显有些开发考虑的全一点就做了校验有些就忽略了,带来系统的Bug的隐患 ,那有没有一种方式可以杜绝这种基本的逻辑错误呢?
Hisql
提供了这个功能,使用过HiSql
的用户肯定知道 在初化始了HiSql
后会产生四张标准表如下所示
Hi_TabModel
Hi_FieldModel
Hi_Domain
Hi_DataElement
但这里不重点把每张表的作用一一介绍,我们需要实现本篇讲的数据检测只需要修改一下配置表Hi_FieldModel
代码如下
sqlClient.Update("Hi_FieldModel", new { TabName = "HTest01", FieldName = "UTYP", IsRefTab=true,RefTab= "H_UType",RefField="UTYP", RefFields = "UTYP,UTypeName",RefFieldDesc= "类型编码,类型名称",RefWhere="UTYP<>''" }).ExecCommand();
执行以上更新代码就是将表HTest01
的字段UTYP
配置了向该表插入数据时 字段UTYP
的值必须要是在表H_UType
中的字段UTYP
中,那么在向表HTest01
写入数据时HiSql
底层将会自动进行校验
可能大家会担心是不是每条数据都会查表校验会不会有性能问题,其实不用担心 HiSql
对这些已经做了特殊处理基本上不用担心如果大家感兴趣可以查看一下HiSql
的源码
那么我们就试一试向表HTest01
插入数据测试一下看
sqlClient.Insert("HTest01", new { SID = "0", UTYP = "U4", UName = "hisql", Age = 36, Salary = 11, Descript = "hisql" }).ExecCommand();
执行以上代码会出现什么情况呢? 是的会抛出异常如下所示
这是HiSql
底层检测完后抛出的异常,以上代码插入的字段UTYP
值U4
不在刚才配置的表H_UType
中,所以这是一种不符合正常业务逻辑的非法数据
修改一下代码
sqlClient.Insert("HTest01", new { SID = "0", UTYP = "U3", UName = "hisql", Age = 36, Salary = 11, Descript = "hisql" }).ExecCommand();
这样就可以正常执行了可以通过HiSql
校验
最新文章
- 【前端攻略】最全面的水平垂直居中方案与flexbox布局
- Nodejs&#183;进程
- sphinx索引文件进一步说明——最好是结合lucene一起看,直觉告诉我二者本质无异
- MySql命令的基本操作
- jQuery获取鼠标事件源(万能)
- Katana 还是Owin ? 本地自承载
- Android UI 学习 自定义的布局 平滑移动 VelocityTracker()
- win8安装tfs2010提示未启用iis6.0未启用兼容模式需要静态内容组件
- 004-谈一谈lock和synchronized
- 在eclipse中API的封装和调用
- 在windows系统之中查看目前已安装的更新
- apache 负载测试工具 ab
- 自学Python3.6-算法 二分查找算法
- piggy.lnk 简析
- NS3 实验脚本的编写步骤
- TPO-21 C1 Find a building for orientation
- Awk基础
- 3.3V与5V电平双向转换
- 不同浏览器下word-wrap,word-break,white-space强制换行和不换行总结
- MVC FileDownLoad
热门文章
- Dubbo消费者异步调用Future使用
- awk统计命令(求和、求平均、求最大值、求最小值)
- shell脚本下载网页图片
- 如何为Dash/Zeal生成c++ 文档: 以abseil文档为例
- Mysql配置文件 基本设置
- N1BOOK——[第五章 CTF之RE章]wp
- Kafka从入门到放弃(三) —— 详说生产者
- LuoguP7043 「MCOI-03」村国 题解
- response.setHeader(";xxx";,";大侠";)如果赋值中文,那么将不会在页面出值,
- js Uncaught TypeError: undefined is not a function