Mybatis单个参数的if判断(针对异常:There is no getter for property..)

我们都知道mybatis在进行参数判断的时候,直接可以用<if test=""></if> 就可以了,如下:

1、常规代码

<update id="update" parameterType="com.cq2022.zago.order.entity.Test" >
    update t_test_l
    <set >
      <if test="trnsctWayId != null" >
        trnsct_way_id = #{trnsctWayId,jdbcType=TINYINT},
      </if>
      <if test="langId != null" >
        lang_id = #{langId,jdbcType=INTEGER},
      </if>
    </set>
    where trnsct_way_l_id = #{trnsctWayLId,jdbcType=INTEGER}
  </update>

但是单个参数和多参数的判断有个不同点,当我们的入参为entity实体,或者map的时候,使用if 参数判断没任何问题。

但是当我们的入参为java.lang.Integer  或者 java.lang.String的时候,这时候就需要注意一些事情了

具体代码如下(咱们看着代码说,先展示错误代码):

2、错误代码

<select id="getTrnsctListByLangId" parameterType="java.lang.Integer" resultType="java.lang.Integer">
  	select
  	 trnsct_id
  	from  t_trnsct_way_l where
  	<if test="langId != null" >
       and lang_id = #{langId}
    </if>
  </select>

上述代码存在一些问题,首先入参是java.lang.Integer, 而不是map或者实体的入参方式,对于这类单个入参然后用if判断的,mybatis有自己的内置对象,

如果你在if判断里面 写的是你的入参的对象名,那就报异常:Internal error : nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘langId‘ in ‘class java.lang.Integer‘

3、正确代码:

这里就涉及到mybatis的内置对象_parameter,单个参数判断的时候,就不像1、 2那样直接用参数对象名判断了。还有就是数据类型最好加上

时间: 2024-10-11 08:52:35

Mybatis单个参数的if判断(针对异常:There is no getter for property..)的相关文章

Mybatis单个参数的if判断(针对异常:There is no getter for property..)------mybatis的内置对象

这里有一个删除方法: int deleteByPrimaryKey(Integer id); 然后对应的sql的xml如下: <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" > delete from tablename where id = #{id,jdbcType=INTEGER} </delete> 以上是单个参数一般的写法. 但是如果我下面的同样也是

mybatis 异常 There is no getter for property named &#39;bizId&#39; in &#39;class java.lang.Long&#39;

mybatis 异常 There is no getter for property named 'bizId' in 'class java.lang.Long' 当使用mybatis进行传参的时候,参数只有一个时会出现这种类似的错误. 解决: 1.接口定义出,指定参数名 2.在xml 中指定类型 mybatis 异常 There is no getter for property named 'bizId' in 'class java.lang.Long'

Mybatis 传入List类型参数,报错:There is no getter for property named &#39;__frch_item_0&#39; in

错误如下: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_item_0' in 'class com.asiacloud.core.model.PageModel' at org.mybatis.spring.MyBatisEx

使用内部枚举类作为外部类的参数的Mybatis的参数该如何判断

新写了一个接口,期望根据不同的参数来给数据库中不同的字段进行传值.这里使用了内部静态枚举类的方式进行传值,在写mybatis动态sql时,如果是普通对象,一般使用,那么使用枚举类,如何判断枚举类的值呢? Mapper接口 public class SLineSboxesQueryParam { private QueryMethod queryMethod;//查询方式的枚举内部类 private List<String> idList; private LocalDateTime start

There is no getter for property named &#39;user&#39; in &#39;class com.jyr.wh.domain.User&#39; 异常

今天在使用mybatis时,出现了一个问题:There is no getter for property named 'user' in 'class com.jyr.wh.domain.User,现记录下来 使用注解的形式写sql语名,参数为一个对象 以下为正确写法: @Insert( "INSERT INTO t_user(openId,nickName,gender,language,city,province,country," + "avatarUrl,union

mybatis 的参数处理

1.接口中传递参数不同数量时的情况处理: a.单个参数的情况: mybatis不会做特殊处理,可以使用 #{参数名/任意名}:取出参数值.(可以看到上面的输出结果没有任何问题.) b.多个参数的情况: 如果按照上面的方式指定,即如下图所示,会出异常.(这样截图太多,不写地太过详细) 注:可以看到,异常报错提示中,只能够以索引值或者 param1,param2,... 的方式来指定. c.命名参数的形式指定:在指定的方法中添加 @Param("指定参数名") 注解即可.(可以看到下面的输

mybatis 单一参数时的动态语句

多参数时,可以传对象或封装成map public void getBookList(String publisher,String author){ Map<String,Object> maps = new HashMap<String, Object>(); maps.put("publisher", publisher); maps.put("author", author); this.getListByEntity("ge

【MyBatis】解析MyBatis传入参数的问题

一.单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean"> select t.* from tableName t where t.id= #{id} </select> 其中方法名和ID一致,

Mybatis多参数查询映射

最近在做一个Mybatis的项目,由于是接触不久,虽然看了一下资料,但在实际开发中还是暴露了很多问题,其中最让我头疼的就是selete的parameterType问题,网上这类的帖子虽然有但是不全,很多情况下很难找到你想要的答案.为此我对这个问题进行了总结,希望对像我这样的新手有一定的帮助. (一)单个参数public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList" para