2018.4.8

仅为个人理解 不足之处欢迎指正~

数据库说明:

我们在之前的数据库中添加三列:sex major class

现有如下记录:

Mybatis进行模糊查询:

Mybatis进行模糊查询常用的方法有三种 依次介绍:

1.使用concat(str1,str2)函数将两个参数连接

在Student.xml中添加新的select方法:

在测试类中增加对于模糊查询的测试:

我们在这里通过第一个模糊查询的方式查找所有专业中带有“技术”的学生 并输出他们的姓名

根据之前的数据库信息

我们应该输出的是 林俊杰 张学友 田馥甄

运行结果与预期相同

下面解释一下xml中 concat中的#{0}:

首先我们要了解一下mysql中模糊查询的语句

1.%

%可以表示任意0个或多个字符,适用于查询数据表中任意带有所需要查询的字段的信息

比如:

select * from student where name like '%王%'

可以查询出王X 王XX X王X XX王 等等任意名字带有“王”且长度不限的同学

2._

_表示任意单个字符 它只能匹配任意单个字符 适用于需要限制长度的查询

比如:

select * from student where name like '_王_'

只能查询出 X王X 这一类同学

select * from student where name like '王_'

只能查询出 王X 这一类同学

3.[]

[]用于指定一个范围 要求所查询的对象为它们中的任意一个

比如:

select * from student where name like '[赵钱孙]小明'

将查询出名字为 赵小明 钱小明 孙小明 的同学 而不是赵钱孙小明

4.[^ ]

[^ ]与上面相反 比如:

select * from student where name like '[^赵钱孙]小明'

将查询出姓不为 赵钱孙 的其他小明

看到这里

语句中的#{0}作用就很明显了

它起到占位符的作用 类似于先把#{}变成preparedstatement中的?

但是这里用#{1}、#{2}甚至#{100}代替也可以成功起到作用

具体的原理和正确的表示方法我也没有理解

2.使用%拼接字符串

在Student.xml中添加新的select方法:

测试方法与上一方法中的相同 同样可以得到正确答案

需要注意的是:

使用%拼接字符串时应写成 "%"#{XXXX}"%"

而不是写为"%#{XXXX}%"

即"%" "%"与#{}应该相互独立 其中"%"也可以根据需求用上文中的其他三种符号代替

3.使用Mybatis提供的bind标签

先在student的pojo里添加major属性

在Student.xml中添加新的select方法:

注意测试方法也将发生改变:

获得结果

下面贴出完整代码:

