id 和 result 元素都将一个列的值映射到一个简单数据类型(String, int, double, Date 等)的属性或字段。...两个元素都有一些属性: 属性 描述 property 映射到列结果的字段或属性。如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用。否则 MyBatis 将会寻找给定名称的字段。...属性 描述 property 映射到列结果的字段或属性。如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用。否则 MyBatis 将会寻找给定名称的字段。...,并没有深度、广度或组合上的要求。...这是为了即使鉴别器的 case 之间都能分为完全独立的一组,尽管和父结果映射可能没有什么关系。
id 和 result 元素都将一个列的值映射到一个简单数据类型(String, int, double, Date 等)的属性或字段。...但有些情况下你想使用不可变类。 一般来说,很少改变或基本不变的包含引用或数据的表,很适合使用不可变类。 构造方法注入允许你在初始化时为类设置属性的值,而不用暴露出公有方法。...,并没有深度、广度或组合上的要求。...鉴别器(discriminator)元素就是被设计来应对这种情况的,另外也能处理其它情况,例如类的继承层次结构。 鉴别器的概念很好理解——它很像 Java 语言中的 switch 语句。...这是为了即使鉴别器的 case 之间都能分为完全独立的一组,尽管和父结果映射可能没有什么关系。
id 和 result 元素都将一个列的值映射到一个简单数据类型(String, int, double, Date 等)的属性或字段。...两个元素都有一些属性: 属性 描述 property 映射到列结果的字段或属性。如果 JavaBean 有这个名字的属性(property),会先使用该属性。...属性 描述 property 映射到列结果的字段或属性。如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用。否则 MyBatis 将会寻找给定名称的字段。...,并没有深度、广度或组合上的要求。...这是为了即使鉴别器的 case 之间都能分为完全独立的一组,尽管和父结果映射可能没有什么关系。
前面的两篇文章中,我们介绍了两张表之间的各种相互关联映射关系,但往往我们也会遇到两张表甚至多张表之间共有着多个相同的字段。...--指定鉴别器列的名称和类型--> type" type="java.lang.String"/> 的表名,鉴别器就是用来区分当前记录时student或是teacher的一个标记,它会在新表中生成一个字段,而该字段的名称和类型都在此处进行指定。...下面我们通过插入数据来看看具体生成的表的结构: 很明显,我们的person表只起到一个模板的效果并没有什么实际的价值,而我们students表和teachers表的id,name字段都是从person表中继承得到的...student和teacher表的主键作为外键关联父表的主键。
11.4.7 鉴别器(结果集) -《SSM深入解析与项目实战》 项目中所有的源码都可以在此链接的仓库中找到:https://github.com/chenhaoxiang/uifuture-ssm 文章目录...11.4.7 鉴别器 使用鉴别器查询出Vehicle 11.4.7 鉴别器 MyBatis中的鉴别器,简单的可以理解为Java中的switch语句。...有时候一个单独的数据库查询可能返回很多不同数据类型的结果集(有些关联),鉴别器元素在MyBatis中就是被设计来处理这种情况的,还包括类的继承层次结构。鉴别器在实际项目中使用的不多,简单的介绍一下。...例如,有一个交通工具类Vehicle,另外还有子类,汽车Car和船Boat。Car和Boat分别继承了Vehicle类。在Vehicle中有一个type字段,用来区分交通工具类型。...根据type字段,在MyBatis中实现,将查询的Vehicle数据自动封装成不同的类型对象(Car或者Boat)。XML映射文件代码如代码清单11-40所示。
result – 注入到字段或 JavaBean 属性的普通结果 association – 一个复杂类型的关联;许多结果将包装成这种类型 嵌套结果映射 – 关联可以指定为一个 resultMap...(字符串,整型,双精度浮点数,日期等)的属性或字段。...Id 和 Result 的属性 属性 描述 property 映射到列结果的字段或属性。如果用来匹配的 JavaBeans 存在给定名字的属性,那么它将会被使用。...association的属性描述 属性 描述 property 映射到列结果的字段或属性。如果用来匹配的 JavaBeans 存在给定名字的属性,那么它将会被使用。...如果没有任何 一个实例相匹配,那么 MyBatis 仅仅使用鉴别器块外定义的结果映射。
typeAlias里面type属性指向我们的用户实体类,alias属性用于定义它的替代名字。 ...他是一个对应SQL与实体类字段的配置。 在这里,我们配置了一个字段——>resultMap。 ...result 子节点:用于标识一些简单属性,其中 column 属性表示从数据库中查询的字段名或别名, property 属性则表示查询出来的字段对应的值赋给实体对象的哪个属性。...子节点说明: constructor - 用于注入结果到构造方法中 id – 标识ID列 result – 表示一般列 association – 关联查询 collection – 查询集合 discriminator...- 鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为 column属性是数据库的字段名,property是实体类的字段名,jdbcType是数据库字段类型
1. association 查询结果的一对一关联: type="Blog"> <id property=”blog_id” column="id...(一): 有时一个单独的数据库查询也许返回很多不同(但是希望有些关联)数据类型的结果集。...鉴别器元素就是被设计来处理这个情况的,还有包括类的继承层次结构。鉴别器非常容易理 解,因为它的表现很像 Java 语言中的 switch 语句。 ...定义鉴别器指定了 column 和 javaType 属性。列是 MyBatis 查找比较值的地方。 JavaType 是需要被用来保证等价测试的合适类型(尽管字符串在很多情形下都会有用)。...根据时间表(比如 no Flush Interval,没有刷新间隔),缓存不会以任何时间顺序来刷新。 缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
字段 index 索引 sequence 序列 对应于数据库中的sequence unique 唯一的 nullable 可为空的 insertable 可插入的 updatable 可更新的...foreign key 外键/外关键字 foreign key column 外键列 association 关联 association column 关联列 join column 连接列...logical mapping 逻辑映射 physical mapping 物理映射 identity 标识(符) 能唯一标识一个对象的字段/列,对应到数据库一般为主键 Identifier 标识符...Versioning for optimistic locking 乐观锁定版本控制 transient 瞬态/瞬时的 这个词建议和具体的词组一起出现,单独出现似乎没有什么特别的意义 fetch...fetching 延时关联获取 projection 投影 ordinal 顺序的 portable application 可移植的应用 Class-defined 已定义类 Table
一、鉴别器(Discrimator) 类似tdengine里面超级表概念, 他可以在一张表里面存储一个或者多个个性化字段,查询自动变成条件,并且插入更新都会自赋值进行存储 Discrimator ="Type...:1"//字段名字可以随便取 Discrimator ="Type:1,Name:a" //可以多个字段,不要有空格等 用例 [SugarTable("Animal",IsDisabledDelete...,包括Type分类字段 查询和插入 var cat = new Cat { Name = "Whiskers", Color = "Gray" }; db.Insertable(cat).ExecuteCommand...();//实体类中没有Type字段会自插入特性对应的Type=2 var catList=db.Queryable().ToList();//自动加上条件Type=1 var dogList...= db.Queryable().ToList();//自动加上条件Type=2 更新操作 直接更新就行了Type会忽略更新 鉴别器导航 在导航应用也可以用使,他的优势就是实体中不需要这个字段
在所有情况下,对于给定行要实例化的最终类由基类上定义的鉴别器列或 SQL 表达式确定,该列将生成与特定子类关联的标量值。...注意 目前,整个继承层次结构只能配置一个鉴别器列或 SQL 表达式,通常在层次结构中最基本的类上。暂时不支持“级联”多态鉴别器表达式。...在层次结构中查询特定子类将呈现为针对基表的 SELECT 查询,其中将包括一个 WHERE 子句,该子句限制行为具有鉴别器列或表达式中存在的特定值或值的行。...在所有情况下,给定行的最终实例化类由基类上定义的鉴别器列或 SQL 表达式确定,该列将产生与特定子类关联的标量值。...注意 目前,整个继承层次结构仅可以配置一个鉴别器列或 SQL 表达式,通常在层次结构中最基本的类上。目前不支持“级联”多态鉴别器表达式。
作为面向对象的语言, Java 中的的对象是根据类定义创建的。 类之间的引用关系可以认为是嵌套的关系。...两个基础类 在阅读本文之前, 最好能对这两个类有相应的理解。...1.1、列映射类ResultMapping ResultMapping 对象记录了结果集中一列与队友JavaBean中一个属性的对应关系。 ?...具有唯一性 // 获取 ID , 默认值会拼装所有父节点的 id 或 value 或 property。...但是, 这里有一个奇怪的地方, 我源代码版本(3.5.0-SNAPSHOT)的 的属性, 只有 type, 没有 ofType/resultType/javaType。
遍历ResultSet对象并将每行数据暂存到HashMap实例中,以结果集的字段名或字段别名为键,以字段值为值 3. 根据ResultMap标签的type属性通过反射实例化领域模型 4....属性说明 id属性 ,resultMap标签的标识。 type属性 ,返回值的全限定类名,或类型别名。...动态映射关系信息 通过 discriminator子元素 (鉴别器)可以实现动态映射关系信息的设置。...id元素,result元素,idArg元素,arg元素,discriminator元素的共同属性 javaType属性 :Java类的全限定名,或别名 jdbcType属性 :JDBC类型, JDBC...类型为CUD操作时列可能为空时进行处理 typeHandler属性 :指定类型处理器的全限定类名或类型别名 column属性 :指定SQL查询结果的字段名或字段别名。
期望类型的类的完全限定名或别名,注意如果是集合,应该是集合可以包含的类型而不是集合本身的类型。...-- 使用association定义关联的单个对象的封装规则;--> type="com.atguigu.mybatis.bean.Employee" id="MyDifEmp2...-- association定义关联对象的封装规则 select:表明当前属性是调用select指定的方法查出的结果 column:指定将哪一列的值传给这个方法...--嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则 --> type="com.atguigu.mybatis.bean.Department...-- 鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为
主要的缺点整个类层次中的所有属性都挤在一张大表里,如果有很多子类特有的属性,数据库中就会有太多字段的取值为null,这为当前基于行的数据库(使用基于列的DBMS的数据仓库处理这个会更好些)的SQL调优增加了难度...; 优点包括数据表比较紧凑(没有不需要的可空字段),数据跨三个子类的表进行分区,容易使用超类的表与其他表进行关联。...因为不能跨超类和子类的字段来建立复合索引,如果需要按这些列进行查询,性能会受影响。任何子类数据的修改都涉及两张表:超类的表和子类的表。...“每个类层次一张表”对有高并发、简单查询并且没有共享列的OLTP系统来说是个不错的选择。如果你想用数据库的引用完整性来做关联,那它也是个合适的选择。...“每个具体类一张表”对有高并发、复杂查询并且没有共享列的OLTP系统来说是个不错的选择。当然你不得不牺牲超类与其他类之间的关联。
SQLException; } ResultSetHandler只有一个实现类DefaultResultSetHandler,其核心字段如下 private final Executor executor...-- 鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为...中获取该属性的Java类实例 type = metaObject.getSetterType(propertyName); } try { //如果该java类实例为一个集合类型...) { //返回type是否是Collection接口的实现类或子接口 return Collection.class.isAssignableFrom(type); } @Override public...> type) { //实现类 Class<?
type:表示其对应的pojo类型,可以使用别名,也可以使用全限定类名 autoMapping:如果设置这个属性,MyBatis 将会为这个 ResultMap开启或者关闭自动映射。...^^ 接下来看下它可以有哪些子节点: constructor - 用于注入结果到构造方法中 id – 标识ID列 result – 表示一般列 association – 关联查询 collection...– 查询集合 discriminator - 鉴别器:mybatis可以使用discriminator判断某列的值,然后根据某列的值改变封装行为 constructor 在查询数据库得到数据后,会把对应列的值赋值给...javabean 对象对应的属性,默认情况下 mybatis 会调用实体类的无参构造方法创建一个实体类,然后再给各个属性赋值,如果没有构造方法的时候,可以使用 constructor 节点进行绑定,如现有如下的构造方法...discriminator 鉴别器,mybatis可以使用 discriminator判断某列的值,然后根据某列的值改变封装行为,有点像 Java的 switch 语句,鉴别器指定了 column 和
但有些情况下你想使用不可变类。 通常来说,很少或基本不变的、包含引用或查询数 据的表,很适合使用不可变类。 构造方法注入允许你在初始化时 为类设置属性的值,而不用暴露出公有方法。...---- discriminator鉴别器 有时一个单独的数据库查询也许返回很多不同 (但是希望有些关联) 数据类型的结果集。 鉴别器元素就是被设计来处理这个情况的, 还有包括类的继承层次结构。...如果没有传入“sname”,那么只会查询sid相匹配的记录;反之若传入了“sname”,那么就会增多一个“sname”字段的匹配条件(细心的读者可能会发现,“title”参数值是可以包含一些掩码或通配符的...而且,若语句的开头为“AND”或“OR”,where 元素也会将它们去除。 如果 where 元素没有按正常套路出牌,我们可以通过自定义 trim 元素来定制 where 元素的功能。...当某个列存在null值的话,我们使用数据库的内置函数进行求和、统计之类的操作时,可能会刚好操作的记录的同一个字段都是null,那么返回的结果集就会是null。
数据标注方式比较简单,在类或字段上添加特性标注即可,对实体类型有一定的入侵。...,显然无论在Blog或Tag中定义外键都不合适,此时就需要一张关系表来进行关联,这张表就是BlogTag表。...继承 关于继承关系如何在数据库中呈现,目前有三种常见的模式: TPH(table-per-hierarchy):一张表存放基类和子类的所有列,使用discriminator列区分类型,目前EF Core...仅支持该模式 TPT(table-per-type ):基类和子类不在同一个表中,子类对应的表中仅包含基类表的主键和基类扩展的字段,目前EF Core不支持该模式 TPC(table-per-concrete-type..."Discriminator") .HasMaxLength(200); EF Core允许我们通过FluentAPI的方式自定义鉴别器的列名和每个类对应的值: modelBuilder.Entity
")] public InheritanceMappingAttribute(); // 摘要: // 获取或设置映射的继承层次结构中的鉴别器代码值...public object Code { get; set; } // // 摘要: // 获取或设置一个值,该值指示当鉴别器值与指定值不匹配时是否实例化此类型的对象...public bool IsDefault { get; set; } // // 摘要: // 获取或设置层次结构中类的类型。...没有默认值。 public Type Type { get; set; } } 通过type指定子类。 实体继承的使用 定义好继承的实体之后,我们就可以使用了。...,设置了Category属性使用BoardCategory字段和分类表关联。
领取专属 10元无门槛券
手把手带您无忧上云