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

public interface StudentDao { 
    /** 
     * 前台的表单给出的查询条件不能封装成一个对象的时候 
     * 查询只能是多个参数了! 也就是参数不全是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>

 

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

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/12148.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论