zoukankan      html  css  js  c++  java
  • MyBatis中传入参数parameterType类型详解

    前言

    Mybatis的Mapper文件中的select、insert、update、delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型。本文主要给大家介绍了关于MyBatis传入参数parameterType类型的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

    1. MyBatis的传入参数parameterType类型分两种

       1. 1. 基本数据类型:int,string,long,Date;

       1. 2. 复杂数据类型:类和Map

    2. 如何获取参数中的值:

       2.1  基本数据类型:#{参数} 获取参数中的值

       2.2  复杂数据类型:#{属性名}  ,map中则是#{key}

    3.案例:

     3.1 基本数据类型案例

    <sql id="Base_Column_List" > 
     id, car_dept_name, car_maker_name, icon,car_maker_py,hot_type 
     </sql> 
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" > 
     select 
     <include refid="Base_Column_List" /> 
     from common_car_make 
     where id = #{id,jdbcType=BIGINT} 
     </select> 

     3.2 复杂类型--map类型    

    <select id="queryCarMakerList" resultMap="BaseResultMap" parameterType="java.util.Map"> 
      select 
      <include refid="Base_Column_List" /> 
      from common_car_make cm 
      where 1=1 
      <if test="id != null"> 
       and cm.id = #{id,jdbcType=DECIMAL} 
      </if> 
      <if test="carDeptName != null"> 
       and cm.car_dept_name = #{carDeptName,jdbcType=VARCHAR} 
      </if> 
      <if test="carMakerName != null"> 
       and cm.car_maker_name = #{carMakerName,jdbcType=VARCHAR} 
      </if> 
      <if test="hotType != null" > 
       and cm.hot_type = #{hotType,jdbcType=BIGINT} 
      </if> 
      ORDER BY cm.id 
     </select> 

      3.3 复杂类型--类类型

    <update id="updateByPrimaryKeySelective" parameterType="com.epeit.api.model.CommonCarMake" > 
     update common_car_make 
     <set > 
      <if test="carDeptName != null" > 
      car_dept_name = #{carDeptName,jdbcType=VARCHAR}, 
      </if> 
      <if test="carMakerName != null" > 
      car_maker_name = #{carMakerName,jdbcType=VARCHAR}, 
      </if> 
      <if test="icon != null" > 
      icon = #{icon,jdbcType=VARCHAR}, 
      </if> 
      <if test="carMakerPy != null" > 
       car_maker_py = #{carMakerPy,jdbcType=VARCHAR}, 
      </if> 
      <if test="hotType != null" > 
       hot_type = #{hotType,jdbcType=BIGINT}, 
      </if> 
     </set> 
     where id = #{id,jdbcType=BIGINT} 
     </update> 

     3.4 复杂类型--map中包含数组的情况

    <select id="selectProOrderByOrderId" resultType="com.epeit.api.model.ProOrder" parameterType="java.util.HashMap" > 
      select sum(pro_order_num) proOrderNum,product_id productId,promotion_id promotionId 
      from pro_order 
      where 1=1 
      <if test="orderIds != null"> 
       and 
       <foreach collection="orderIds" item="item" open="order_id IN(" separator="," close=")"> 
        #{item,jdbcType=BIGINT} 
       </foreach> 
      </if> 
      GROUP BY product_id,promotion_id 
     </select> 

    4.注解@Param:这个比较特殊,但是很好理解

    案例一:

    @Param(value="startdate") String startDate :注解单一属性;这个类似于将参数重命名了一次

    如调用mybatis的*mapper.xml中配置sql语句(DAO层)

    List<String> selectIdBySortTime(@Param(value="startdate")String startDate); 

    则xml中的语句,需要配合@param括号中的内容:参数为startdate

    <select id="selectIdBySortTime" resultType="java.lang.String" parameterType="java.lang.String"> 
     select distinct ajlcid from ebd_fh_ajlc where sorttime >= to_date(#{startdate,jdbcType=VARCHAR},'YYYY-MM-DD') and created_date=updated_date 
     and keyvalue in (select distinct companyname from ebd_fh_company_list where isupdate='0') 
     </select> 

    案例二:

    注解javaBean,@Param(value="dateVo") DateVo dateVo;则需要注意编写的参数

    List<String> selectIds(@Param(value="dateVo")DateVo dateVo); 

    对应的mapping文件

    <select id="selectIds" resultType="java.lang.String" parameterType="com.api.entity.DateVo"> 
     select distinct ajlcid from ebd_fh_ajlc where sorttime >= to_date(#  {dateVo.startDate,jdbcType=VARCHAR},'YYYY-MM-DD') and created_date=updated_date 
     and keyvalue in (select distinct companyname from ebd_fh_company_list where isupdate='0') 
     </select> 

    至于要说优缺点的话,看个人喜好

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

        </div>
  • 相关阅读:
    【今日CV 视觉论文速览】 19 Nov 2018
    【numpy求和】numpy.sum()求和
    【今日CV 视觉论文速览】16 Nov 2018
    【今日CV 视觉论文速览】15 Nov 2018
    poj 2454 Jersey Politics 随机化
    poj 3318 Matrix Multiplication 随机化算法
    hdu 3400 Line belt 三分法
    poj 3301 Texas Trip 三分法
    poj 2976 Dropping tests 0/1分数规划
    poj 3440 Coin Toss 概率问题
  • 原文地址:https://www.cnblogs.com/jpfss/p/10442430.html
Copyright © 2011-2022 走看看