Mybatis多条件查询

dao接口:

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>

还可以使用注解@param传入多个参数的方式:

public interface StudentDao {
    /**
     * 前台的表单给出的查询条件不能封装成一个对象的时候
     * 查询只能是多个参数了! 也就是参数不全是Student中的属性!
     * 这时候就有三个解决方案
     *  03.第三种方式    使用@Param
*/ List<Student> selectStudentsByNameAndAge(@Param("name)String name, @Param("age")int age); }

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">
    <!-- #{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>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值