Mapper
本篇文档用图部分来自:java思维导图
cache-ref – 其他命名空间缓存配置的引用。
parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除,这里不会记录。
insert – 映射插入语句
delete – 映射删除语句
mapper文件与mapper 接口的配置说明(重点:)
针对Configuration中不同mapper映射器,这里的名称空间定义不同:
元素说明
mapper namespace="vallue " 这里是mapper的元素/mapper
第一部分insert update delete
主键生成策略
第二部分select
第三部分sql 与字符串拼接
Sql
!-- 自定义条件查询用户列表 --
sql id="sometable"
${prefix}Table
/sql
sql id="someinclude"
from
include refid="${include_target}"/
/sql
select id="select" resultType="map"
select
field1, field2, field3
include refid="someinclude"
property name="prefix" value="Some"/
property name="include_target" value="sometable"/
/include
/select
字符串拼接替换#{}和${}
!-- 自定义条件查询用户列表 --
select id=*"findUserByUsername"* parameterType=*"java.lang.String"*
resultType=*"cn.itcast.mybatis.po.User"*
select * from user where username like '%${value}%'
/select
#{}和${}的区别
#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称
${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。
第四部分resultMap
ResultMap的子元素
- 嵌套结果映射 – 一个 case 也是一个映射它本身的结果,因此可以包含很多相 同的元素,或者它可以参照一个外部的 resultMap。
idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能
id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能
association – 一个复杂类型的关联;许多结果将包装成这种类型
collection – 一个复杂类型的集合
discriminator – 使用结果值来决定使用哪个 resultMap
嵌套结果映射 – 一个 case 也是一个映射它本身的结果,因此可以包含很多相 同的元素,或者它可以参照一个外部的 resultMap。
id&result/constructor
resultMap的解决问题:
**1) **po类字段与数据表中的列名不一致
**2) **一对一关系
**3) **一对多关系
**4) **多对多
**5) **根据条件封装不同结果
一对一association
一对多collection
鉴别器discriminator
resultMap id="vehicleResult" type="Vehicle"
id property="id" column="id" /
result property="vin" column="vin"/
result property="year" column="year"/
result property="make" column="make"/
result property="model" column="model"/
result property="color" column="color"/
discriminator javaType="int" column="vehicle_type"
case value="1" resultType="carResult"
result property="doorCount" column="door_count" /
/case
case value="2" resultType="truckResult"
result property="boxSize" column="box_size" /
result property="extendedCab" column="extended_cab" /
/case
case value="3" resultType="vanResult"
result property="powerSlidingDoor" column="power_sliding_door" /
/case
case value="4" resultType="suvResult"
result property="allWheelDrive" column="all_wheel_drive" /
/case
/discriminator
/resultMap
文章如有错误,请您一定指出,感谢之至!
如果你有不同的见解,欢迎留言,或者加我QQ986320270
图片可能来源于网络,如有侵权请告知。
最后:关注一下呗
长按二维码识别关注