mybatis对传入基本类型参数的判断方式

目录
  • 对传入基本类型参数的判断
    • 解决办法
  • 传入基本类型参数时test判断报错
    • 分析
    • 解决办法
    • 小结一下

对传入基本类型参数的判断

mybatis的xml文件的sql语句中parameterType为基本类型,如:

<select id="getCustomer" parameterType="Integer" resultType="Customer">
    select * from customer
    where
    <if test="id != null">id=#{id}</if>
<select>

会报错:There is no getter for property named 'id' in 'class java.lang.Integer'

这是因为Integer对象中没有id属性

解决办法

<select id="getCustomer" parameterType="Integer" resultType="Customer">
    select * from Customer
    where
    <if test="_parameter != null">id=#{_parameter}</if>
<select>

即将接收参数的参数名改为_parameter,注意改成其他参数名没用。

传入基本类型参数时test判断报错

在使用mybatis的时候出现了这样的问题:

//Dao层的接口中的代码
List<Map<String,Object>> getName(String username);
//对应的mapper中的代码
<select id="getName" resultType="java.util.Map">
    select name,client_id
    from table1
    <where> 
        <if test=" username!= null and username!='' ">
            and username= #{id}
        </if>
    </where> 
</select>

//报的错误
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: 
There is no getter for property named 'username' in 'class java.lang.String'

分析

There is no getter for property named ‘username’ in ‘class java.lang.String’,这句话打大概意思是:在“class java.lang.String”中没有名为“username”的属性的getter方法。因为mybatis默认采用ONGL解析参数,所以会自动采用对象树的形式取string.num值,引起错误。

解决办法

if test中的id用_parameter替换,而实际的语句不需要修改and a.id =#{id},因为Mybatis当只传入一个参数时#{ } 中的内容没有要求。

在Mapper中给出入参设置名称,例:public … getName(@Param(“username”) String username);这样修改后我们前面的写法就不会报错了。

小结一下

在传入基本类型的数据时,if标签中test判断的书写hi根据ognl表达式来取值的,所以不能直接写参数的名称,要利用_parameter来替代,或者利用注解@Pram("")来给参数起别名。

