zoukankan      html  css  js  c++  java
  • Mybatais05 多条件的查询

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

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

    复制代码
    public interface StudentDao {
        /**
         * 前台的表单给出的查询条件不能封装成一个对象的时候
         * 查询只能是多个参数了! 也就是参数不全是Student中的属性!
         * 这时候就有三个解决方案
         *  03.第三种方式    使用@Param
    */ List<Student> selectStudentsByNameAndAge(@Param("name)String name, @Param("age")int age); }
    复制代码
    复制代码
    <?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">
        <!-- #{name} 和 #{age} 存放的是参数列表的@Param的值 -->
        <select id="selectStudentsByNameAndAge" resultType="Student">
         select id,name,age from student 
         where name like '%' #{name} '%'
         and age > #{age}
        </select> 
        
        <!-- 
           小结:#{}中可以存放什么内容
           01.参数对象的属性
           02.任意内容,此时的#{}只是一个占位符
           03.map的key
           04.如果key所对应的value是对象,则存放的是对象的属性
           05.参数的索引号!从0开始
         -->
    </mapper>
  • 相关阅读:
    20135202闫佳歆-第二章家庭作业-2.69
    20135202闫佳歆——信息安全系统设计基础第六周学习总结
    20135202闫佳歆——信息安全系统设计基础第五周学习总结
    20135202闫佳歆——信息安全系统设计基础第四周学习总结
    20135202闫佳歆-信息安全系统设计基础第三周学习总结
    20135202闫佳歆——信息安全系统设计基础第二周学习总结
    php txt操作
    phpexcel 导入导出
    windows mysqldump 不成功 1049 1064 报错
    钉钉 移动端免登录 dd.ready不运行或者一直运行
  • 原文地址:https://www.cnblogs.com/kaisadadi/p/7612284.html
Copyright © 2011-2022 走看看