Mybatis模糊查询MySQL中记录的的常用三种方法

mybatis的模糊查询功能使用的很广泛,以MySQL数据库为例(不同的数据库,有些可能不支持) 
常用的模糊查询有三种方法:

  1. 直接使用 % 拼接字符串,如 ‘%‘#{name}‘%‘ 或 "%"#{name}"%",单引号或双引号都可以。
  2. 使用concat(str1,str2)函数拼接
  3. 使用mybatis的bind标签

现在有数据库mybatis1中表users中有如下记录:

User [id=2, name=bb, phone=13422222222, [email protected]163.com]
User [id=5, name=关羽, phone=13333333333, [email protected]]
User [id=6, name=张飞, phone=13344444444, [email protected]]
User [id=7, name=赵云, phone=13355555555, [email protected]]
User [id=8, name=黄忠, phone=13366666666, [email protected]]
User [id=9, name=曹操, phone=13477883429, [email protected]]
User [id=10, name=郭嘉, phone=13447685234, [email protected]]
User [id=11, name=张三丰, phone=13423455432, [email protected]]

在userMapper.xml文件中新建映射sql的标签

<!-- ******************** 模糊查询的常用的3种方式:********************* -->
    <select id="getUsersByFuzzyQuery" parameterType="User" resultType="User">
        select <include refid="columns"/> from users
        <where>
            <!--
                方法一: 直接使用 % 拼接字符串
                注意:此处不能写成  "%#{name}%" ,#{name}就成了字符串的一部分,
                会发生这样一个异常: The error occurred while setting parameters,
                应该写成: "%"#{name}"%",即#{name}是一个整体,前后加上%
            -->
            <if test="name != null">
                name like "%"#{name}"%"
            </if>
            <!--方法二: 使用concat(str1,str2)函数将两个参数连接 -->
            <if test="phone != null">
                and phone like concat(concat("%",#{phone}),"%")
            </if>
            <!--方法三: 使用 bind 标签,对字符串进行绑定,然后对绑定后的字符串使用 like 关键字进行模糊查询 -->
            <if test="email != null">
                <bind name="pattern" value="‘%‘+email+‘%‘"/>
                and email like #{pattern}
            </if>
        </where>
    </select>

1、测试name:传入 name 属性,模糊匹配 name 中包含“张”字的数据记录

@Test
public void fuzzyQuery(){
    SqlSession session = MybatisUtils.getSession(false);
    User u = new User();
    u.setName("张");
    List<User> userList = session.selectList("com.qcc.mapping.userMapper.getUsersByFuzzyQuery", u);
    for (User user : userList) {
        System.out.println(user);
    }
}

测试结果:

User [id=6, name=张飞, phone=13344444444, [email protected]om]
User [id=11, name=张三丰, phone=13423455432, [email protected]]

2、测试phone:传入 phone 属性,模糊匹配 phone 中包含“44”的所有User信息

@Test
public void fuzzyQuery(){
    SqlSession session = MybatisUtils.getSession(false);
    User u = new User();
//  u.setName("张");
    u.setPhone("44");
    List<User> userList = session.selectList("com.qcc.mapping.userMapper.getUsersByFuzzyQuery", u);
    for (User user : userList) {
        System.out.println(user);
    }
}

测试结果:

User [id=6, name=张飞, phone=13344444444, [email protected]]
User [id=10, name=郭嘉, phone=13447685234, [email protected]]

3、测试email:传入 email 属性,模糊匹配 email 中包含 shu 的所有 User 信息

@Test
public void fuzzyQuery(){
    SqlSession session = MybatisUtils.getSession(false);
    User u = new User();
//  u.setName("张");
//  u.setPhone("44");
    u.setEmail("shu");
    List<User> userList = session.selectList("com.qcc.mapping.userMapper.getUsersByFuzzyQuery", u);
    for (User user : userList) {
        System.out.println(user);
    }
}

测试结果:

User [id=5, name=关羽, phone=13333333333, [email protected]]
User [id=6, name=张飞, phone=13344444444, [email protected]]
User [id=7, name=赵云, phone=13355555555, [email protected]]
User [id=8, name=黄忠, phone=13366666666, [email protected]]

综合测试 :多条件动态模糊查询:

/**
 * 根据 name, phone, email 字段多条件动态模糊查询
 */
@Test
public void fuzzyQuery(){
    SqlSession session = MybatisUtils.getSession(false);
    User u = new User("张", "44", "shu");
    List<User> userList = session.selectList("com.qcc.mapping.userMapper.getUsersByFuzzyQuery", u);
    for (User user : userList) {
        System.out.println(user);
    }
}

结果:

User [id=6, name=张飞, phone=13344444444, [email protected]]

发现结果正常的查询出来了,说明模糊查询的三种写法同时都是没有问题的。

原文地址:https://www.cnblogs.com/tanzq/p/8428861.html

时间: 2024-11-05 17:25:43

Mybatis模糊查询MySQL中记录的的常用三种方法的相关文章

PHP获取MySql新增记录ID值的3种方法

From: http://www.jb51.net/article/51473.htm 这篇文章主要介绍了PHP获取MySql新增记录ID值的3种方法,一般使用PHP自带函数mysql_insert_id() 即可实现,另2种方法权作特殊情况下使用,需要的朋友可以参考下 一.使用语句: 复制代码 代码如下: mysql_query("select max(id) from t1",$link); 使用此方法得到的是 id最大的值,确为最后一个值,但当多链接线程时,这个最大的id并不一定

【转载】取得系统中网卡MAC地址的三种方法

From:http://blog.csdn.net/zhangting1987/article/details/2732135 网卡地址这个概念有点混淆不清.因为实际上有两个地址,mac地址和物理地址,一般说网卡地址我是指物理地址,不知道别人怎么看?物理地址指的是网卡上的存放地址的ROM里的地址,mac地址是这块卡工作的时候用的地址,一般情况下这两个地址是一样的,所以很多人都混用了,甚至不知道有区别  -_-# 网卡工作的时候,一个以太网帧60到1514(不包括crc),帧的crc是网卡自动加的

Html5 页面中 JavaScript 启动调用的三种方法比较

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 首先,来看一下 Html5 页面引用 JavaScript 代码的几种方式: 1.Html5 页面中使用 <script>  标签容纳

Java中获取键盘输入值的三种方法

Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决方法吧: 以下将列出几种方法: 方法一:从控制台接收一个字符,然后将其打印出来 import java.io.*; public static void main(String [] args) throws

Android中设置文本颜色的三种方法及颜色大全

原文:Android中设置文本颜色的三种方法及颜色大全 源代码下载地址:http://www.zuidaima.com/share/1550463694572544.htm 1.利于系统自带的颜色类 如TextView1.setTextColor(Android.graphics.Color.RED); 2.数字颜色表示法 TextView1.setTextColor(0xffff00ff); 3.自定义颜色 TextView1.setTextColor(this.getResources().

java小知识点(一)---Java中获取键盘输入值的三种方法

Java中获取键盘输入值的三种方法   程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决方法吧:   以下将列出几种方法:   方法一:从控制台接收一个字符,然后将其打印出来   publicstatic void main(String [] args) throws IOException{   Sys

(转)在网页中JS函数自动执行常用三种方法

原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   } </SCR

页面中插入CSS样式的三种方法

页面中插入css样式的三种方法总结 1. 外部样式 当样式需要应用于很多页面时,外部样式表将是理想的选择.在使用外部样式表的情况下,你可以通过改变一个文件来改变整个站点的外观.每个页面使用<link>标签链接到样式表. <link>标签在(文档的)头部: <head> <link rel="stylesheet" type="text/css" href="path/myCss.css"/> <

在网页中JS函数自动执行常用三种方法

在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT   LANGUAGE="JavaScript">   functionn MyAutoRun() {   //以下是您的函数的代码,请自行修改先! alert("函数自动执行哦!");   }  </SCRIPT> 下面,我们就针对上面的函数,让其在网页载入的时候自动运行! ①第一种方法 将如上代码改为: <SCRIPT   LANGUAG