@Select("<script>"+
"SELECT * " +
"FROM bgs_housing A" +
" <where> " +
" A.building !=0 and built_area >=#{needVo.min_acreage} and built_area <= #{needVo.max_acreage} and built_area !=0"+
" and A.id NOT IN(SELECT housing FROM bgs_follow WHERE need = #{needVo.id} AND bgs_follow.state <5)"+
" AND A.type = #{needVo.max_acreage}"+
" <foreach collection=\"params.keys\" item=\"key\" > "+
         "   <choose>\r\n" +
         " <when test=\"key =='name'\">\r\n" +
          " and A.name like concat('%',#{params[${key}]},'%') " +
          " </when>\r\n" +
           " <otherwise>\r\n" +
    "       <if test=\"params[key]!= null\">and A.${key} =#{params[${key}]}</if> " +
         " </otherwise>\r\n" +
          " </choose>"+
"</foreach> "+
" <if test=\"needVo.min_price!= 0\">and A.rent_price >=#{needVo.min_price}</if> " +
" <if test=\"needVo.max_price!= 0\">and A.rent_price <=#{needVo.max_price}</if> " +
" </where> " +
" limit #{page.offset},#{page.size}"+
"</script>")
List<Map<String, Object>> matchHousing(@Param("needVo")Need needVo, @Param("params")Map<String, Object> params,@Param("page") PageUtil page)throws Exception;

注意:

单字符判断相等时错误:

  <if test="takeWay == '1' and workday != null ">
  改为<if test='takeWay == "1" and workday != null '>
  或改为<if test="takeWay == '1'.toString() and workday != null ">即可。
 
原因是:
  mybatis是用OGNL表达式来解析的,在OGNL的表达式中,’1’会被解析成字符,java是强类型的,char 和 一个string 会导致不等,所以if标签中的sql不会被解析。
  总结下使用方法:单个的字符要写到双引号里面或者使用.toString()才行!

Mybaits 查询 choose when 的使用的更多相关文章

  1. Mybaits查询返回值是List类型的

    查询返回值是list类型的 1 首先在接口中写方法 public interface EmployeeMapper { public List<Employee> getEmpsByLas ...

  2. 一步步学Mybatis-怎么样实现动态SQL查询(6)

    上一章我们已经讲完了关于Mybatis的分页用法,其实MyBatis 还具有的一个强大的特性之一通常是它的动态 SQL 能力. 如果你有使用 JDBC 或其他 相似框架的经验,你就明白要动态的串联 S ...

  3. MyBatis动态SQL之一使用 if 标签和 choose标签

    bootstrap react https://segmentfault.com/a/1190000010383464 xml 中 < 转义 to thi tha <if test=&qu ...

  4. MyBatis 3

    MyBatis 3 学习笔记 一.Mybatis 基础知识 1.MyBatis 3编写步骤: 根据mybatis-config.xml配置文件创建一个SqlSessionFactory对象. sql映 ...

  5. ssm知识点整理

    第1章 resultType和resultMap的区别是什么?  MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType ...

  6. mybatis06--动态sql

    1.if标签 public interface StudentDao { /** *动态sql的查询 参数是Student对象 不确定 用户输入几个属性值 */ List<Student> ...

  7. 【JavaWeb项目】一个众筹网站的开发(八)后台页面详细设置

    一.user.jsp改造 删除引入菜单 抽取导航栏 nav-bar.jsp,删除引入导航栏 删除引入main.jsp的到好烂 数据库里添加url 报错,url不对 没有/ url正确 action=& ...

  8. MyBaits一对一的查询方法

    MyBaits一对一的查询方法 一:表数据与表结构 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name ) ); CRE ...

  9. Mybaits 之根据集合查询和逗号分隔的子查询

    这是我们的mapper要根据传入一个集合进行查询: List<ExtKeywordCategory> findListByIds(List<ExtKeywordFkCategory& ...

随机推荐

  1. Oracle 即时客户点下载以及简单连接数据库的方法

    1. 下载方法 百度 oracle client 第一个即可 2. 下载地址为: https://www.oracle.com/database/technologies/instant-client ...

  2. 2018.08.14【2018提高组】模拟A组 比赛总结

    题解 这次的A组难得得水. T1 这题我一看,就想起了GDOI的一道题--密码锁 \(O(n)\)算法--差分 于是乎兴奋地发现这道题可以用差分来解. 设\(f_i=a_i-a_{i-1}\). 然后 ...

  3. pycharm 快捷键练习 和基本英语单词练习

    通过练习 一下快捷键 打代码的速度得到提升 pycharm以下 快捷键+快捷键意义 ctrl+a 全选 ctrl+c 复制(不选中默认复制一行) ctrl+v 粘贴 ctrl+x 剪切 ctrl+f ...

  4. springMvc接受单个文件,多个文件,多组文件

    web端 <form id="iconForm" enctype="multipart/form-data"></form> JS:通过 ...

  5. float详解

    先上一个简单示例,了解一下float的使用 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  6. ACM的一点基础知识

    所摘内容来自于XJTU小学期ACM培训PPT log 默认以2为底 计算机一秒可以看作1e8次 保证数据计算精度及数据所需必要大小 a=1LL*a*a%p//在计算时通过乘以1LL,临时将Int转化为 ...

  7. debezium关于cdc的使用(上)

    博文原址:debezium关于cdc的使用(上) 简介 debezium是一个为了捕获数据变更(cdc)的开源的分布式平台.启动并指向数据库,当其他应用对此数据库执行inserts.updates.d ...

  8. vue+webpack项目环境搭建

    首先安装node.js 下载地址:https://nodejs.org/en/download/ 看下是否成功安装 node -v 安装webpack,命令行npm install webpack - ...

  9. Nginx(web服务器)与Tomcat(应用服务器)搭建集群

    Nginx作为互联网最常用的web服务器,高性能的HTTP和反向代理使它经常作为Tomcat集群的方案.Nginx官方只支持使用HTTP协议的集成,但是如果你想使用AJP协议集成,可以使用阿里开源的n ...

  10. shell脚本if判断语句报错[: too many arguments的两种原因

    shell脚本,if判断语句报错[: too many arguments 我遇到过两种情况: 1.第一中情况就是网上大家说的,字符串变量中可能存在空格,shell解析时将其认为是多个参数,再进行判断 ...