zoukankan      html  css  js  c++  java
  • mybatis学习笔记

    一、mybatis模糊查找的几种写法(转载):

    1. sql中字符串拼接

       SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%');

     

    2. 使用 ${...} 代替 #{...}

       SELECT * FROM tableName WHERE name LIKE '%${text}%';

     

    3. 程序中拼接

       Java

       // String searchText = "%" + text + "%";

       String searchText = new StringBuilder("%").append(text).append("%").toString();

       parameterMap.put("text", searchText);

     

       SqlMap.xml

       SELECT * FROM tableName WHERE name LIKE #{text};

     

    4. 大小写匹配查询

       SELECT *  FROM TABLENAME  WHERE UPPER(SUBSYSTEM) LIKE '%' || UPPER('jz') || '%'

       或者 

       SELECT *   FROM TABLENAME  WHERE LOWER(SUBSYSTEM) LIKE '%' || LOWER('jz') || '%'

    在mybatis模糊查找时出现There is no getter for property named 'teacherName' in 'class java.lang.String'

    错误写法:

    1 <select id="findAllProjectLevelByTeacher"  parameterType="String" resultType="String">
    2 SELECT DISTINCT Level FROM project WHERE TeacherName LIKE '%${teacherName}%'
    3 </select>

    解决方法:这种情况下,不管函数里面参数名是什么,都要改为_parameter

    正确写法:

    1 <select id="findAllProjectLevelByTeacher"  parameterType="String" resultType="String">
    2 SELECT DISTINCT Level FROM project WHERE TeacherName LIKE '%${_parameter}%'
    3 </select>

    二、mybatis查询时多参数的传递方法

    1、通过hashmap来传,在XML中配置好对应的parameterMap。通过属性<select>的parameterMap或者parameterType调用即可

    注意:在定义函数时,参数也应该是hashmap类型的

    2、XML中直接用#{1},#{2}...等方法把对应的参数传入,注意定义函数时,需用@Param("")对应把每个参数与XML中的参数名对应起来。

     XML:

    1 <select id="findAllProjectNameByLevel" resultType="String">
    2 SELECT DISTINCT Name FROM project WHERE TeacherName LIKE '%${teacherName}%' AND Level LIKE '%${level}%' 
    3 </select>

    DAO:

     1 List<String> findAllProjectNameByLevel(@Param("teacherName")String teacherName,@Param("level")String level); 

    注意:模糊查找时,只有一个参数的时候用_parameter,在模糊查找条件只有一个,即一个Like '%%',但还有其他参数时,如 select *  from student where sName like '%参数1%' limit 参数2,参数3,这种情况也是和多参数传递方法一样的

     三、mybatis查询语句中不能出现大于(>)和小于(<)

    如果在mybatis中需要用到大于(>)和小于(<),需用转义后使用:

       &lt;          < 
        &gt;          >  
        &lt;&gt;   <>
        &amp;      & 
        &apos;      '
        &quot;      "

     也可以改写一下mybatis查询代码

    如,错误语句

    select *from student where grade1>#{grade} and grade2<#{grade}
    

    如果这样写,会报:The content of elements must consist of well-formed character data or markup

     正确写法:

    SELECT * FROM tax WHERE
      <![CDATA[grade1 > #{grade}]]>  AND <![CDATA[grade2< #{grade}]]>
    

      

     
  • 相关阅读:
    [整理]修改git 默认编辑器为vim
    [转]如何清空Chrome缓存和Cookie
    [整理]docker内部时区修改的两种方法
    [译]10个有关SCP的命令
    [译]在python中如何有效的比较两个无序的列表是否包含完全同样的元素(不是set)?
    通过设计表快速了解sql语句中字段的含义
    [整理]什么是排序算法的稳定性,为什么它很重要?
    pyinstaller打包自己的python程序
    [问题解决]ps aux中command命令相同,如何找出自己要的进程号?
    [常识]Windows系统里休眠和睡眠的区别?
  • 原文地址:https://www.cnblogs.com/John-Lyn/p/3848178.html
Copyright © 2011-2022 走看看