mybatis动态sql使用:choose分支选择

 时间:2026-02-16 10:50:26

1、我们的业务是如果带了id就用id查,如果带了lastName就用lastName查,只会进入进入一个查询。在DAO中顶一个方法:

package com.gwolf.dao;

import java.util.Map;

import org.apache.ibatis.annotations.MapKey;

import com.gwolf.bean.Employee;

public interface EmployeeMapper {

        

        

        public List<Employee> getEmpsByConditionChoose(Employee employee);

        

}

mybatis动态sql使用:choose分支选择

2、在xml中定义choose的sql语句定义。

<select id="getEmpsByConditionChoose" resultMap="MyEmpByStep" databaseId="mysql">

        select *

        from tbl_emp 

                <where>

                        <choose>

                                <when test="empId!=null">

                                        emp_id = #{empId}

                                </when>

                                

                                <when test="empName!=null">

                                        emp_name = #{empName}

                                </when>

                        </choose>

                </where>

mybatis动态sql使用:choose分支选择

3、编写junit单元测试方法:

@Test

        public void test1() throws Exception {

                String resource = "mybatis-config.xml";

                InputStream inputStream = Resources.getResourceAsStream(resource);

                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

                

                SqlSession sqlSession = sqlSessionFactory.openSession();

                

                try {

                        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

                        

                        Employee employee = new Employee();

                        employee.setEmpId(1);

                        

                        List<Employee> employees = employeeMapper.getEmpsByConditionChoose(employee);

                        System.out.println(employees);

                }finally {

                        sqlSession.close();

                }

        }

mybatis动态sql使用:choose分支选择

4、当我们只根据员工id查询的时候,我们的sql只会查询出员工的where子句,运行单元结果,查看控制台sql语句

mybatis动态sql使用:choose分支选择

5、编写根据员工和姓名查询的junit单元测试方法:

        @Test

        public void test1() throws Exception {

                String resource = "mybatis-config.xml";

                InputStream inputStream = Resources.getResourceAsStream(resource);

                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

                

                SqlSession sqlSession = sqlSessionFactory.openSession();

                

                try {

                        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

                        

                        Employee employee = new Employee();

                        employee.setEmpId(1);

                        employee.setEmpName("曹");

                        

                        List<Employee> employees = employeeMapper.getEmpsByConditionChoose(employee);

                        System.out.println(employees);

                }finally {

                        sqlSession.close();

                }

        }

mybatis动态sql使用:choose分支选择

6、当我们查询条件员工id和员工姓名的时候,我们的sql也只会查询出员工的where子句,运行单元测试,查看后台sql语句打印结果。

mybatis动态sql使用:choose分支选择

  • 云上城之歌瞬杀者技能点怎么加
  • 美味的红烧鹿肉
  • 山椒炒牛柳的做法
  • 妻子分娩前老公需要做的工作
  • 招聘海报模板怎么写
  • 热门搜索
    日本东京旅游攻略 贵州省旅游地图 长春旅游景点大全 张家界凤凰旅游 旅游咨询 乌海旅游 丽江恢复旅游营业 乐途旅游 珠海 旅游 珠海旅游景点大全