zoukankan      html  css  js  c++  java
  • 笔记:MyBatis 其他特性

    • 多行结果集映射成Map

      如果你有一个映射语句返回多行记录,并且你想以HashMap的形式存储记录的值,使用记录列名作为key值,而记录对应值或为value值。我们可以使用sqlSession.selectMap(),如下所示:

      <select id=" findAllStudents" resultMap="StudentResult">

              select * from Students

      </select>

      Java代码:

      Map<Integer, Student> studentMap =

      sqlSession.selectMap("com.mybatis3.mappers.StudentMapper.findAllStudents", "studId");

      这里studentMap将会将studId作为key值,而Student对象作为value值。

    • 使用RowBounds对结果集进行分页

      有时候,我们会需要跟海量的数据打交道,比如一个有数百万条数据级别的表。由于计算机内存的现实我们不可能一次性加载这么多数据,我们可以获取到数据的一部分。特别是在Web应用程序中,分页机制被用来以一页一页的形式展示海量的数据。MyBatis可以使用RowBounds逐页加载表数据。RowBounds对象可以使用offset和limit参数来构建。参数offset表示开始位置,而limit表示要取的记录的数目。

      假设如果你想每页加载并显示25条学生的记录,你可以使用如下的代码:

      <select id="findAllStudents" resultMap="StudentResult">

              select * from Students

      </select>

      Java代码:

      int offset =0 , limit =25;

      RowBounds rowBounds = new RowBounds(offset, limit);

      List<Student> = studentMapper.getStudents(rowBounds);

      注意:该分页为逻辑分页,也就是先把数据记录全部查询出来,然后在再根据offset和limit截断记录返回

    • 使用ResultSetHandler自定义结果集ResultSet处理

      MyBatis在将查询结果集映射到JavaBean方面提供了很大的选择性。但是,有时候我们会遇到由于特定的目的,需要我们自己处理SQL查询结果的情况。MyBatis提供了ResultHandler插件形式允许我们以任何自己喜欢的方式处理结果集ResultSet。

      假设我们想从学生的stud_id被用作key,而name被用作value的HashMap中获取到student信息。

      对于sqlSession.select()方法,我们可以传递给它一个ResultHandler的实现,它会被调用来处理ResultSet的每一条记录。

      public interface ResultHandler

      {

              void handleResult(ResultContext context);

      }

      现在然我们来看一下怎么使用ResultHandler来处理结果集ResultSet,并返回自定义化的结果

      public Map<Integer, String> getStudentIdNameMap()

      {

              final Map<Integer, String> map = new HashMap<Integer, String>();

              SqlSession sqlSession = MyBatisUtil.openSession();

              try

              {

                      sqlSession.select("com.mybatis3.mappers.StudentMapper.findAllStudents", new ResultHandler()

                      {

                              @Override

                              public void handleResult(ResultContext context)

                              {

                                      Student student = (Student) context.getResultObject();

                                      map.put(student.getStudId(), student.getName());

                              }

                      } );

              }

              finally

              {

                      sqlSession.close();

              }

              return map;

      }

      在上述的代码中,我们提供了匿名内部ResultHandler实现类,在handleResult()方法中,我们使用context.getResultObject()获取当前的result对象,即Student对象,因为我们定义了findAllStudent映射语句的resultMap="studentResult"。对查询返回的每一行都会调用handleResult()方法,并且我们从Student对象中取出studId和name,将其放到map中。

  • 相关阅读:
    请求重定向,请求转发
    post、get方法乱码问题
    Servlet
    修改Servlet模板,让Servlet更清新
    Java-Python对垒之质数计算
    使用Packet Tracer对不同网段组网模拟
    哑编码的两种方法
    AdaBoost scikit-learn相关参数
    KNN scikit-learn相关参数
    递归思想的应用-根据二叉树的中序遍历和前序遍历重建二叉树
  • 原文地址:https://www.cnblogs.com/li3807/p/7061894.html
Copyright © 2011-2022 走看看