zoukankan      html  css  js  c++  java
  • MyBatis(五)动态SQL 之 批量操作(查询)

    一、批量操作——查询

      在实际工作,我们需要根据情况进行批量查询,批量查询,可以全部查询出来,也可以根据其他查询查询出来。

      1、查询全部的数据

        (1)在接口中声明方法

    //查询所有对象,返回 list 集合
    public List<Employee> getAllEmps();

        (2)在对应的 xml 中配置

        <!--
           public List<Employee> getAllEmps();
           resultType:如果返回的是一个集合,要写集合中元素的类型
           指定集合中存放的类型,有多个数据,会自动转换为要返回的类型
        -->
        <select id="getAllEmps" resultType="com.njf.mybatis.bean.Employee">
            select id, last_name lastName, email, gender from tbl_employee
        </select>

      2、根据指定条件批量查询

        (1)在接口中声明方法

    //根据指定的id来查询
    public List<Employee> getEmpsByIds(@Param("ids")List<Integer> ids);

        (2)在对应的 xml 中配置

        <!--
            //根据指定的id来查询
            public List<Employee> getEmpsByIds(@Param("ids")List<Integer> ids);
        -->
        <!--
            方式一:select * from tbl_employee where id in (1,2,3);
        -->
        <select id="getEmpsByIds" resultType="Employee" databaseId="oracle">
            select * from tbl_employee
            <foreach collection="ids" item="item" open="where id in(" close=")" separator=",">
                #{item}
            </foreach>
        </select>
    
        <!--
            方式二:select * from tbl_employee where id = 1 or id = 2 or id = 3
        -->
        <select id="getEmpsByIds" resultType="Employee">
            select * from tbl_employee
            <foreach collection="ids" item="item" open="where" separator="or">
                id = #{item}
            </foreach>
        </select>

      3、根据多条件查询

        (1)在接口中声明方法

    //根据多条件查询
    public List<Employee> getEmpsByCondition(Employee employee);

        (2)在对应的 xml 中配置

       <!--
            public List<Employee> getEmpsByCondition(Employee employee);
        -->
        <select id="getEmpsByCondition" resultType="Employee">
            select * from tbl_employee
            <where>
                <if test="id!=null">
                    id=#{id}
                </if>
                <if test="lastName!=null and lastName!=''">
                    and last_name like #{lastName}
                </if>
                <if test="email!=null and email.trim()!=&quot;&quot;">
                    and email = #{email}
                </if>
                <if test="gender!=null and gender==0 or gender==1">
                    and gender = #{gender}
                </if>
            </where>
        </select>

      测试:

         @Test
         public void testBatchSelect() throws IOException {
              //1、获取 sqlSessionFactory
              SqlSessionFactory sqlSessionFactory = getsqlSessionFactory();
              //2、获取 sqlSession 实例,能直接执行已经映射的 SQL 语句
              SqlSession sqlSession = sqlSessionFactory.openSession();
              try {
                   EmployeeMapperBatch mapper = sqlSession.getMapper(EmployeeMapperBatch.class);
    
                   List<Employee> emps = new ArrayList<>();
    
                   //查询所有的员工信息
                   emps = mapper.getAllEmps();
    
                   //根据指定的id来查询
                   emps = mapper.getEmpsByIds(Arrays.asList(1, 3));
    
                   //多条件查询
                   emps = mapper.getEmpsByCondition(new Employee(null, "%o%", null, null));
    
                   emps.forEach(System.out::println);
              } finally {
                   sqlSession.close();
              }
         }
  • 相关阅读:
    error: expected unqualified-id extern "C" {
    cmake交叉编译android(转)
    wwindows文件放入linux后多出换行符
    JNI 引用问题梳理(转)
    OpenCV实现任意大小图片的合并(转)
    android camera preview常用格式
    Linux下找不到动态链接库(转)
    ld链接器的工作原理及链接顺序(转)
    添加静态库入动态库时,符号查找不到的问题
    如何捕获 System.loadLibrary 产生的异常?(转)
  • 原文地址:https://www.cnblogs.com/niujifei/p/15242434.html
Copyright © 2011-2022 走看看