补充一点点:标签when中的test属性也有同样的问题!!!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Mybatis 传递参数类型为List的取值问题

    问题描述: 参数传递为List时: 当传递一个 List 实例或者数组作为参数对象传给 Mybatis.此时,Mybatis 会自动将它包装在一个 Map 中,用名称在作为键.List 实例将会以"list" 作为键,而数组实例将会以"array"作为键.所以,当我们传递的是一个List集合时,mybatis会自动把我们的list集合包装成以list为Key值的map. DAO 层: List<User> selectUserByIDs( List ID

  • 基于MyBatis的parameterType传入参数类型

    目录 MyBatis的parameterType传入参数类型 1. MyBatis的传入参数parameterType类型分两种 2. 如何获取参数中的值 3.案例 mybatis 之parameterType="Long" MyBatis的parameterType传入参数类型 在mybatis映射接口的配置中,有select,insert,update,delete等元素都提到了parameterType的用法,parameterType为输入参数,在配置的时候,配置相应的输入参数

  • 浅谈Mybatis传参类型如何确定

    目录 I. 环境配置 1. 项目配置 2. 数据库表 II. 传参类型确定 1. 参数类型为整形 2. 指定jdbcType 3. 传参类型为String 4. TypeHandler实现参数替换强制添加引号 5. 小结 最近有小伙伴在讨论#{}与${}的区别时,有提到#{}是用字符串进行替换,就我个人的理解,它的主要作用是占位,最终替换的结果并不一定是字符串方式,比如我们传参类型是整形时,最终拼接的sql,传参讲道理也应该是整形,而不是字符串的方式 接下来我们来看一下,mapper接口中不同的

  • MyBatis中传入参数parameterType类型详解

    前言 Mybatis的Mapper文件中的select.insert.update.delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型.本文主要给大家介绍了关于MyBatis传入参数parameterType类型的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 1. MyBatis的传入参数parameterType类型分两种 1. 1. 基本数据类型:int,string,long,Date; 1. 2. 复杂数据类

  • mybatis对传入基本类型参数的判断方式

    目录 对传入基本类型参数的判断 解决办法 传入基本类型参数时test判断报错 分析 解决办法 小结一下 对传入基本类型参数的判断 mybatis的xml文件的sql语句中parameterType为基本类型,如: <select id="getCustomer" parameterType="Integer" resultType="Customer">     select * from customer     where    

  • mybatis 映射文件中if标签判断字符串相等的两种方式

    mybatis 映射文件中,if标签判断字符串相等,两种方式: 因为mybatis映射文件,是使用的ognl表达式,所以在判断字符串sex变量是否是字符串Y的时候, <if test="sex=='Y'.toString()"> <if test = 'sex== "Y"'> 注意: 不能使用 <if test="sex=='Y'"> and 1=1 </if> 因为mybatis会把'Y'解析为字

  • mybatis数组和集合的长度判断及插入方式

    目录 mybatis数组和集合的长度判断及插入 1.在使用foreach的是collection属性 2.判断长度 mybatis数组与集合判断非空和长度 数组判断 集合判断 mybatis数组和集合的长度判断及插入 1.在使用foreach的是collection属性 该属性是必须指定的,但是在不同情况下,该属性的值是不一样的 主要有一下4种情况:  如果传入的是单参数且参数类型是一个List的时候,collection属性值为list . 如果传入的是单参数且参数类型是非list的Colle

  • mybatis中的test语句失效处理方式

    目录 mybatistest语句失效 解决方案也很简单 mybatistest判断注意事项 误将一个传入的整型数据使用了下面的判断方式 同样整数数据也会转换为double类型 mybatis test语句失效 正常情况下,写动态sql的if test或when test语句时,条件引用为双引号括单引号 如下:  <select id="sel1" resultType="User">           select * from tb_user    

  • Mybatis动态传入order by问题

    目录 Mybatis动态传入order by Mybatis order by动态参数防注入 先提及一下Mybatis动态参数 order by 动态参数 解决Order by动态参数注入问题 总结 Mybatis动态传入order by 当Mybatis的mapper文件传入的order by 为动态参数说的时候发现排序无法生效: 像下面这样,在choose when中的order by后的参数是用预编译的方式,用的是#号,这样是可以防止sql注入的问题,但是在传入order by参数的时候无

  • mybatis中批量插入的两种方式(高效插入)

    MyBatis简介 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 一.mybiats foreach标签 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主

  • MyBatis Mapper接受参数的四种方式代码解析

    这篇文章主要介绍了MyBatis Mapper接受参数的四种方式代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 对于单个参数而言,可以直接写#{param},这里的占位符名称没有限制,反正就一个参数一个占位符,不需要指定名称 对于多个参数,有常用的四种方式 根据位置排序号 public interface UserDao { public Integer addUser(String username, String password)

  • Python之变量类型和if判断方式

    Python基础 1.数据类型(举几个最常用的) 整数型(int),可以理解为不带小数点的数字,比如13,-456等 浮点型(float) ,带小数点的数字,比如456.13,-798.13等 字符串(string),用'',"",''' '''或者""" """包裹的任意文本,比如'132',"abc"等, 如果输入的文本中包括''或者""需要在前面加\转义,比如'i\'m ok'这样

  • Mybatis如何传入多个参数(实体类型和基本类型)

    目录 Mybatis传入多个参数 1.ProjectController类 2.ProjectAndUserService接口 3.ProjectAndUserServiceImpl实现类 4.ProjectAndUserMapper接口 5.ProjectAndUserMapper.xml Mybatis传入多个参数时,如何处理 方式一 方式二 方式三 Mybatis传入多个参数 1.ProjectController类 Integer oldUserId = getUserIdByUserN

  • MyBatis源码剖析之Mapper代理方式详解

    目录 源码剖析-getmapper() 源码剖析-invoke() 具体代码如下: //前三步都相同 InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSess

随机推荐