zl程序教程

您现在的位置是:首页 >  其他

当前栏目

mybatis05–多条件的查询详解编程语言

编程语言 详解 查询 &# 条件 8211
2023-06-13 09:20:36 时间
* 前台的表单给出的查询条件不能封装成一个对象的时候 * 查询只能是多个参数了! 也就是参数不全是Student中的属性! * 这时候就有两个解决方案 * 01.第一种方式 使用map查询姓名带小 年龄大于10 的学生信息
*/ List Student selectStudentsByNameAndAge(Map String, Object map); }
复制代码

先从前台的测试开始写

public class StudentTest { 

 StudentDao dao; 

 SqlSession session; 

 @Before 

 public void before() { 

 // 因为需要关闭session 需要把session提取出去 

 session = SessionUtil.getSession(); 

 dao = session.getMapper(StudentDao.class); 

 @After 

 public void after() { 

 if (session != null) { 

 session.close(); 

 // 01.查询姓名带 小 年龄大于10 的学生信息 

 @Test 

 public void test() { 

 Map String,Object map=new HashMap String, Object 

 map.put("StuName", "小"); 

 map.put("StuAge", 10); 

 List Student list = dao.selectStudentsByNameAndAge(map); 

 for (Student student : list) { 

 System.out.println(student); 

}

那么xml文件的配置如下

 ?xml version="1.0" encoding="UTF-8"? 

 !DOCTYPE mapper 

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 

"http://mybatis.org/dtd/mybatis-3-Mapper.dtd" 

 mapper namespace="cn.bdqn.dao.StudentDao" 

 !-- id要和dao的方法名相同 

#{值} 必须和前台map中的key一致!否则会报错-- 

 select id="selectStudentsByNameAndAge" resultType="Student" 

 select id,name,age from student 

 where name like % #{StuName} % 

 and age #{StuAge} 

 /select 

 /mapper 

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

 

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

修改测试类代码

 // 02.查询姓名带 小 年龄大于10 并且编号大于 小黑 的学生信息 

 @Test 

 public void test2() { 

 //创建小黑 对象 

 Student stu=new Student(16, "小黑", 30); 

 Map String,Object map=new HashMap String, Object 

 map.put("StuName", "小"); 

 map.put("StuAge", 10); 

 //增加对象到map中 

 map.put("stu", stu); 

 List Student list = dao.selectStudentsByNameAndAge(map); 

 for (Student student : list) { 

 System.out.println(student); 

 }

修改xml文件中的内容

 ?xml version="1.0" encoding="UTF-8"? 

 !DOCTYPE mapper 

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 

"http://mybatis.org/dtd/mybatis-3-Mapper.dtd" 

 mapper namespace="cn.bdqn.dao.StudentDao" 

 !-- id要和dao的方法名相同 

#{值} 必须和前台map中的key一致!否则会报错-- 

 select id="selectStudentsByNameAndAge" resultType="Student" 

 select id,name,age from student 

 where name like % #{StuName} % 

 and age #{StuAge} 

 !-- 关键是#{}里面必须是写 对象名.属性 -- 

 and id #{stu.id} 

 /select 

 /mapper 

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

 

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

public interface StudentDao { 

 /** 

 * 前台的表单给出的查询条件不能封装成一个对象的时候 

 * 查询只能是多个参数了! 也就是参数不全是Student中的属性! 

 * 这时候就有两个解决方案 

 * 02.使用多个参数查询姓名有小 年龄大于10的学生信息 

 List Student selectStudentsByNameAndAge(String name, int age); 

}

 

测试类中的代码如下

// 03.查询姓名带 小 年龄大于10 的学生信息 

 @Test 

 public void test2() { 

 List Student list = dao.selectStudentsByNameAndAge("小",10); 

 for (Student student : list) { 

 System.out.println(student); 

 }

 

xml文件中的内容如下

 ?xml version="1.0" encoding="UTF-8"? 

 !DOCTYPE mapper 

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 

"http://mybatis.org/dtd/mybatis-3-Mapper.dtd" 

 mapper namespace="cn.bdqn.dao.StudentDao" 

 !-- #{0} 和 #{1} 存放的是参数列表的位置 -- 

 select id="selectStudentsByNameAndAge" resultType="Student" 

 select id,name,age from student 

 where name like % #{0} % 

 and age #{1} 

 /select 

 !-- 

 小结:#{}中可以存放什么内容 

 01.参数对象的属性 

 02.任意内容,此时的#{}只是一个占位符 

 03.map的key 

 04.如果key所对应的value是对象,则存放的是对象的属性 

 05.参数的索引号!从0开始 

 /mapper 

 

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

12148.html

cjavaxml