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> 
</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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM