• 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>
    复制代码

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

  • 相关阅读:
    173. Binary Search Tree Iterator
    199. Binary Tree Right Side View
    230. Kth Smallest Element in a BST
    236. Lowest Common Ancestor of a Binary Tree
    337. House Robber III
    449. Serialize and Deserialize BST
    508. Most Frequent Subtree Sum
    513. Find Bottom Left Tree Value
    129. Sum Root to Leaf Numbers
    652. Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/HHR-SUN/p/7201399.html
Copyright © 2020-2023  润新知