深入浅出MyBatis技术原理和实战(四)

映射器

  • 映射器是mybatis中最强大的部分,也是我们使用得最多的部分。mybatis是针对映射器构造的sql构建的轻量级框架,并且通过配置生成对应的javabean返回给调用者。所谓的配置即映射器
  • select元素
    select 是我们使用最多也是最强大的SQL。id:和Mapper的命名空间组合起来唯一,提供给Mybatis调用
    parameterType:类的全命名或者别名,可以选择javabean、map
    parameterMap:即将废弃的元素,不做讨论
    resultType:类的全路径,结果集通过javabean的规范映射,或者定义为int double float等参数。也可以用别名,不能和resultMap同时使用
    resultMap:映射集的引用,最复杂的元素,可以配置映射规则、级联、typeHandler等
    flushCache:它作用在调用SQL后,是否清空mybatis之前查询的本地缓存和二级缓存,默认为false
    useCache: 启动二级缓存开关,要求mybatis将此次结果缓存,默认true
    timeout:设置超时参数,超时抛出异常,单位秒
 <select id="countFirstName" parameterType="string" resultType="int">
    select count(*) as total from t_user where name like concat(#{firstName},'%')
   </select>

自动映射,在settings元素中配置autoMappingBehavior属性来设置策略
NONE:取消自动映射
PARTIAL:只会自动映射,没有定义嵌套结果集映射的结果集
FULL,会自动映射任意复杂的结果集
默认PARTIAL,使用FULL是嵌套映射,在性能上会下降
POJO开启驼峰命名规则在mapUnderscoreToCamelCase为true(settings要写在properties标签后面,typeAliases前面,否则会报错)

  • 传递多个参数Map 映射器里面参数类型为 parameterType=”map”简单易用但是业务关联性不强可读性下降。mybatis提供注解参数的形式
  • 还可以使用注解的方式 @Param 来传参数。映射器里面无需写入传参类型public List<Role> findRoleByAnnotation(@Param("roleName") String roleName,@Param("note")String note);如果参数过多,可读性依旧不高,参数将复杂
  • 使用javabean传参,通过getter,setter方法设置参数。
    使用resultMap映射结果集
    resultMap是映射器里面最复杂的元素
    配置resultMap id,type定义哪个javabean
    通过id元素定义主键

  • insert元素
    mybatis执行之后会返回一个整数,以表示进行操作后插入的记录数
    主键回填和自定义。
    keyProperty属性指定哪个是主键字段
    useGeneratedKeys指定mybatis这个主键是否使用数据库内置策略生成

    如果我们取消了mysql的自增主键这种方式将会失效
    解决方案
    使用我们自己的规则生成主键

<insert id="insertRoleOutKeyUser" parameterType="role" useGeneratedKeys="true" keyProperty="id">
        <selectKey keyProperty="id" resultType="long" order="BEFORE">
            select if(max(id) is null,1,max(id)+1) as newId from t_role
        </selectKey>
        insert into t_role(id,role_name,note)
        values (#{id},#{roleName},#{note})
    </insert>
  • update和delete元素
    执行后返回一个整数表示影响记录条数
  • sql元素
    定义一段sql,其他sql语句引用他以减少工作量
<sql id="role_columns">
        id,role_name,note
    </sql>
    select <include refid="role_columns"/> from t_role
  • 级联
    mybatis中级联分为三种,association、collection和discriminator
    association:一对一。如中国公民和身份证号码属于一对一
    collection:一对多。 班级和学生属于一对多。
    discriminator:鉴别器。根据实际选择采用哪个类作为实例。允许特定条件去关联不同的结果集。

    1. association

    2. 3.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值