二、MyBatis的常用基本知识

1、类型别名

  • 类型别名是为Java类型设置的一个短名字。它只和XML配置有关,用来减少类完全限定类名的冗余
  • 目的:设置别名可以不用在每个需要使用完全限定类名的位置使用一场串的冗余
  • 设置方法:

    • 方法一:

      <!-- mybatis-config.xml -->
      <typeAliases>
          <!-- alias: 别名-->
          <!-- type : 别名对应的完全限定类型 -->
          <typeAlias alias="User" type="yin.shop.model.User" />
          <typeAlias alias="alias="Blog" type="domain.blog.Blog"/>
          .....
          .....
          .....
      </typeAliases>
      
    • 方法二

      <!-- mybatis-config.xml -->
      <!-- 该方法MyBatis会在包名下自动搜索需要的JavaBean -->
      <!-- 默认情况下会使用Bean的首字母的非限定类名来做为它的别名 -->
      <typeAliases>
          <!-- name : 包名  -->
          <package name="yin.shop.model" />
      </typeAliases>
      
  • MyBatis已经内建的别名:
    别名 - - - - - - - - - - - - - - - - - - - - - - - - - 映射类型
    _byte - - - - - - - - - - - - - - - - – - - - - - - - byte
    _long - - - - - - - - - - - - - - - - - - - - - - - - long
    _short - - - - - - - - - - - - - - - - - - - - - - - - short
    _int - - - - - - - - - - - - - - - - - - - - - - - - - int
    _integer - - - - - - - - - - - - - - - - - - - - - - int
    _double - - - - - - - - - - - - - - - - - - - - - - double
    _float - - - - - - - - - - - - - - - - - - - - - - - - float
    _boolean - - - - - - - - - - - - - - - - - - - - - boolean
    string - - - - - - - - - - - - - - - - - - – - - - - String
    byte - - - - - - - - - - - - - - - - - - - - - - - - - Byte
    long - - - - - - - - - - - - - - - - - - - - - - - - - Long
    short - - - - - - - - - - - - - - - - - - - - - - - - - Short
    int - - - - - - - - - - - - - - - - - - - - - - - - - - - Integer
    integer - - - - - - - - - - - - - - - - - - - - - - - -Integer
    double - - - - - - - - - - - - - - - - - - - - - - - Double
    float - - - - - - - - - - - - - - - - - - - - - - - - - Float
    boolean - - - - - - - - – - - - - - - - - - - - - -Boolean
    date - - - - - - - - - - - - - - - - - - - - - - - - - Date
    decimal - - - - - - - - - - - - - - - - - - - - - - -BigDecimal
    bigDecimal - - - - - - - - - - - - - - - - - - - - - BigDecimal
    object - - - - - - - - - - - - - - - - - - - - - - - - Object
    map - - - - - - - - - - - - - - - - - - - - - - - - - Map
    hashmap - - - - - - - - - - - - - - - - - - - – - - HashMap
    list - - - - - - - - - - - - - - - - - - - - - - - - - - List
    arrayList - - - - - - - - - - - - - - - - - - - - - - - ArrayList
    collection - - - - - - - - - - - - - - - - - - - - - - Collection
    iterator - - - - - - - - - - - - - - - - - - - - - - - - Iterator

2、字符串替换:

  • MyBatis的两种字符串替换语法:
    • #{….} : 使用?进行替代
    • ${…} : 使用完整字符串完成替代
  • 默认情况下,使用#{…}格式的语法会导致MyBatis创建预处理语句属性并安全地设置值,但对于ORDER BY 这样的语句并不适用

3、Result Maps

  • ResultMap 元素是MyBatis中最强大最重要的元素
  • 常用与关联查询或者当数据库中的字段信息和对象属性不一致时的映射问题
  • 使用ResultMap解决字段信息与对象属性不一致:

    • 方法一:通过使用投影解决
      • SELECT *, post_code as 'postcode' .....
    • 方法二:使用外部的resultMap
      1、声明resultMap

      <!-- user.xml  -->
      ...
      <!-- id : resultMap的唯一标识  -->
      <!-- type : 完全限定类名或别名  -->
      <resultMap id="userMap" type="User" >
          <id property="id" column="id" />
          <result property="userName" column="username" />
          <result property="password" column="password" />
      </resultMap>

      2、在语句中使用:

      <!-- user.xml  -->
      <select id="load" resultMap="userMap" >
          .......     
      </select>
  • 解决关联查询的问题:

    • 方法一:在resultMap中使用 <association>
      1、声明resultMap

      <!-- user.xml  -->
      ....
      <resultMap id="userMap" type="User" autoMapping="true" >
          <id column="a_id" property="id" />
          <!-- 一个复杂的类型关联;许多结果将包成这种类型 -->
          <association property="user" javaType="User" />
              <result column="user_id" property="id" />
              <result column="username" property="userName" />
              ....
              ....
          </association>
      </resultMap>

      2、使用

      <!-- user.xml  -->
      <select id="load" parameterType="int" resultMap="userMap" >
          SELECT *, ti_id as a_id, t1.user_id, t2.id as 'user_id"
          FROM t_address t1
          LEFT JOIN t_user t2
          ON t1.user_id = t2.id
          WHERE t1.id=#{id}
      </select>   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值