StudentMapper接口中定义方法
StudentMapper配置文件进行相应的配置(这里没有写<otherwise>标签,接在<when>标签即可)
<select id="getStuByChoose" resultType="student"> select * from student <where> <!-- choose选择多种情况中的一种,多种情况符合时选择最前的一种 --> <choose> <when test="id!=null"> id = #{id} </when> <when test="name!=null && name.trim()!=''"> name = #{name} </when> </choose> </where> </select>
测试1(当只有name值时)
//测试动态sql的<choose><when><otherwise> @Test public void testGetStuByChoose() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); Student student = studentMapper.getStuByChoose(new Student(null, "小明")); System.out.println(student); sqlSession.close(); }
测试结果
测试2(当id和name都有值时)
//测试动态sql的<choose><when><otherwise> @Test public void testGetStuByChoose() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class); Student student = studentMapper.getStuByChoose(new Student(1, "小明")); System.out.println(student); sqlSession.close(); }
测试结果(因为在<when>中id在前,所以会根据id查询)