1. public interface StudentDao {
  2. /**
  3. * 前台的表单给出的查询条件不能封装成一个对象的时候
  4. * 查询只能是多个参数了! 也就是参数不全是Student中的属性!
  5. * 这时候就有两个解决方案
  6. * 01.第一种方式 使用map查询姓名带小 年龄大于10 的学生信息
  1. */ List<Student> selectStudentsByNameAndAge(Map<String, Object> map); }

先从前台的测试开始写

  1. public class StudentTest {
  2. StudentDao dao;
  3. SqlSession session;
  4.  
  5. @Before
  6. public void before() {
  7. // 因为需要关闭session 需要把session提取出去
  8. session = SessionUtil.getSession();
  9. dao = session.getMapper(StudentDao.class);
  10. }
  11.  
  12. @After
  13. public void after() {
  14. if (session != null) {
  15. session.close();
  16. }
  17. }
  18.  
  19. // 01.查询姓名带 小 年龄大于10 的学生信息
  20. @Test
  21. public void test() {
  22. Map<String,Object> map=new HashMap<String, Object>();
  23. map.put("StuName", "小");
  24. map.put("StuAge", 10);
  25. List<Student> list = dao.selectStudentsByNameAndAge(map);
  26. for (Student student : list) {
  27. System.out.println(student);
  28. }
  29. }
  30.  
  31. }

那么xml文件的配置如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-Mapper.dtd">
  5. <mapper namespace="cn.bdqn.dao.StudentDao">
  6. <!-- id要和dao的方法名相同
  7. #{值} 必须和前台map中的key一致!否则会报错-->
  8.  
  9. <select id="selectStudentsByNameAndAge" resultType="Student">
  10. select id,name,age from student
  11. where name like '%' #{StuName} '%'
  12. and age > #{StuAge}
  13. </select>
  14.  
  15. </mapper>

之后运行测试类代码即可!

现在又多了一个需求!查询姓名带 小 年龄大于10 ,并且编号大于 小黑 的学生信息

修改测试类代码

  1. // 02.查询姓名带 小 年龄大于10 并且编号大于 小黑 的学生信息
  2. @Test
  3. public void test2() {
  4. //创建小黑 对象
  5. Student stu=new Student(16, "小黑", 30);
  6.  
  7. Map<String,Object> map=new HashMap<String, Object>();
  8. map.put("StuName", "小");
  9. map.put("StuAge", 10);
  10. //增加对象到map中
  11. map.put("stu", stu);
  12. List<Student> list = dao.selectStudentsByNameAndAge(map);
  13. for (Student student : list) {
  14. System.out.println(student);
  15. }
  16. }

修改xml文件中的内容

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-Mapper.dtd">
  5. <mapper namespace="cn.bdqn.dao.StudentDao">
  6. <!-- id要和dao的方法名相同
  7. #{值} 必须和前台map中的key一致!否则会报错-->
  8.  
  9. <select id="selectStudentsByNameAndAge" resultType="Student">
  10. select id,name,age from student
  11. where name like '%' #{StuName} '%'
  12. and age > #{StuAge}
  13. <!-- 关键是#{}里面必须是写 对象名.属性 -->
  14. and id >#{stu.id}
  15. </select>
  16.  
  17. </mapper>

运行测试代码 即可得到结果!

第二种方式 使用索引的方式来解决 多个参数的问题

  1. public interface StudentDao {
  2. /**
  3. * 前台的表单给出的查询条件不能封装成一个对象的时候
  4. * 查询只能是多个参数了! 也就是参数不全是Student中的属性!
  5. * 这时候就有两个解决方案
  6. * 02.使用多个参数查询姓名有小 年龄大于10的学生信息
  7. */
  8.  
  9. //
  10. List<Student> selectStudentsByNameAndAge(String name, int age);
  11. }

测试类中的代码如下

  1. // 03.查询姓名带 小 年龄大于10 的学生信息
  2. @Test
  3. public void test2() {
  4. List<Student> list = dao.selectStudentsByNameAndAge("小",10);
  5. for (Student student : list) {
  6. System.out.println(student);
  7. }
  8. }

xml文件中的内容如下

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-Mapper.dtd">
  5. <mapper namespace="cn.bdqn.dao.StudentDao">
  6. <!-- #{0} 和 #{1} 存放的是参数列表的位置 -->
  7. <select id="selectStudentsByNameAndAge" resultType="Student">
  8. select id,name,age from student
  9. where name like '%' #{0} '%'
  10. and age > #{1}
  11. </select>
  12.  
  13. <!--
  14. 小结:#{}中可以存放什么内容
  15. 01.参数对象的属性
  16. 02.任意内容,此时的#{}只是一个占位符
  17. 03.map的key
  18. 04.如果key所对应的value是对象,则存放的是对象的属性
  19. 05.参数的索引号!从0开始
  20. -->
  21. </mapper>

运行测试代码即可得到结果!