Student.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- 为mapper指定唯一的namespace 通常设置成pojo包名在后续调用sql语句的时候 会使用到 --><mapper namespace="com.tzy.pojo"><!-- 这条语句中 用id:listStudent进行标示 供后续代码调用resultType表示的返回一个关联Student类的数据在这里本来应该使用的是com.tzy.pojo.Student但是在之前的mybatis-configuration.xml中定义了typeAliases别名 所以可以直接使用Student--><select id="listStudent" resultType="Student">select * from   student  </select><insert id="addStudent" parameterType="Student" >insert into student values (#{id},#{name})    </insert><delete id="deleteStudent" parameterType="Student" >delete from student where id= #{id}   </delete><select id="getStudent" parameterType="_int" resultType="Student">select * from   student  where id= #{id}    </select><select id="mohuchaxun1" parameterType="string" resultType="Student">select * from   student  where major like concat('%',#{0},'%')  </select><select id="mohuchaxun2" parameterType="string" resultType="Student">select* from student where major like "%"#{name}"%"</select><select id="mohuchaxun3" parameterType="Student" resultType="Student"><bind name="pattern1" value="'%'+major+'%'"/>select* from student where major like #{pattern1}</select><update id="updateStudent" parameterType="Student" >update student set name=#{name} where id=#{id}    </update></mapper>

TestMybatis.java:

package com.tzy.test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.tzy.pojo.Student;public class TestMybatis {public static void main(String[] args) throws IOException {//mybatis配置文件String resource = "mybatis-configuration.xml";//得到配置文件流InputStream inputStream = Resources.getResourceAsStream(resource);//创建会话工厂 传入mybatis的配置文件信息SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession session=sqlSessionFactory.openSession();//增
//        Student stu=new Student();
//        stu.setId(2018040701);
//        stu.setName("李宗盛");
//        session.insert("addStudent", stu);//删
//        Student stu=new Student();
//        stu.setId(2018040701);
//        session.delete("deleteStudent", stu);//改
//        Student stu=new Student();
//        stu.setId(2018040501);
//        stu.setName("林俊杰");
//        session.delete("updateStudent", stu);//单个查询
//        Student stu=session.selectOne("getStudent",2018040501);
//        System.out.println(stu.getId()+"  "+stu.getName());//多个查询
//        List<Student> cs=session.selectList("listStudent");
//        // 冒号是遍历的作用
//        for (Student a : cs) {
//            System.out.println(a.getName()+"   "+a.getId());
//        }//模糊查询1
//        List<Student> cs=session.selectList("mohuchaxun1","技术");
//        for (Student s : cs) {
//        System.out.println(s.getName());//模糊查询2
//      List<Student> cs=session.selectList("mohuchaxun2","技术");
//      for (Student s : cs) {
//      System.out.println(s.getName());//模糊查询3Student stu=new Student();stu.setMajor("技术");List<Student> cs=session.selectList("mohuchaxun3",stu);for (Student s : cs) {System.out.println(s.getName());}}
}

Mybatis学习记录(四)——Mybatis实现模糊查询的三种方法相关推荐

  1. MyBatis实现模糊查询的三种方式

    MyBatis实现模糊查询的三种方式 准备 模糊查询 方式一 方式二 方式三 由于#{}是占位符本身,自带单引号,所以在模糊查询时需要一些技巧. 准备 数据库表 bean 模糊查询 以查询出所有用户名 ...

  2. mysql去重查询的三种方法

    文章目录 前言 一.插入测试数据 二.剔除重复数据方法 1.方法一:使用distinct 2.方法二:使用group by 3.方法三:使用开窗函数 总结 前言 数据库生成环境中经常会遇到表中有重复的 ...

  3. sql oracle分页查询,【SQL】Oracle分页查询的三种方法-Oracle

    [SQL]Oracle分页查询的三种方法 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; 按照学生ID排名 ...

  4. 如何使用计算机查询本机网卡信息,本机mac地址查询的三种方法

    现在电脑非常流行,大部分的学生以及白领或者说每一个家庭几乎都有一台电脑.不过大家对于电脑的认识却没有这么高的普及度.很多人对于它的了解仅仅停留在使用电脑看视频用软件的层面,对于电脑自身的认识不是很多. ...

  5. SCI期刊名缩写查询的三种方法

    SCI期刊名缩写查询的三种方法 在参考文献中,常会用到期刊的缩写名,这里介绍三种用于查询SCI期刊名缩写的方法,便于查询各个期刊的缩写. 1.方法一 进入justscience查询, https:// ...

  6. mysql 数据查询优化_优化MySQL数据库查询的三种方法

    任何一位数据库程序员都会有这样的体会:高通信量的数据库驱动程序中,一条糟糕的SQL查询语句可对整个应用程序的运行产生严重的影响,其不仅消耗掉更多的数据库时间,且它将对其他应用组件产生影响. 如同其它学 ...

  7. MySQL模糊查询的三种方式

    文章目录 一.Mybatis常用模糊查询方法 1.使用concat("%",#{name},"%") 2.使用'%${name}%' 3.使用"%&q ...

  8. SQL实现模糊查询的几种方法总结

    模糊查询是针对字符串操作的,类似正则表达式,没有正则表达式强大. 一.一般模糊查询 1. 单条件查询 //查询所有姓名包含"张"的记录 select * from student ...

  9. html实现模糊查询,用js实现模糊查询的几种方法

    今天在做项目的时候,遇到一个需求是对列表进行模糊查询.对于模糊查询,一般都是传关键字给后端,由后端来做.但是有时候一些轻量级的列表前端来做可以减少ajax请求,在一定程度上提高用户体验.我目前的情况恰 ...

最新文章

  1. 微软850位顶级人才不做Windows研发
  2. vue main.js 导入文件报错Module build failed: Error: No PostCSS Config found in:
  3. TCP/IP协议簇分层详解---转
  4. 由一个小库存软件想到的
  5. zzuliOJ【土豪婷婷请吃饭】【解法:Java二维数组】
  6. 【详解】Java语言的特点以及Java语言与C/C++的比较
  7. 2019-02-26-算法-进化(回文数)
  8. leetcode738. 单调递增的数字(贪心)
  9. tensorflow 指定cpu 但是还会运行 gpu_PyTorch VS TensorFlow 谁最强?这是标星 15000+ Transformers 库的运行结果...
  10. Simple IOCP Server代码解读
  11. [Swift]LeetCode268. 缺失数字 | Missing Number
  12. CPython 标准库源码分析 collections.Counter
  13. Servlet-请求匹配,创建Servlet的三种方式,API 1
  14. Flash游戏抓取,flash网站抓取,flash网站下载工具
  15. 【Unity】添加 Device Simulator功能
  16. 输入两个电阻的值a和b,求它们并联和串联的电阻值。求并联电阻公式:a*b/(a+b),求串联的公式为:a+b。
  17. 直播预告 | 猪齿鱼V1.1发布,线上新功能详解邀您参加
  18. 【遥控器开发基础教程1】疯壳·开源编队无人机-GPIO(遥控器指示灯控制)
  19. pdf是图片还是文档
  20. Beyond Compare 4 远程对比

热门文章

  1. 想开水果店但是没有经验,想开水果店没有经验怎么办
  2. 开关电源波纹的产生、测量及抑制,一篇全搞定!
  3. x-editable行内编辑
  4. 明翰经验系列之恋爱篇V5.6(持续更新)
  5. python实验猜数游戏
  6. 工作台(CCS10.4)使用向导
  7. 【ZYNQ实战】利用AXI Quad SPI快速打通Linux至PL端SPI从设备
  8. 使用Py2neo连接Neo4j失败解决方案/Py2neo安装
  9. android网络电话源码
  10. 软件定义数据中心(SDDC)的网络安全