zoukankan      html  css  js  c++  java
  • 常见的数据库函数,关键字整理

    ParameterType与resultType与resultMap的区别

    ParameterType(是对传入参数的设置)

    传入的参数设置,单个参数直接指明类型即可

    多个参数mapper文件用@Param(“name”)指明 parameterType属性可以省略

    resultType和resultMap(对结果集的映射)

    resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用(可以自己定义返回类型的字段数量)

    1. 提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
    2. 当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

    当ResultMap中需要引入对象,或要进行子查询时

    <resultMap type="Comment" id="CommentResult">
    <association property="blog" select="selectBlog" column="blog" javaType="Blog"/>
    </resultMap>
    
    <select id="selectComment" parameterType="int" resultMap="CommentResult">
    select * from t_Comment where id = #{id}
    </select>
    
    <select id="selectBlog" parameterType="int" resultType="Blog">
    select * from t_Blog where id = #{id}
    </select>

    collection和association的使用区别

    association是用于一对一和多对一,而collection是用于一对多的关系

    1. 关联-association
    2. 集合-collection

    一对一代码如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.glj.mapper.PersonMapper">
        <resultMap type="com.glj.poji.Person" id="personMapper">
            <id property="id" column="id"/>
            <result property="name" column="name"/>
            <result property="sex" column="sex"/>
            <result property="age" column="age"/>
            <association property="card" column="card_id" 
                select="com.glj.mapper.CardMapper.selectCardById"
                javaType="com.glj.poji.Card">
            </association>
        </resultMap>
        <select id="selectPersonById" parameterType="int" resultMap="personMapper">
            select * from tb_person where id = #{id}
        </select>
    </mapper>

    一对多用collection多对一关系,所以使用了关联-association

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.glj.mapper.StudentMapper">
        <select id="selectStudentById" parameterType="int" resultMap="studentResultMap">
            select * from tb_clazz c,tb_student s where c.id = s.id and s.id = #{id}
        </select>
        <select id="selectStudentByClazzId" parameterType="int" resultMap="studentResultMap">
            select * from tb_student where clazz_id = #{id}
        </select>
        <resultMap type="com.glj.pojo.Student" id="studentResultMap">
            <id property="id" column="id"/>
            <result property="name" column="name"/>
            <result property="sex" column="sex"/>
            <result property="age" column="age"/>
            <association property="clazz" javaType="com.glj.pojo.Clazz">
                <id property="id" column="id"/>
                <result property="code" column="code"/>
                <result property="name" column="name"/>
            </association>
        </resultMap>
    </mapper>

    javaType和ofType的区别

    JavaTypeofType都是用来指定对象类型的,但是JavaType是用来指定pojo中属性的类型,而ofType指定的是映射到list集合属性中pojo的类型

    <resultMap type="User" id="resultUserMap">
             <result property="id" javaType="int" column="user_id" />
             <result property="username" javaType="string" column="username" />
             <result property="mobile"  column="mobile" />
                            <!--javatype指定的是user对象的属性的类型(例如id,posts),而oftype指定的是映射到list集合属性中pojo的类型(本例指的是post类型)-->
             <collection property="posts"  ofType="com.spenglu.Post"  javaType="java.util.ArrayList" column="userid">
                 <id property="id" column="post_id" javaType="int" jdbcType="INTEGER"/>   
                <result property="title" column="title" javaType="string" jdbcType="VARCHAR"/>
                <result property="content" column="content" javaType="string" jdbcType="VARCHAR"/>
             </collection>
        </resultMap>

    choose (when, otherwise)标签(相当于switch的用法)

    有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。而使用if标签时,只要test中的表达式为 true,就会执行 if 标签中的条件。MyBatis 提供了 choose 元素。if标签是与(and)的关系,而 choose 是或(or)的关系。

    choose标签是按顺序判断其内部when标签中的test条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的sql。类似于Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。

    when元素表示当 when 中的条件满足的时候就输出其中的内容,跟 JAVA 中的 switch 效果差不多的是按照条件的顺序,当 when 中有条件满足的时候,就会跳出 choose,即所有的 when 和 otherwise 条件中,只有一个会输出,当所有的我很条件都不满足的时候就输出 otherwise 中的内容。

  • 相关阅读:
    在Oracle的FORM中高亮显示鼠标点击或光标所在的行
    Attempt to refer to a unregistered pool by its alias 'MySQL'
    C#中手机号验证,邮箱验证
    Caused by: java.lang.ClassNotFoundException:org.apache.commons.logging.LogFactory
    org.apache.jasper.JasperException: /existingstudent.jsp(4,4) Invalid directive
    C#中使用cookies
    【old】简单易用的鹰眼类源代码下载
    MapGuide Tips如何限制MapGuide Ajax Viewer的缩放范围
    MapGuide应用开发系列(八)MapGuide Studio准备地图之地图(Map)
    基于MapGuide的在线WebGIS站点介绍
  • 原文地址:https://www.cnblogs.com/lmqblogs/p/10750633.html
Copyright © 2011-2022 走看看