- 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 来引用这个参数