• 多行结果集映射成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中。

笔记:MyBatis 其他特性的更多相关文章

  1. Python:笔记(4)——高级特性

    Python:笔记(4)——高级特性 切片 取一个list或tuple的部分元素是非常常见的操作.Python提供了切片操作符,来完成部分元素的选取 除了上例简单的下标范围取元素外,Python还支持 ...

  2. TKmybatis的框架介绍和原理分析及Mybatis新特性

    tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效,下面来看看这个框架的基本使用,后面会对相关源码进行分析,感兴趣的同学可以看一下,挺不错的一个工具 实现对员工表的增删改查 ...

  3. TKmybatis的框架介绍和原理分析及Mybatis新特性演示

    tkmybatis是在mybatis框架的基础上提供了很多工具,让开发更加高效,下面来看看这个框架的基本使用,后面会对相关源码进行分析,感兴趣的同学可以看一下,挺不错的一个工具 实现对员工表的增删改查 ...

  4. 关于对MyBatis.net框架的学习笔记( MyBatis.net是一款灵活性极大,sql由开发者自行在xml中编写, 轻量的ORM映射框架). 同时避免了sql硬编码到代码中不易维护的问题...

    对于为什么要用ORM,为什么又要选择MyBatis.net,这个问题希望读者自行查找资料.这里直接贴出相关的调试笔记. 步骤1)下载与引用. http://code.google.com/p/myba ...

  5. AMQ学习笔记 - 12. Spring-JmsTemplate特性设置

    概述 这是关于JmsTemplate的最后一篇总结,且只会介绍几个比较重要的特性. 消息的递送模式 在发送消息给时,可以告知这是持久化的消息,还是非持久化的消息.如果是非持久化的消息,broker会将 ...

  6. C++笔记(仅C++特性,需C语言基础)

    C++复习笔记一(类的声明定义应用与构造函数析构函数部分)const在C语言中是"不能被改变值的变量",而在C++种子则是"一种有类型描述的常量",常量必须初始 ...

  7. 前端学习笔记 --ES6新特性

    前言 这篇博客是我在b站进行学习es6课程时的笔记总结与补充. 此处贴出up主的教程视频地址:深入解读ES6系列(全18讲) 1.ES6学习之路 1.1 ES6新特性 1. 变量 2. 函数 3. 数 ...

  8. 个人学习笔记--MyBatis官方推荐DAO开发方案

    1.导入Jar包 2.编写全局配置文件configuration.xml <?xml version="1.0" encoding="UTF-8" ?&g ...

  9. AngularJs学习笔记2——四大特性之MVC

    angularJs的四大特性 ①.采用MVC的设计模式 ②.双向数据绑定 ③.依赖注入 ④.模块化设计 现在细说一下MVC的设计模式: MVC: Model(模型)--项目中的数据 View(视图)- ...

随机推荐

  1. Jetty添加Filter过滤器

    1.Jetty嵌入到Spring项目 try { Server server = new Server(8080); WebAppContext context = new WebAppContext ...

  2. HttpClient调用RestFul接口(post和get方式)

    /** * @version V1.0 * @Description 调用http接口工具类 * @Author pc * @Date 2018/3/2 11:03 */public class Ht ...

  3. JS分号 惹的坑

    JS中会自动清除句子和句子之间的空格以及tab缩进, 这样就可以允许用户编写的代码更加随性和更加可读, 在该行代码解析的时候如果该行代码可以解析, 就会在该行代码最后自动填写分号,如果该行代码无法解析 ...

  4. 【转载】使用SDL播放YUV图像数据(转)

    SDL提供了针对YUV格式数据的直接写屏操作.废话不多说,直接上代码吧/** * file showyuv.c * author: rare * date: 2009/12/06 * email: d ...

  5. 最新的Android版本和API Level的对应关系表

    在项目开发过程中,经常会用到API Level和Android平台版本的对照,来进行一些方法的调用,现在就把对照表贴出来,供开发人员参考,并且方便自己查阅. Platform Version API ...

  6. AlarmManager(全局定时器/闹钟)详解

    AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟.指定时长或以周期形式执行某项操作.通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似.都有两种相似的 ...

  7. freemarker之数组

    freemarker之数组 1.设计思路 (1)声明一个数组 (2)打印数组中的元素 2.设计源码 <#--freemarker数组--> <#assign nums=[12,34, ...

  8. MyEclipse保存出现错误

    1.错误描述 Errors occurred during the build. Errors running builder 'JavaScript Validator' on project 'S ...

  9. pat1111-1120

    1111 比较麻烦的最短路 #include<cmath> #include<map> #include<iostream> #include<cstring ...

  10. python 字符串格式化输出 %d,%s及 format函数

    旧式格式化方式:%s,%d 1.顺序填入格式化内容 s = "hello %s, hello %d"%("world", 100) print(s) 结果: ' ...