mybatis05--多条件的查询的更多相关文章

  1. asp.net mvc多条件+分页查询解决方案

    开发环境vs2010 css:bootstrap js:jquery bootstrap paginator 原先只是想做个mvc的分页,但是一般的数据展现都需要检索条件,而且是多个条件,所以就变成了 ...

  2. JSP+Servlet+javabean+oracle实现页面多条件模糊查询

    之前写过一篇JSP+Servlet+javabean+mysql实现页面多条件模糊查询 使用的是mysql进行的分页查询,mysql用limit控制,而oracle则是用rownum,今天第一次写or ...

  3. 【java】spring-data-jpa 集成hibernate实现多条件分页查询

    初次接触spring-data-jpa,实现多条件分页查询. 基础环境 Spring Boot+spring-data-jpa+hibernate+mysql 1.接口 要继承这个接口,这个接口提供了 ...

  4. HBase多条件筛选查询方案

    最近的项目需要使用Hbase做实时查询,由于Hbase只支持一级索引,也就是使用rowkey作为索引查询,所以对于多条件筛选查询的支持不够,在不建立二级索引的情况下,只能使用Hbase API中提供的 ...

  5. SQL中以count及sum为条件的查询

    在开发时,我们经常会遇到以“累计(count)”或是“累加(sum)”为条件的查询.比如user_num表: id user num 1 a 3 2 a 4 3 b 5 4 b 7   例1:查询出现 ...

  6. asp下实现多条件模糊查询SQL语句

    常写一个简单的模糊查询的SQL语句格式可以如下例: sql="select * from 表名 where 字段名 like ’%" & request.form(&quo ...

  7. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架 ...

  8. 使用ArcGIS API for Silverlight 进行复合多条件空间查询

    原文:使用ArcGIS API for Silverlight 进行复合多条件空间查询 这两天帮网上认识的一个兄弟做了一个查询的示例,多多少少总结一下,在此和大家分享. 为什么说是复合多条件呢?因为进 ...

  9. 实现多条件模糊查询SQL语句

    很多网友问到如何写模糊查询语句和多条件查询,这里我整理了一下,假设以姓名.性别.电话号...作为数据库中的字段名. 通常写一个简单的模糊查询的SQL语句格式可以如下例: sql="selec ...

  10. mysql 索引学习--多条件等值查询,顺序不同也能应用联合索引啦

    以前学习这一块的时候,是说:假设建立了联合索引a+b,那么查询语句也一定要是这个顺序才能应用该索引. 那么实际是怎样呢,经过mysql这么多次版本升级,相信mysql已经给我们做了某些优化. 下面是我 ...

随机推荐

  1. .NET上传大文件时提示Maximum request length exceeded错误的解决方法

    使用IIS托管应用程序时,当我们需要上传大文件(4MB以上)时,应用程序会提示Maximum request length exceeded的错误信息.该错误信息的翻译:超过最大请求长度. 解决方法: ...

  2. MyBatis(四):mybatis中使用in查询时的注意事项

    准备工作 1)创建测试表jobitem CREATE TABLE "jobitem" ( "id" ) NOT NULL AUTO_INCREMENT COMM ...

  3. Spring 拦截器postHandle无法修改Response的原因

    如果controller跳转至页面,postHandle是没问题的. 如果@ResponseBody注释 或者返回 ResponseEntity,在postHandle拦截器中修改请求头,是无效的. ...

  4. Android设置屏幕旋转后保存数据

    1.onCreate()方法中最后判断需要保存的状态值 if(savedInstanceState != null){ mCurrentIndex = savedInstanceState.getIn ...

  5. 【Storm】Storm实战之频繁二项集挖掘(附源码)

    一.前言 针对大叔据实时处理的入门,除了使用WordCount示例之外,还需要相对更深入点的示例来理解Storm,因此,本篇博文利用Storm实现了频繁项集挖掘的案例,以方便更好的入门Storm. 二 ...

  6. 海康威视(iOS集成)

    一.注意事项 1.在开发海康威视的SimpleDemo时,最好使用真机,因为海康提供的5个库不支持模拟的i386架构. 2.在XCode9.3版本上运行SimpleDemo时,对.mm文件进行编辑时, ...

  7. Android 实现登录界面和功能实例

    近期一个android小程序须要登录功能,我简单实现了一下.如今记录下来也当做个笔记,同一时候也希望能够相互学习.所以,假设我的代码有问题,还各位请提出来.多谢了! 以下.就简述一下此实例的主要内容: ...

  8. 系统管理员需知的 16 个 iptables 使用技巧

    现代 Linux 内核带有一个叫 Netfilter[1] 的数据包过滤框架.Netfilter 提供了允许.丢弃以及修改等操作来控制进出系统的流量数据包.基于 Netfilter 框架的用户层命令行 ...

  9. Effective Java 第三版——71. 避免不必要地使用检查异常

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

  10. Chrome 控制台报错Unchecked runtime.lastError: The message port closed before a response was received

    Chrome浏览器控制台报错提示 Unchecked runtime.lastError: The message port closed before a response was received ...