1、常见错误:

There is no getter for property named 'parentId' in 'class java.lang.Long'(或者String)

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'parentId' in 'class java.lang.Long'

sql是这样写的:

sql1:

<select id="queryByParentId" parameterType="long" resultMap="beanMap">
SELECT * FROM <include refid="t_pt_category"/>
<where>
isdel = 0
<if test="parentId != null">
AND parent_id = #{parentId}
</if>
</where>
ORDER BY parent_id
</select>

此时,就报了上面的错误。

解决1:

把<if>标签去掉传参还是直接传递传递long,如下:sql2

<select id="queryByParentId" parameterType="long" resultMap="beanMap">
SELECT * FROM <include refid="t_pt_category"/>
<where>
isdel = 0
AND parent_id = #{parentId}
<!--<if test="parentId != null">
AND parent_id = #{parentId}
</if> -->
</where>
ORDER BY parent_id
</select>

这样也sql2是可以的。

解决2:保持sql1不变,在dao层把参数换成map类型,

Map<String, Object> params = new HashMap<>(1);
params.put("parentId", parentId);

此时再执行,是可以的。

(一般通用的全部的参数都是放到map中,这种最常用)

解决3:改写sql1,如下,全部的参数都换成"_parameter",如下sql3:

<select id="queryByParentId" parameterType="long" resultMap="beanMap">
SELECT * FROM <include refid="t_pt_category"/>
<where>
isdel = 0
<if test="_parameter != null">
AND parent_id = #{_parameter}
</if>
</where>
ORDER BY parent_id
</select>

此时直接传递long也是可以的。

ps:我还是倾向于第二种解决方法,都用map来进行传参。

MyBatis <if>标签的一些问题的更多相关文章

  1. Mybatis foreach标签含义

    背景 考虑以下场景: InfoTable(信息表): Name Gender Age Score 张三 男 21 90 李四 女 20 87 王五 男 22 92 赵六 女 19 94 孙七 女 23 ...

  2. MyBatis 别名标签 & sql的复用

    1.MyBatis 别名标签 如果在映射文件中,大量使用类名比较长,可以在sqlMapConfig.xml声明别名, 在映射文件中可以使用别名缩短配置,注意此配置要放在最前面 sqlMapConfig ...

  3. mybatis <forEach>标签的使用

    MyBatis<forEach>标签的使用 你可以传递一个 List 实例或者数组作为参数对象传给 MyBatis.当你这么做的时候,MyBatis 会自动将它包装在一个 Map 中,用名 ...

  4. mybatis resultmap标签type属性什么意思

    mybatis resultmap标签type属性什么意思? :就表示被转换的对象啊,被转换成object的类型啊 <resultMap id="BaseResultMap" ...

  5. MyBatis - 常用标签与动态Sql

    MyBatis常用标签 ● 定义sql语句:select.insert.delete.update ● 配置JAVA对象属性与查询结构及中列明对应的关系:resultMap ● 控制动态sql拼接:i ...

  6. mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE

    一.My Batis trim标签有点类似于replace效果. trim 属性, prefix:前缀覆盖并增加其内容 suffix:后缀覆盖并增加其内容 prefixOverrides:前缀判断的条 ...

  7. MyBatis foreach标签遍历数组

    有时候开发中需要根据多个ID去查询,可以将ID封装为List或者数组然后使用MyBatis中的foreach标签构建in条件. 这里我将ID封装为String[]作为参数. <select id ...

  8. mybatis include标签

    使用mybatis 的include标签达到SQL片段达到代码复用的目的 示例: xml文件 <sql id="paysql"> payid,p.oid,p.bdate ...

  9. mybatis foreach标签

    一.批量插入数据 示例:添加订单商品表 1.模型层的相应代码 /** * 添加订单商品表 * @param ordergoods * @return */ public boolean addOrde ...

随机推荐

  1. ssh-keygen不是内部或外部命令

    在**/Git/usr/bin目录下找到ssh-keygen.exe,将**/Git/usr/bin路径添加到环境变量中

  2. Spring入门_04_注解注入

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  3. 部署Redis for Windows服务

    一.环境 Redis Windows 版本:2.8.2104 二.植入Windows服务    > redis-server.exe --service-install redis.window ...

  4. Mongodb3.0.6副本集+分片学习笔记

    一.使用问题记录 1. mongodb3.0.6使用mongostat参数 >./mongostat -h 127.0.0.1:27017 -u root -p 123456 /authenti ...

  5. nlssort函数的用法以及参数

    NLSSORT,可以用来进行语言排序,且不影响当前会话. 用法示例: 拼音SELECT * FROM TEAM ORDER BY NLSSORT(排序字段,'NLS_SORT = SCHINESE_P ...

  6. JAVA日期加减运算

    1.用java.util.Calender来实现 Calendar calendar=Calendar.getInstance();      calendar.setTime(new Date()) ...

  7. System.exit(0)和System.exit(1)区别

    System.exit(0)是将你的整个虚拟机里的内容都停掉了 ,而dispose()只是关闭这个窗口,但是并没有停止整个application exit() .无论如何,内存都释放了!也就是说连JV ...

  8. jquery客户端验证插件

    http://www.cnblogs.com/masing/articles/2157420.html http://www.oschina.net/p/jquery+formvalidator ht ...

  9. 2015年11月26日 Java基础系列(一)之String与StringBuffer与StringBuilder的区别

    序,StringBuffer是线程安全的,StringBuilder是线程不安全的,但是StringBuilder操作速度快,因此在使用时要根据场景合理选择. StringBuffer和StringB ...

  10. [译]git status

    git status git status命令能展示工作目录和stage区的状态. 使用他你能看到那些修改被staged到了, 哪些没有, 哪些文件没有被Git tracked到. git statu ...