mybatis 单一参数时的动态语句
2024-09-05 12:43:56
- 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 来引用这个参数
最新文章
- inno 实现水波特效
- paip.http 404错误 的解决
- 伸展树(二)之 C++的实现
- WinAPI: ExtCreateRegion - 区域变换
- epoll 应用
- 【Leetcode】Evaluate Reverse Polish Notation JAVA
- Codeforces Round #330 (Div. 1) A. Warrior and Archer 贪心 数学
- datagrid的基本操作-增删改
- tp28xx port pin (open-drain )and (push-pull) 和open collector)
- 【NOIP2011提高组】选择客栈
- Linux System Programming -- Appendix
- 前端面试题整理—JavaScript篇(一)
- 解决centos中vsftpd中文乱码
- RNA-seq数据综合分析教程 AKAP95
- 代码的二次重构(开篇:JDBC连接数据库)
- [Visual Studio] 记一次排错:打不开 Nuget 包管理器里的安装package页面,无法 安装 / 恢复 包
- Rapid 2D-to-3D conversion——快速2D到3D转换
- Tensorflow-slim 学习笔记(一)概述
- Kubernetes学习之路(十八)之认证、授权和准入控制
- ThinkPHP框架返回插入记录的id号