zoukankan      html  css  js  c++  java
  • 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>

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

  • 相关阅读:
    线段树 hdu3255 Farming
    3.CCFadeOutTRTiles,部落格效果,跳动的方块特效,3D瓷砖晃动特效,破碎的3D瓷砖特效,瓷砖洗牌特效,分多行消失特效,分多列消失特效
    分析:新建短信,当我们接受人RecipientsEditor中输入+86的时候,系统会自己主动在+86后增加空格
    【POJ3377】Ferry Lanes 最短路
    Please ensure that adb is correctly located at &#39;D:Androidandroid-sdkplatform-toolsadb.exe&#39; and
    Objective-C
    分布式高维空间近邻搜索项目开发
    我的改进版2048(2)
    github关联域名,创建个人站点教程终结篇
    数据结构(6)二叉树
  • 原文地址:https://www.cnblogs.com/xtdxs/p/7094952.html
Copyright © 2011-2022 走看看