zoukankan      html  css  js  c++  java
  • MyBatis的SQL语句映射文件详解

    SQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace,一般定义为对应的接口类的路径。写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用

    <mapper namespace="com.mybaits.bean.User">
        <!-- 将结果集转化成对象 -->
        <resultMap type="" id=""></resultMap>
        
        <!-- 配置缓存 -->
        <cache></cache>
        
        <!-- 引用其他模式中的缓存 -->
        <cache-ref namespace=""/>
        
        <!--可以被其他SQL语句复用的SQL块  -->
        <sql id=""></sql>
        
        <!-- CRUD操作语句 -->
        <insert id=""></insert>
        <select id=""></select>
        <update id=""></update>
        <delete id=""></delete>
    </mapper>
    <resultMap type="" id=""></resultMap>

    resultMap 是MyBatis 中最重要最强大的元素了。你可以让你比使用JDBC 调用结果集省掉90%的代码,也可以让你做许多JDBC 不支持的事。现实上,要写一个等同类似于交互的映射这样的复杂语句,
    可能要上千行的代码。ResultMaps 的目的,就是这样简单的语句而不需要多余的结果映射,更多复杂的语句,除了只要一些绝对必须的语句描述关系以外,再也不需要其它的。
    resultMap属性:type为java实体类;id为此resultMap的标识。

    resultMap 元素的概念

              1. constructor – 用来将结果反射给一个实例化好的类的构造器

      a) idArg – ID 参数;将结果集标记为ID,以方便全局调用
      b) arg –反射到构造器的通常结果
    2. id – ID 结果,将结果集标记为ID,以方便全局调用
    3. result – 反射到JavaBean 属性的普通结果
    4. association – 复杂类型的结合;多个结果合成的类型

    5. collection –复杂类型集合a collection of complex types
    6. discriminator – 使用一个结果值以决定使用哪个resultMap

      a) case – 基本一些值的结果映射的case 情形

    一个case 情形本身就是一个结果映射,因此也可以包括一些相同的元素,也可以引用一个外部resultMap。

      id,result详解

        id、result是最简单的映射,id为主键映射;result其他基本数据库表字段到实体类属性的映射。

            <resultMap type="com.mybaits.bean.User" id="userResult">
                <id property="id" column="id" />
                <result property="username" column="username"/>
                <result property="usernumber" column="usernumber"/>
                <result property="loginname" column="loginname"/>
                <result property="loginpassword" column="loginpassword"/>
                <result property="sex" column="sex"/>
                <result property="birthday" column="birthday" />
            </resultMap>

    id、result语句属性配置细节:

    属性

    描述

    property

    需要映射到JavaBean 的属性名称。

    column

    数据表的列名或者标签别名。

    javaType

    一个完整的类名,或者是一个类型别名。如果你匹配的是一个JavaBean,那MyBatis 通常会自行检测到。然后,如果你是要映射到一个HashMap,那你需要指定javaType 要达到的目的。

    jdbcType

    数据表支持的类型列表。这个属性只在insert,update 或delete 的时候针对允许空的列有用。JDBC 需要这项,但MyBatis 不需要。如果你是直接针对JDBC 编码,且有允许空的列,而你要指定这项。

    typeHandler

    使用这个属性可以覆写类型处理器。这项值可以是一个完整的类名,也可以是一个类型别名。

    constructor

    我们使用id、result时候,需要定义java实体类的属性映射到数据库表的字段上。这个时候是使用JavaBean实现的。当然我们也可以使用实体类的

    构造方法来实现值的映射,这个时候是通过构造方法参数的书写的顺序来进行赋值的。

    上面使用id、result实现的功能就可以改为:

    <resultMap type="com.mybaits.bean.User" id="userResult">
            <!--  
                <id property="id" column="id" />
                <result property="username" column="username"/>
                <result property="usernumber" column="usernumber"/>
                <result property="loginname" column="loginname"/>
                <result property="loginpassword" column="loginpassword"/>
                <result property="sex" column="sex"/>
                <result property="birthday" column="birthday" />
            -->
                <constructor>
                        <idArg javaType="Integer" column="id"/>
                        <arg javaType="String" column="username"/>            
                        <arg javaType="String" column="usernumber"/>
                        <arg javaType="String" column="loginname"/>
                        <arg javaType="String" column="loginpassword"/>
                        <arg javaType="String" column="sex"/>
                        <arg javaType="Date" column="birthday"/>                
                </constructor>
            </resultMap>
        

    需定义User实体类的构造方法

    public User(Integer id,String username, String usernumber, String loginname,
                    String loginpassword, String sex,Date birthday) {
                this.username = username;
                this.usernumber = usernumber;
                this.loginname = loginname;
                this.loginpassword = loginpassword;
                this.sex = sex;
                this.birthday=birthday;
            }

     association联合

         联合元素用来处理“一对一”的关系。需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别)。对应的数据库表的列名称。如果想覆写的话返回结果的值,需要指定typeHandler。
    不同情况需要告诉MyBatis 如何加载一个联合。

    collection聚集

         聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;
    不同情况需要告诉MyBatis 如何加载一个聚集。

        对于实体间联系,在后续中会有具体解释。

    discriminator鉴别器

       有时一个单独的数据库查询也许返回很多不同(但是希望有些关联)数据类型的结果集。鉴别器元素就是被设计来处理这个情况的,还有包括类的继承层次结构。鉴别器非常容易理解,因为它的表现很像Java语言中的switch语句。

     

  • 相关阅读:
    6-4.粗体标签
    [Unity3D] 如何实现点击按钮退出游戏
    [Unity3D] 载入游戏地图时背景图片随机切换 & 数字百分比进度条
    [Unity3D] 鼠标点击图片移动效果
    [3DMAX]如何将骨骼与模型绑定在一起(蒙皮) & 如何实现自动化人物模型蒙皮
    [Unity 3D]用鼠标滚轮实现镜头放大和缩放,并添加距离限制
    [Unity3D] 如何实现围绕旋转
    [Unity3D] 如何实现注视旋转
    Css 图片自适应
    Scss 定义内层class的简单写法
  • 原文地址:https://www.cnblogs.com/nww57/p/4689993.html
Copyright © 2011-2022 走看看