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. this.getListByEntity("getBookList",maps);
  6. }
  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. this.getListByEntity("getBookListByAuthor",author);
  3. }
  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 来引用这个参数

mybatis 单一参数时的动态语句的更多相关文章

  1. SpringBoot传递单一参数时@RequestParam和@RequestBody的区

    用SpringBoot框架做项目时,经常需要前端给后端传递参数,如果需要多条参数,通常的做法是把这些参数封装为一个对象来传递,前端用POST方式调用.但有时会遇到后端只需要一条参数(比如一个Strin ...

  2. 关于mybatis的参数2个使用经验(类似于struts2的通配所有页面的action配置,xmlsq语句参数类型为基本类型时的快捷指定办法)

    1.我们都知道在struts2中为防止浏览器绕过struts过滤器直接请求页面,所以我们都会配置一个拦截所有页面的action,如下: <action name="*"> ...

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

    参考:http://blog.csdn.net/viviju1989/article/details/17071909 是当我们的参数为String时,在sql语句中#{name} 会去我们传进来的参 ...

  4. MyBatis学习 之 三、动态SQL语句

    目录(?)[-] 三动态SQL语句 selectKey 标签 if标签 if where 的条件判断 if set 的更新语句 if trim代替whereset标签 trim代替set choose ...

  5. myBatis动态语句详解

    SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对应的接口类的路径.写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用,例如: ...

  6. Mybatis中多个参数的问题&&动态SQL&&查询结果与类的对应

    ### 1. 抽象方法中多个参数的问题 在使用MyBatis时,接口中的抽象方法只允许有1个参数,如果有多个参数,例如: Integer updatePassword( Integer id, Str ...

  7. MyBatis学习 之 四、动态SQL语句

    有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息.使用Oracle的序列.mysq ...

  8. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  9. Mybatis 系列9-强大的动态sql 语句

    [Mybatis 系列10-结合源码解析mybatis 执行流程] [Mybatis 系列9-强大的动态sql 语句] [Mybatis 系列8-结合源码解析select.resultMap的用法] ...

随机推荐

  1. ubuntu网卡问题

    目前遇到的ubuntu网卡相关问题总结 ------------------------------------------- 装ubuntu系统后,有线网卡不能用 电脑:办公室dell台式电脑(较新 ...

  2. [COCI2017-2018 Contest5] Birokracija

    题目描述 Mirko has become CEO of a huge corporation. This corporation consists of ​N people, labeled fro ...

  3. Nginx的proxy_pass及upstream的小型负载均衡

    proxy_pass Nginx的proxy_pass将请求代理到其他的后端服务器.例如 listen 9999; server_name wyc.com; location /test/aaa { ...

  4. What is Mocking?

    Mocking is primarily used in unit testing. An object under test may have dependencies on other (comp ...

  5. Android如何缓存你的BITMAP对象

    在app中通常最占内存.占流量的元素就是图片了,图片往往又无处不在,特别是伴随着list,GridView或者ViewPager出现,这些图片随着你的滑动操作,时而出现在你的屏幕中,时而消失在屏幕之外 ...

  6. Android基于代理的插件化思路分析

    前言 正常的App开发流程基本上是这样的:开发功能-->测试--->上线,上线后发现有大bug,紧急修复---->发新版本---->用户更新----->bug修复.从发现 ...

  7. Date类型数据的加一天

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { if (startDate != null &am ...

  8. Centos7.x系统优化

    1.安装常用软件 yum install tree nmap sysstat lrzsz dos2unix wget  net-tools ntpdate -y 2.配置yum源 mv /etc/yu ...

  9. 基于Redis的Bloomfilter去重(转载)

    转载:http://blog.csdn.net/bone_ace/article/details/53107018 前言 “去重”是日常工作中会经常用到的一项技能,在爬虫领域更是常用,并且规模一般都比 ...

  10. 使用Java取得本机IP和机器名

    try { InetAddress addr = InetAddress.getLocalHost(); String ip=addr.getHostAddress().toString();//获得 ...