MyBatis单个参数的动态语句引用

原创 2013年12月02日 14:24:04

在使用mybatis的动态sql时,有时需要根据参数值来动态拼接mysql,比如下面的示例:
根据出版社和作者查询图书列表,如果为空则不做该条件过滤(注:此处有2个参数)

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("getBookList",maps);
}

<select id="getBookList"  resultType="Book">
         SELECT * FROM bookinfo
         <where>
                   <if test="publisher != null">
                            publisher = #{publisher}
                   </if>
                   <if test="author != null">
                            AND author = #{author}
                   </if>
         </where>
</select>

如上写法,是没有问题的,但是当情况变得简单的时候,比如只根据作者查询图书列表的时候,当然我们可以采用和上面相同的处理方法,在方法中将参数封装到map中去。但是当我们直接使用String作为参数来查询时,就需要注意一个问题:

public void getBookList(String author){

         this.getListByEntity("getBookListByAuthor",author);
}

<select id="getBookListByAuthor" parameterType="java.lang.String" resultType="Book">
         SELECT * FROM bookinfo
         <where>
                   <if test="author != null">
                            author = #{author}
                   </if>
         </where>
</select>

看似没有问题,当我们运行的时候,报异常了,原因是当我们的参数为String时,在sql语句中#{author} 会去我们传进来的参数调getAuthor()方法获取参数,很明显,String没有对应的方法,所以报错了,那我们这里要如何引用author对象呢,需要采用下面的写法:

<select id="getBookListByAuthor" parameterType="java.lang.String" resultType="Book">
         SELECT * FROM bookinfo
         <where>
                   <if test="_parameter != null">
                            AND author = #{author}
                   </if>
         </where>
</select>

结论当mybatis传参为单个参数时,在sql语句中需要使用_parameter 来引用这个参数

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MyBatis之传入参数

在MyBatis的select、insert、update、delete这些元素中都提到了parameterType这个属性。MyBatis现在可以使用的parameterType有基本数据类型和JA...

mybatis中关于传入参数parameterType

众所周知,mybatis的传入参数可以是各种Java的基本数据类型:包含int,String,Date等。基本数据类型作为传参,只能传入一个。通过#{参数名} 即可获取传入的值 ,复杂数据类型:包含J...
  • Truong
  • Truong
  • 2013-12-11 22:04
  • 141425

MYBATIS 的参数传递及XML内使用

Parameter   1.   传入简单类型     JAVA代码: Java代码   public User get(Long id) {  ...

Mybatis介绍之参数传递

1     使用Mapper接口时参数传递方式        Mybatis在使用Mapper接口进行编程时,其实底层是采用了动态代理机制,表面上是调用的Mapper接口,而实际上是通过动...

Mybatis的参数使用

刚开始使用Mybatis的时候,感觉一头雾水:由于数据库的实际操作已经给封装起来,只需要传入参数就可以,但是这些参数与SQL之间是怎样关联上的呢?是使用参数名称关联吗?如果有多个参数呢?如果使用数组或...

ibatis 常用语句 带参数的

(1) 输入参数为单个值 Xml代码   delete id="com.fashionfree.stat.accesslog.deleteMemberAcces...

Mybatis 传入多个参数的方法

1.由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始 UPDATE ams_user SET log...

每日一记-Mybatis动态语句

前言      对Mybatis没有过使用经验,早起的时候就是直接写SQL语句,后来学会都在使用Hibernate,现在的公司使用的Mybatis,所以需要学习一下。      为...

myBatis动态语句详解

mybatis动态语句

mybatis+0+null--------------mybatis中stutas==0是sql动态语句拼接问题

转载地址:http://www.07net01.com/2016/01/1145271.html Mybatis在进行 判空操作时,如果status为0的时候,该判断条件的值为false,也就是...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)