实体过滤器EntityModule,用于拦截实体类的添删改操作,内置最常用的3个过滤器UserModule/TimeModule/IPModule 上一章末尾推荐的8个常用字段还记得吗?...当总行数在100万以内时,数字精确等于 select count(*) from table,大于100万时,将采用特有的快速方法。...Valid常常可用于判断主要字段的有效性,无效时强烈推荐抛出参数类异常,魔方NewLife.Cube表单将可以捕获并定位。...__.ClassID表示映射到该字段,在所有显示ClassID的地方用当前属性ClassName替代; 后面的类名和字段名,表示要关联的目标表和字段,在魔方Cube表单中将直接生成下拉选择; 扩展查询...建立表格字段和索引,名字以及数据类型规范,推荐字段(时间,用户,IP) 实体类详解。数据类业务类,泛型基类,接口 功能设置。连接字符串,调试开关,SQL日志,慢日志,参数化,执行超时。
在2015年7月16日,XCode新增了实体处理模块IEntityModule,用于拦截实体对象添删改操作。...如果想做假删除,就是在这里把删除标记字段改为true,然后entity.Update保存,接着返回false让外部不要继续执行Delete 在XCode内部,有三个最常用的接口实现:UserModule...、TimeModule、IPModule 它们的功能如下: 1,新增时CreateUserID使用当前登录用户(通过IManageProvider接口获取),新增修改时UpdateUserID使用当前登录用户...2,新增时CreateTime使用当前时间,新增修改时UpdateTime使用当前时间 3,新增时CreateIP使用当前访问地址(通过WebHelper.UserHost),新增修改时UpdateIP...一般在需要用到的实体类静态构造函数里面注册使用。
Rafy 框架又添新成员:幽灵插件。本文将解释该插件的场景、使用方法、原理。 场景 在开发各类数据库应用系统时,往往需要在删除数据时不是真正地删除数据,而只是把数据标识为‘已删除’状态。...在 DomainApp 中添加该插件: 为需要幽灵功能的实体打开该功能,需要在实体元数据配置中进行配置: 效果 所有继承自 Entity 的实体都会统一的添加一个 IsPhantom...这个属性表示这个实体是否为‘幽灵’,即已经删除的数据。 开发者可以使用 Meta.EnablePhantoms() 来为某个指定的实体类型开启‘幽灵’功能。...使用批量导入数据插件进行数据的批量导入时,批量删除的实体同样都会被标记为‘幽灵’状态。 运行程序后,数据库中的字段,已经自动添加上 IsPhantom 字段了: ?...在使用 GetAll 查询所有实体时,框架自动加上一 IsPhantom = false 的过滤条件: SELECT * FROM [User] WHERE [User].
2,危险的金字塔 三重门可以拆解成一个倒立的金字塔,这个倒立着的金字塔是危险的,总要一种摇摇欲坠的感觉,需要数据攻城狮们殚心竭虑的守护。...业务表和日志采集:动要有原则: 1,能添加值不要新增列,比如在json类型中加值,不要增加额外的列名。 2,能增加列不要新增一个表。 3,能加一个辅助表,不要重构原有表结构。...4,遵循添值,增列,副表的优先集,提前周知变化,早做应对。 3,动一下就是一万年 数据开发的工作流程是这样的。 接到一个数据需求, 第一步,我们要分析需求的合理性,能不能做。...其实在大数据量面前,生产数据的过程是漫长的,需要花费很多时间去等待。 第五步的测试极为重要 ,而且需要使用八倍镜,仔细推荐,认真核对。...比如:统计当日支付要看支付时间不要看下单时间应为下单可以在第二天支付。还有一个小小“=”号让统计意义南辕北辙。也一定要主要主要表的字段类型,不要望文生义,id不一定是数字。
由于XCode是充血模型,我们可以为这两个实体类做一个统一的基类来达到我的目的,但是这个统一的基类里面无法访问子类的字段,编码上很不方便。 这一次,我们用分部接口!...先来看看这两个实体类 image.png image.png 这两个实体类,就RentID和SaleID字段的不同,其它都一样,包括名字、类型、业务意义。...image.png 如上,根据不同的类型,创建实体操作者eop。我这里的类型是硬编码,也可以根据业务情况采用别的方式得到类型。 实体操作者eop表现了事务管理、创建实体entity的操作。...实体entity是IEntity类型,可以进行添删改等操作。这里为了实体接口的精简和独立,实体接口并没有继承IEntity,实际上实体类都继承了这两个接口。...所以,我们可以先转为IHouseImage接口,然后随意操作,当然你也可以在接口中增加各种方法。 好了,结束了!
本篇我们来试试XCode的基本功功力如何,测试在单表一千万业务数据的环境下查询的速度,添删改等没什么可测试的。...Entity层只负责生成获取满足条件的所有数据的SQL,加上分页参数后传递给下层数据访问层,自身不处理问题。...在这里不得不提的是,第一个方法使用了最新版本V5.0的新特性——弱类型访问。...业务主键还有经常查询的字段,根据情况建立非聚集索引。在千万数据下,没有索引的字段,基本上查不动。 建立索引时,特别注意包含字段include(不是组合索引)。...在SQLServer管理工具里面建立索引时,似乎无法添加include字段。可以先设置好索引,不要保存,点击生成脚本,然后复制到查询窗口,增加include后再执行。
为了方便,我们将使用SQLite数据库,因此不需要配置任何数据库连接,XCode检测到没有名为STOD的连接字符串时,将默认使用SQLite。...指定不存在的数据库和数据表时,XCode的反向工程将会自动建表建库,这是它独有的功能。...分表查询的用法与分表添删改一样: static void SearchByDate() { // 预先准备好各个库的连接字符串,动态增加,也可以在配置文件写好 var start = DateTime.Today...分表分库后,最容易犯下的错误,就是使用时忘了设置表名,在错误的表上查找数据,然后怎么也查不到…… 分表策略 根据这些年的经验: Oracle适合单表1000万~1亿行数据,要做分区 MySql适合单表1000...某项目使用XCode分表功能,已经过生产环境三年半考验,日均新增4000万~5000万数据量,2亿多次添删改,总数据量数百亿。
在之前的系列文章中,我们介绍了 DCache 及其 KV, K-K-Row 和 List 缓存模块的使用,本文将继续介绍如何使用 DCache 中的集合类型缓存模块 —— Set 和 ZSet 缓存模块...在前面的文章中,我们介绍过 key-value, k-k-row 和 list 两种类型缓存模块的使用方式,本文将继续介绍集合类型,set 和 zset 缓存模块的使用。...TestDemo 介绍如何创建和使用 Set/ZSet 缓存模块。...本文使用的示例可以在 GitHub 仓库 DCacheDemo(文末附链接) 中查看。 image.png 前面的文章我们已经介绍过缓存模块的创建,各类型缓存模块创建流程是相似的。...向集合添加值 接口 addSet 用于向特定集合添加值,定义如下 int addSet(const AddSetReq &req) 其中结构 AddSetReq 及其嵌套结构 AddSetKeyValue
Insert 生成标准Insert Into语句,根据设置决定是否使用参数化。(参数化设置) ?...Update 最精彩的部分,莫过于脏数据(后面将有专门文章介绍)。 在XCode中,修改数据的标准流程是,先查出来,修改属性后保存。此时生成的update set语句,只包含修改过的字段。 ?...Valid常常可用于判断主要字段的有效性,无效时强烈推荐抛出参数类异常,魔方NewLife.Cube表单将可以捕获并定位。...除此之外,Valid用得更多的功能是在Insert/Update之前修改完善字段数据,例如上面对密码进行MD5散列,以及格式化RoleIDs。...建立表格字段和索引,名字以及数据类型规范,推荐字段(时间,用户,IP) 实体类详解。数据类业务类,泛型基类,接口 功能设置。连接字符串,调试开关,SQL日志,慢日志,参数化,执行超时。
101 系列教程(一) Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse) 本节介绍数据在 Snuba 中的组织方式以及面向用户的数据如何映射到底层数据库(如:...实体和实体类型 Snuba 向客户端公开的逻辑数据模型的基本块(fundamental block)是实体。在逻辑模型中,实体表示抽象概念(如 transaction 或 error)的实例。...逻辑数据模型由一组 Entity Types 及其 relationships 组成。 每个 Entity Type 都有一个 schema,该模式由具有相关抽象数据类型的字段列表定义。...Entity Types 明确包含在 Dataset 中。一个 Entity Type 不能出现在多个数据集中。 实体类型之间的关系 数据集中的实体类型在逻辑上是相关的。...一个是用于摄取数据的主要 Errors Storage,另一个是read only view(只读视图),在查询时对 Clickhosue 的负载较少,但提供较低的一致性保证。
如何创建map? 给map添加元素 获取map中的元素 删除map中的元素 获取map的长度 Map是引用类型 Map的相等性 下面开始学习 1.什么是map?...map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。 ---- 2.如何创建map 通过向 make 函数传入键和值的类型,可以创建 map。...var personSalary map[string]int 可以创建,但是如果你想personSalary 添加值的时候,go 会抛出一个panic ,但是第一种方式就不会出现这种异常 你可以使用下面的方式验证一下...nil 方式1 不是nil ---- 3.给map添加值 声明的时候初始化 map package main import ( "fmt" ) func main() { personSalary...目前我们已经给 map 添加了几个元素,现在学习下如何获取它们。
给电影表和模型添加新字段 在本节中,您将使用Entity Framework Code First来实现模型类上的操作。从而使得这 些操作和变更,可以应用到数据库中。...默认情况下,就像您在之前的教程中所作的那样,使用 Entity Framework Code First自 动创建一个数据库,Code First为数据库所添加的表,将帮助您跟踪数据库是否和从它生 成的模型类是同步的...如果他们不是同步的,Entity Framework将抛出一个错误。这非 常方便的在开发时就可以发现错误,否则您可能会在运行时才发现这个问题。 (由一个晦涩的错误信息,才发现这个问题。)...你可能不希望这样的事情发生:在某些情况下,当您更改数据测试时,你希望你的变化后数据 库同步更新。在这种情况下,你想要做一个有条件的插入操作:只有当它不存在的时候,插入一行。...传递给 AddOrUpdate的方法的第一个参数, 指定的属性来使用以检查是否已存在某行。
使用MyBatis完成数据库的操作 1. MyBatis程序中sql语句的即时执行和预编译 我们在JDBC中在构造sql语句的时候,常常给字段的值用问号?代替,最后在使用方法对这些?...缺点: 它的执行不安全,存在sql注入. 在使用{}时,如果传入的参数是字符串类型的数据,还需要再构造sql的语句的时候使用单引号将传入的参数引住'{}'。...在使用#{}这种写法的时候,如果我们传递的参数是字符串类型的,我们不需要使用单引号(’ ')将#{}括起来,执行的时候,他会自动给value添加单引号。...标签:删除语句. 2.1 增加操作 添加操作在接口中声明方法的时候,定义的返回值类型是int,因为默认的返回值是受影响的行数,在XML文件实现add方法时,也不需要规定返回值类型。...因为在判断给字段是否传值时,使用标签将字段包裹起来了,但是字段和字段之间要使用,逗号隔开,所以我们还需要将逗号拼接上。
设置增量累加 在实体类静态构造函数中,可以设置需要增量累加的字段 ?...向 Meta.Factory.AdditionalFields 添加需要采用增量累加的字段,执行update时才生成 x=x+123 样子的语句。 测试代码: ?...并且,这段代码不管执行多少次,都是这样的累加效果,而不管实际值是多少。 累加原理 从数据库查出来一个对象时,如果发现有设置累加字段,XCode会把此时的数据“备份” 下来。...在执行update保存的时候,拿累加字段的最后值减去原始备份值,得到差值(可能是负数),生成 x=x+123 或 x=x-456 的语句。 不光整数,小数也可以设置累加字段。...Article.FindByID内部可以用对象缓存,然后每台应用服务器在10秒(默认缓存时间)内多线程查到的都是同一个entity对象。
本篇主要涉及以下内容: 使用最基本的注解映射一个实体类 使用注解映射属性 使用注解映射主键 其他特殊类型的属性映射 一、使用最基本的注解映射一个实体类 @Entity @Table(name = "userInfo...对于枚举类型的属性,我们可以使用@Enumerated注解进行修饰。 在某些特殊情况下,有时我们的实体类属性会被定义为枚举类型,那么对于这种数据库中并无法对应的Java类型,该如何映射呢?...总的来说,一旦hibernate发现实体类中有集合类型的属性需要映射,那么就会为集合属性单独映射出一张表,该表至少有两个字段,一个字段依赖于主表的id字段值,在新表中相同该字段值的记录共同组合成为实体类中的集合属性的值...2、组件属性映射 所谓的组件类型就是指我们自定义的类类型,在某些情况下,实体类中包含自定类型也是很常见的,那么对于我们自定义的类型该如何来映射到数据表呢?...组件类的每个属性都被映射到userinfo表中了。当我们通过实体类实例向数据表中插入数据的时候,hibernate会将组件类实例拆分出来的各个属性插入到对应的表字段。
数据标注方式比较简单,在类或字段上添加特性标注即可,对实体类型有一定的入侵。...注意:如果CLR中属性不能为null,则无论如何配置都将为必填。 也就是说,如果能为null,则默认都是可空字段,因此在配置时,只需要配置是否为必填即可。...原理大致是数据库中每行数据包含一个并发令牌字段,对改行数据的更新都会出发令牌的改变,在发生并行更新时,系统会判断令牌是否匹配,如果不匹配则认为数据已发生变更,此时会抛出异常,造成更新失败。...使用有参构造函数需要注意: 参数名应与属性的名字、类型相匹配 如果参数中不具有所有字段,则在调用构造函数完成后,对未包含字段进行赋值 使用懒加载时,构造函数需要能够被代理类访问到,因此需要构造函数为public...或protected 暂不支持在构造函数中使用导航属性 使用构造函数时,比较好玩的是支持依赖注入,我们可以在构造函数中注入DbContext、IEntityType、ILazyLoader、Action
(getter and setter method) 使用标准的JavaBean命名约定,同一时候把内部字段(field)隐藏起来(private visibility)。...假设映射的參数没有设置的话,Hibernate也将尝试去确定正确的类型转换和它的映射类型。 在某些情况下这个自己主动检測(在Java class上使用反射机制)不会产生你所期待或者 须要的缺省值。...值类型的集合 我们把一个值类型对象的集合添�Person。...,区别主要在element部分这次并没有包含对其他实体类型的引用,而是使用一个元素类型是 String的集合(这里使用小写的名字是向你表明它是一个Hibernate的映射类型或者类型转换器)。...,同一时候使用了2个字段。
,如何添加数据 通过本篇文章,你可以get到以下技能点 POJO对象如何与表关联 如何向DB中添加单条记录 如何批量向DB中添加记录 save 与 saveAndFlush的区别 <!...这个在POJO中怎么体现 一个表包含另一个表的主键时(主键关联,外键)等特殊的情况,POJO中有体现么?...插入时默认值支持方式 在创建表的时候,我们知道字段都有默认值,那么如果PO对象中某个成员我不传,可以插入成功么?会是默认的DB值么?...在JPA规范中,并不是所有的类型的属性都可以持久化的,下表列举了可映射为持久化的属性类型: 分类 类型 基本类型 byte、int、short、long、boolean、char、float、double...sql方式插入 指定id查询时的几种case 此外本文还留了几个坑没有填 POJO成员类型与表列类型更灵活的转换怎么玩?
领取专属 10元无门槛券
手把手带您无忧上云