mybatis多参数传递到Mapper.xml中

MyBatis多参数传递的四种方式

第一种方案:一个一个参数传递

DAO层的函数方法

User  selectUser(String name,String area);

对应的Mapper.xml

<select id="selectUser" resultMap="BaseResultMap">
        SELECT
            *
        FROM
            user_user_t
        WHERE
            user_name = #{0} and
            user_area = #{1}
    select>

其中,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。

第二种方案:采用Map传多参数

Dao层的函数方法

User  selectUser(Map paramMap);

对应的Mapper.xml

    <select id=" selectUser" resultMap="BaseResultMap">
        SELECT
            *
        FROM
            user_user_t
        WHERE
            user_name = #{userName,jdbcType=VARCHAR} 
        AND user_area = #{userArea,jdbcType=VARCHAR}
    select>

Service层调用

    private User xxxSelectUser(){
        Map paramMap=new hashMap();
        paramMap.put(“userName”,”对应具体的参数值”);
        paramMap.put(“userArea”,”对应具体的参数值”);

        User user=xxx. selectUser(paramMap);
    }

个人认为此方法不够直观,见到接口方法不能直接的知道要传的参数是什么。

第三种方案:直接传递对象

Dao层的函数方法

int insert(WaterEle record);

对应的Mapper.xml


    <insert id="insert" parameterType="com.jsptpd.gayg.modules.cloud.model.WaterEle">
    insert into t_enterprise_water_ele (WATER_ELE_ID, ENTERPRISE_ID, ENTERPRISE_NAME, 
      YEARMONTH, WATER_SIZE, WATER_AMOUNT, 
      ELE_SIZE, ELE_AMOUNT, STATUS, 
      OPERATOR, OPERATE_TIME)
    values (#{waterEleId,jdbcType=VARCHAR}, #{enterpriseId,jdbcType=VARCHAR}, #{enterpriseName,jdbcType=VARCHAR},
      #{yearmonth,jdbcType=VARCHAR}, #{waterSize,jdbcType=DECIMAL}, #{waterAmount,jdbcType=VARCHAR}, 
      #{eleSize,jdbcType=DOUBLE}, #{eleAmount,jdbcType=VARCHAR}, #{status,jdbcType=INTEGER}, 
      #{operator,jdbcType=VARCHAR}, #{operateTime,jdbcType=TIMESTAMP})
  insert>

Service层调用

    @RequestMapping(value = "", method = RequestMethod.POST)
    public ResponseObj<Boolean> insert(@RequestBody WaterEle waterEle) {

        //先查询是否有这条数据,没有进行插入操作
        WaterEle enterpriseBase1 = waterEleMapper.selectByPrimaryKey(waterEle.getWaterEleId());
        if (enterpriseBase1 == null) {

            waterEle.setWaterEleId(CommonUtil.getSysRef());
            waterEle.setEnterpriseId(CommonUtil.getSysRef());
            waterEle.setStatus(SysData.STATUS_NORMAL);
            waterEle.setOperateTime(DateUtil.getDateTime());

            int i = waterEleMapper.insertSelective(waterEle);
            if (i == 1)
                return new ResponseObj<Boolean>(true, RetCode.SUCCESS);
            return new ResponseObj<>(false, RetCode.FAIL);
        }
        return new ResponseObj<>(false, RetCode.FAIL);

    }

第四种方案:使用@Param标注

Dao层的函数方法

User selectUser(@Param(“userName”)String name,@Param(“userArea”)String area);

对应的Mapper.xml

    <select id=" selectUser" resultMap="BaseResultMap">
        SELECT
            *
        FROM
            user_user_t
        WHERE
            user_name = #{userName,jdbcType=VARCHAR} 
        AND user_area = #{userArea,jdbcType=VARCHAR}
    select>

个人觉得这种方法比较好,能让开发者看到dao层方法就知道该传什么样的参数,比较直观,个人推荐用此种方案。

你可能感兴趣的:(java,Web,mybatis)