zoukankan      html  css  js  c++  java
  • 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>
     
     
  • 相关阅读:
    leetcode------Clone Graph
    leetcode------Anagrams
    leetcode------Simplify Path
    leetcode------Number of Islands
    leetcode------3Sum Closest
    leetcode------4Sum
    leetcode------3Sum
    leetcode------Binary Tree Right Side View
    leetcode------Word Break
    leetcode------House Robber
  • 原文地址:https://www.cnblogs.com/cb1186512739/p/11335223.html
Copyright © 2011-2022 走看看