mybatis 单一参数时的动态语句

MyBatis单参数映射
本文探讨了在MyBatis框架中使用单参数进行查询时的正确语法,并对比了多参数与单参数处理方式的区别。针对单参数的情况,特别强调了如何避免因参数类型不匹配导致的错误。


 

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

 
 在CODE上查看代码片派生到我的代码片
  1. <select id="getBookList"  resultType="Book">  
  2.          SELECT * FROM bookinfo  
  3.          <where>  
  4.                    <if test="publisher != null">  
  5.                             publisher = #{publisher}  
  6.                    </if>  
  7.                    <if test="author != null">  
  8.                             AND author = #{author}  
  9.                    </if>  
  10.          </where>  
  11. </select>  

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

 

 
  1. public void getBookList(String author){  
  2.   
  3.          this.getListByEntity("getBookListByAuthor",author);  
  4. }  


 单一参数时,这么写会报错
  1. <select id="getBookListByAuthor" parameterType="java.lang.String" resultType="Book">  
  2.          SELECT * FROM bookinfo  
  3.          <where>  
  4.                    <if test="author != null">  
  5.                             author = #{author}  
  6.                    </if>  
  7.          </where>  
  8. </select>  

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

 

如下写法正解

 
  1. <select id="getBookListByAuthor" parameterType="java.lang.String" resultType="Book">  
  2.          SELECT * FROM bookinfo  
  3.          <where>  
  4.                    <if test="_parameter != null">  
  5.                             AND author = #{author}  
  6.                    </if>  
  7.          </where>  
  8. </select>  

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

 

转载于:https://www.cnblogs.com/siashan/p/5648847.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值