MyBatis的XML文件(三)--结果集(ResultMap)--简单

来源:互联网 发布:js登录功能 编辑:程序博客网 时间:2024/05/16 08:09

Result Maps

  ResultMap元素是MyBatis中最重要最强大的元素,它就是让你远离90%的需要从结果集中取出数据的JDBC代码的那个东西,而且在一些情形下允许你做一些JDBC不支持的事情,事实上,编写相似于负载语句联合映射这些等同的代码,也许可以跨过上千行的代码,ResultMap 的设计 就是简单语句不需要明确的结果映射,而很多复杂语句确实需要描述它们的关系。
  你已经看到简单映射语句的示例了,但没有明确的resultMap 比如:

    <select id = "selectUsers" resultType="map">        SELECT id, username,hashedPassword        FROM some_table        WHERE id = #{id}    </select>

  这样一个语句简单作用于所有列被自动映射到HashMap的键上,这由resultType 属性指定,这在很多情况下是有用的,但是HashMap 不能很好描述一个领域模型,那样你的应用程序将会使用JavaBeansPOJOS(Plain Old Java Objects,普通Java对象)来作用领域模型,MyBatis对两者都支持,看看下面这个JavaBean:

    package com.someapp.model;    public class User {        private int id;        private String username;        private String hashedPassword;        public int getId() {            return id;        }        public void setId(int id) {            this.id = id;        }        public String getUsername() {            return username;        }        public void setUsername(String username) {            this.username = username;        }        public String getHashedPassword() {            return hashedPassword;        }        public void setHashedPassword(String hashedPassword) {            this.hashedPassword = hashedPassword;        }    }

  基于JavaBean的规范,上面这个类有3个属性:id,username和hashPassword,这些在select语句中会精确匹配到列名。
  这样的一个JavaBean可以被映射到结果集,就像映射到HashMapy一行简单。

    <select id = "selectUsers" resultType = "com.someapp.model.User>        SELECT id,username,hashedPassword        FROM some_table        WHERE id = #{id}    </select>

要记住类型别名是你的伙伴,使用它们你可以不用输入类的全路径。比如:

    <!-- In mybatis-config.xml file -->    <typeAlias type="com.someapp.model.User" alias="User"/>    <!-- In SQL Mapping XML file -->    <select id="selectUsers" resultType="User">        select id, username, hashedPassword        from some_table        where id = #{id}    </select>

这些情况下,MyBatis会在幕后自动创建一个ResultMap 基于属性名来映射列到javaBean的属性上,如果列名没有精确匹配,你可以在列名上使用select字句的别名(一个基本的SQL特性)来匹配标签。比如:

    <select id = "selectUsers" resultType = "User">        SELECT             user_id as "id",            user_name as "username",            hashed_password as "hashedPassword"        FROM some_table        WHERE id = #{id}    </select>

  ResultMap最优秀的地方你已经了解了很多,但是你还没有真正的看到一个,这些简单的示例不需要比你看到的更多东西,只是出于示例的原因,让我们来看看最后一个示例中外部的resultMap 是什么样子的,这也是解决列名不匹配的另外一种方式。

    <resultMap id = "userResultMap" type = "User">        <id property = "id" column = "user_id"/>        <result property = "username" cloumn = "user_name" />        <result propety = "password" cloumn = "password" />    </resultMap>

  引用它的语句使用resultMap 属性就行了(注意我们去掉了resultType属性)。比如:

    <select id = "selectUsers" resultMap = "userResultMap">        SELECT user_id,user_name,hashed_passowrd        FROM some_table        WHERE id = #{id}    </select>

如果世界总是这么简单就好了。

阅读全文
0 0
原创粉丝点击