Mybaties的简单使用(全当做复习了)

Posted cb1186512739

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybaties的简单使用(全当做复习了)相关的知识,希望对你有一定的参考价值。


在使用mybaties的时候,最容易忘掉的是他的动态SQL,不过网上有关这方面的文章很多.

在动态SQl中最常见的几种SQL的语法就是:

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach

关于这几种用法我这里不多描述了.

resultType:一般是封装一个javabean对象
 <!-- 
        指定 resultType 返回值类型时 String 类型的,
        string 在这里是一个别名,代表的是 java.lang.String 

        对于引用数据类型,都是将大写字母转小写,比如 HashMap 对应的别名是 ‘hashmap‘
        基本数据类型考虑到重复的问题,会在其前面加上 ‘_‘,比如 byte 对应的别名是 ‘_byte‘
    -->
    <select id="getEmpNameById" resultType="string">
        select username from t_employee where id = #id
    </select>
 
 <!-- 
        通过 resultType 指定查询的结果是 Employee 类型的数据  
        只需要指定 resultType 的类型,MyBatis 会自动将查询的结果映射成 JavaBean 中的属性
    -->
    <select id="getEmpById" resultType="employee">
        select * from t_employee where id = #id
    </select>
返回List集合
Mapper映射接口:  

// 假如是全表查询数据,将查询的数据封装成 Employee 类型的集合
    List<Employee> getAllEmps();
---------------------------------------------------------------------------

 <!-- 
        通过 resultType 指定查询的结果是 Employee 类型的数据  
        只需要指定 resultType 的类型,MyBatis 会自动将查询的结果映射成 JavaBean 中的属性
    -->
    <select id="getEmpById" resultType="employee">
        select * from t_employee where id = #id
    </select>
返回Map集合
  //  根据 id 查询信息,并把结果信息封装成 Map 
    Map<String, Object> getEmpAsMapById(Integer id);
--------------------------------------------------------------------------------
  <!-- 
        注意这里的 resultType 返回值类型是 ‘map‘
     -->
    <select id="getEmpAsMapById" resultType="map">
        select * from t_employee where id = #id
    </select>

如果查询出来的是多条数据,我们可以把数据以表中的一个字段名用来类形容,类似这种(key,javabean)这种形式来封装Map

 // 查询所有员工的信息,把数据库中的 ‘id‘ 字段作为 key,对应的 value 封装成 Employee 对象
    // @MapKey 中的值表示用数据库中的哪个字段名作 key
    @MapKey("id")
    Map<Integer, Employee> getAllEmpsAsMap();
------------------------------------------------------------------------------
 <!--
        注意 resultType 返回值类型,不再是 ‘map‘,而是 Map 的 value 对应的 JavaBean 类型
    -->
    <select id="getAllEmpsAsMap" resultType="employee">
        select * from t_employee
    </select>

  

 




resultMap:一般是自己封装成相应的数据对象(根据不同的业务需求来进行划分):resultMap的功能性极强,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中。
<!--column不做限制,可以为任意表的字段,而property须为type 定义的pojo属性-->
<resultMap id="唯一的标识" type="映射的pojo对象">
  <id column="表的主键字段,或者可以为查询语句中的别名字段" jdbcType="字段类型" property="映射pojo对象的主键属性" />
  <result column="表的一个字段(可以为任意表的一个字段)" jdbcType="字段类型" property="映射到pojo对象的一个属性(须为type定义的pojo对象中的一个属性)"/>
  <association property="pojo的一个对象属性" javaType="pojo关联的pojo对象">
    <id column="关联pojo对象对应表的主键字段" jdbcType="字段类型" property="关联pojo对象的主席属性"/>
    <result  column="任意表的字段" jdbcType="字段类型" property="关联pojo对象的属性"/>
  </association>
  <!-- 集合中的property须为oftype定义的pojo对象的属性-->
  <collection property="pojo的集合属性" ofType="集合中的pojo对象">
    <id column="集合中pojo对象对应的表的主键字段" jdbcType="字段类型" property="集合中pojo对象的主键属性" />
    <result column="可以为任意表的字段" jdbcType="字段类型" property="集合中的pojo对象的属性" />  
  </collection>
</resultMap>

  举个列子:

方式一:

<resultMap id="BasePlusResultMap" type="com.meikai.shop.entity.TShopSku">
    <id column="ID" jdbcType="BIGINT" property="id" />
    <result column="SKU_NAME" jdbcType="VARCHAR" property="skuName" />
    <result column="CATEGORY_ID" jdbcType="BIGINT" property="categoryId" />
    <collection property="attributes" ofType="com.meikai.shop.entity.TShopAttribute" > 
        <id column="AttributeID" jdbcType="BIGINT" property="id" />
        <result column="attribute_NAME" jdbcType="VARCHAR" property="attributeName" />
    </collection>
</resultMap>

------------------------------------------------------------------------------------------
<select id="getById"  resultMap="basePlusResultMap">
    select s.ID,s.SKU_NAME,s.CATEGORY_ID,a.ID,a.ATTRIBUTE_NAME
    from t_shop_sku s,t_shop_attribute a 
    where s.ID =a.SKU_ID and s.ID = #id,jdbcType =BIGINT;
</select>

 方式二(mybatie中 collection 的嵌套查询):

<resultMap id="BasePlusResultMap" type="com.meikai.shop.entity.TShopSku">
    <id column="ID" jdbcType="BIGINT" property="id" />
    <result column="SKU_NAME" jdbcType="VARCHAR" property="skuName" />
    <result column="CATEGORY_ID" jdbcType="BIGINT" property="categoryId" />
    <collection column="skuId=ID" property="attributes" ofType="com.meikai.shop.entity.TShopAttribute" select="getAttribute" > 
    </collection>
</resultMap>
--------------------------------------------------------------------------
<select id="getAttribute"  resultMap="AttributeResultMap">
    select a.ID,s.ATTRIBUTE_NAME
    from t_shop_attribute a
    where  a.ID = #skuId,jdbcType =BIGINT;
</select>

-------------------------------------------------------------------------
属性结果集映射:

<resultMap id="AttributeResultMap" type="com.meikai.shop.entity.TShopAttribute">
    <id column="ID" jdbcType="BIGINT" property="id" />
    <result column="ATTRIBUTE_NAME" jdbcType="VARCHAR" property="attributeName" />
</resultMap>

 

 
 

以上是关于Mybaties的简单使用(全当做复习了)的主要内容,如果未能解决你的问题,请参考以下文章

Java面试题集

使用redis做mybaties的二级缓存-Mybatis 二级缓存小心使用

mybaties数据源配置类型(POOLEDJNDIUNPOOLED)

mybaties批量修改报错

Android 使用VideoView实现简单视频播放

noip专题复习之数学——概率与数学期望