select返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。当提供的返回类型属性是resultType的时候,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,因为Map不能很好表示领域模型,我们就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
当Java接口与XML文件在一个相对路径下时,可以不在myBatis配置文件的mappers中声明:
-
- <mappers>
- <mapper resource="com/mucfc/model/CustomerMapper.xml" />
- <mapper resource="com/mucfc/model/TicketMapper.xml" />
- </mappers>
SQL 映射XML 文件一些初级的元素:
- 1. cache – 配置给定模式的缓存
- 2. cache-ref – 从别的模式中引用一个缓存
- 3. resultMap – 这是最复杂而却强大的一个元素了,它描述如何从结果集中加载对象
- 4. sql – 一个可以被其他语句复用的SQL 块
- 5. insert – 映射INSERT 语句
- 6. update – 映射UPDATE 语句
- 7. delete – 映射DELEETE 语句
- 8. select - 映射SELECT语句
resultMap 是MyBatis 中最重要最强大的元素了。你可以让你比使用JDBC 调用结果集省掉90%的代码,也可以让你做许多JDBC 不支持的事。现实上,要写一个等同类似于交互的映射这样的复杂语句,可能要上千行的代码。ResultMaps 的目的,就是这样简单的语句而不需要多余的结果映射,更多复杂的语句,除了只要一些绝对必须的语句描述关系以外,再也不需要其它的。
resultMap属性:type为java实体类;id为此resultMap的标识。
resultMap可以设置的映射:
- 1. constructor – 用来将结果反射给一个实例化好的类的构造器
- a) idArg – ID 参数;将结果集标记为ID,以方便全局调用
- b) arg –反射到构造器的通常结果
- 2. id – ID 结果,将结果集标记为ID,以方便全局调用
- 3. result – 反射到JavaBean 属性的普通结果
- 4. association – 复杂类型的结合;多个结果合成的类型
- a) nested result mappings – 几resultMap 自身嵌套关联,也可以引用到一个其它上
- 5. collection –复杂类型集合a collection of complex types
- 6. nested result mappings – resultMap 的集合,也可以引用到一个其它上
- 7. discriminator – 使用一个结果值以决定使用哪个resultMap
- a) case – 基本一些值的结果映射的case 情形
- i. nested result mappings –一个case 情形本身就是一个结果映射,因此也可以包括一些相同的元素,也可以引用一个外部resultMap。