• mybatis 相关内容理解



    <mapper namespace="com.ruoyi.system.mapper.SysUserMapper">
    注意这个明明空间

    <id property="id" column="user_id" />
    <result property="username" column="user_name"/>
    一个用ID 一个用result 有什么区别

    id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能
    result – 注入到字段或 JavaBean 属性的普通结果
    id & result
    <id property="id" column="post_id"/>
    <result property="subject" column="post_subject"/>
    这些元素是结果映射的基础。id 和 result 元素都将一个列的值映射到一个简单数据类型(String, int, double, Date 等)的属性或字段。

    这两者之间的唯一不同是,id 元素对应的属性会被标记为对象的标识符,在比较对象实例时使用。 这样可以提高整体的性能,尤其是进行缓存和嵌套结果映射(也就是连接映射)的时候。

        <resultMap type="SysUser" id="SysUserResult">
            <id     property="userId"       column="user_id"      />
            <result property="deptId"       column="dept_id"      />
            <result property="userName"     column="user_name"    />
            <result property="nickName"     column="nick_name"    />
            <result property="email"        column="email"        />
            <result property="phonenumber"  column="phonenumber"  />
            <result property="sex"          column="sex"          />
            <result property="avatar"       column="avatar"       />
            <result property="password"     column="password"     />
            <result property="status"       column="status"       />
            <result property="delFlag"      column="del_flag"     />
            <result property="loginIp"      column="login_ip"     />
            <result property="loginDate"    column="login_date"   />
            <result property="createBy"     column="create_by"    />
            <result property="createTime"   column="create_time"  />
            <result property="updateBy"     column="update_by"    />
            <result property="updateTime"   column="update_time"  />
            <result property="remark"       column="remark"       />
            <association property="dept"    column="dept_id" javaType="SysDept" resultMap="deptResult" />
            <collection  property="roles"   javaType="java.util.List"        resultMap="RoleResult" />
        </resultMap>
        
        <resultMap id="deptResult" type="SysDept">
            <id     property="deptId"   column="dept_id"     />
            <result property="parentId" column="parent_id"   />
            <result property="deptName" column="dept_name"   />
            <result property="orderNum" column="order_num"   />
            <result property="leader"   column="leader"      />
            <result property="status"   column="dept_status" />
        </resultMap>
        
        <resultMap id="RoleResult" type="SysRole">
            <id     property="roleId"       column="role_id"        />
            <result property="roleName"     column="role_name"      />
            <result property="roleKey"      column="role_key"       />
            <result property="roleSort"     column="role_sort"      />
            <result property="dataScope"     column="data_scope"    />
            <result property="status"       column="role_status"    />
        </resultMap>


    association 表示关联
    association – 一个复杂类型的关联;许多结果将包装成这种类型
    嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用

    collection 表示数据集合 

    ofType="Post" 这个可以简写部分类容


    collection – 一个复杂类型的集合
    嵌套结果映射 – 集合可以是 resultMap 元素,或是对其它结果映射的引用

    discriminator – 使用结果值来决定使用哪个 resultMap
    case – 基于某些值的结果映射
    嵌套结果映射 – case 也是一个结果映射,因此具有相同的结构和元素;或者引用其它的结果映射

    xml文件中
    select 标识会映射sql中的select查询语句

    insert 标识会映射sql总的insert命令语句

    update 标识会映射sql总的update命令语句

    delete 标识会映射sql总的delete命令语句

    增删改返回的都是int 类型,无需返回接收类型

    parameterType 表示要传的参数类型
    resultMap 表示返回的结果数据集

    id="DaProtocolResult" 查询的结果集复用 使用 resultMap 接受

    resultMap="DaProtocolResult"

    id="selectDaProtocolVo" 查询的语句,可以复用,但是要使用 include 嵌套
    include 表示的是sql代码片段

    <include refid="selectDaProtocolVo"/>

    sql
    这个元素可以用来定义可重用的 SQL 代码片段,以便在其它语句中使用。 参数可以静态地(在加载的时候)确定下来,并且可以在不同的 include 元素中定义不同的参数值。比如:

    <sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>
    这个 SQL 片段可以在其它语句中使用,例如:

    <select id="selectUsers" resultType="map">
    select
    <include refid="userColumns"><property name="alias" value="t1"/></include>,
    <include refid="userColumns"><property name="alias" value="t2"/></include>
    from some_table t1
    cross join some_table t2
    </select>

    <where> </where> 标识表示条件内容
    也可以不适应这个标识,直接使用where语句

    <select id="selectDaProtocolById" parameterType="Long" resultMap="DaProtocolResult">
    <include refid="selectDaProtocolVo"/>
    where protocol_id = #{protocolId}
    </select>

    trim 标识 表示要做非空条件判断,符合条件的才做操作
    prefix表示前标识
    suffix 表示后标识
    suffixOverrides 表示隔离符
    if 表示条件
    test 表示判断内容
    参数用#号和{}包住

    参数符号
    #{id}

    首先,如果你的数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),那么你可以设置 useGeneratedKeys=”true”,
    然后再把 keyProperty 设置为目标属性就 OK 了。例如,如果上面的 Author 表已经在 id 列上使用了自动生成

    <insert id="insertDaProtocol" parameterType="DaProtocol">
    insert into da_protocol
    <trim prefix="(" suffix=")" suffixOverrides=",">
    <if test="protocolId != null">protocol_id,</if>
    <if test="protocolDocUrl != null">protocol_doc_url,</if>
    <if test="productModelCode != null and productModelCode != ''">product_model_code,</if>
    <if test="versionNumber != null">version_number,</if>
    <if test="isNews != null">is_news,</if>
    <if test="createTime != null">create_time,</if>
    <if test="creatorId != null">creator_id,</if>
    <if test="updateTime != null">update_time,</if>
    <if test="updateId != null">update_id,</if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
    <if test="protocolId != null">#{protocolId},</if>
    <if test="protocolDocUrl != null">#{protocolDocUrl},</if>
    <if test="productModelCode != null and productModelCode != ''">#{productModelCode},</if>
    <if test="versionNumber != null">#{versionNumber},</if>
    <if test="isNews != null">#{isNews},</if>
    <if test="createTime != null">#{createTime},</if>
    <if test="creatorId != null">#{creatorId},</if>
    <if test="updateTime != null">#{updateTime},</if>
    <if test="updateId != null">#{updateId},</if>
    </trim>
    </insert>

    <update id="updateDaProtocol" parameterType="DaProtocol">
    update da_protocol
    <trim prefix="SET" suffixOverrides=",">
    <if test="protocolDocUrl != null">protocol_doc_url = #{protocolDocUrl},</if>
    <if test="productModelCode != null and productModelCode != ''">product_model_code = #{productModelCode},</if>
    <if test="versionNumber != null">version_number = #{versionNumber},</if>
    <if test="isNews != null">is_news = #{isNews},</if>
    <if test="createTime != null">create_time = #{createTime},</if>
    <if test="creatorId != null">creator_id = #{creatorId},</if>
    <if test="updateTime != null">update_time = #{updateTime},</if>
    <if test="updateId != null">update_id = #{updateId},</if>
    </trim>
    where protocol_id = #{protocolId}
    </update>

    这个循环需要灵活使用
    foreach 标识表示循环
    item 表示对应的内容
    collection 标识对应的容器类型
    open="(" 表示开头
    separator 表示间隔符号
    close=")" 表示关闭符号

    <delete id="deleteDaProtocolByIds" parameterType="String">
    delete from da_protocol where protocol_id in
    <foreach item="protocolId" collection="array" open="(" separator="," close=")">
    #{protocolId}
    </foreach>
    </delete>

    <insert id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
    insert into Author (username, password, email, bio) values
    <foreach item="item" collection="list" separator=",">
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
    </foreach>
    </insert>

     

    <resultMap id="vehicleResult" type="Vehicle">
      <id property="id" column="id" />
      <result property="vin" column="vin"/>
      <result property="year" column="year"/>
      <result property="make" column="make"/>
      <result property="model" column="model"/>
      <result property="color" column="color"/>
      <discriminator javaType="int" column="vehicle_type">
        <case value="1" resultType="carResult">
          <result property="doorCount" column="door_count" />
        </case>
        <case value="2" resultType="truckResult">
          <result property="boxSize" column="box_size" />
          <result property="extendedCab" column="extended_cab" />
        </case>
        <case value="3" resultType="vanResult">
          <result property="powerSlidingDoor" column="power_sliding_door" />
        </case>
        <case value="4" resultType="suvResult">
          <result property="allWheelDrive" column="all_wheel_drive" />
        </case>
      </discriminator>
    </resultMap>

     

     like 查询方法

       <if test="productName != null  and productName != ''"> and product_name like concat('%', #{productName}, '%')</if>

     

     

    参考:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html

    https://mybatis.org/mybatis-3/zh/dynamic-sql.html

  • 相关阅读:
    python初接触
    Visual Studio Code 必备插件
    C# 基础知识 -- 枚举(Enum)
    Visual Studio : Console.WriteLine(); 快捷键
    C# 调用Outlook发送邮件
    C# Dos、Unix、Mac文件格式之间的相互转换
    Treeview控件失去焦点,将选择的节点设置为高亮显示
    oracle中的Exists、In、Any、All
    TreeView控件如何控制滚动条的位置
    oracle 查看最大连接数与当前连接数
  • 原文地址:https://www.cnblogs.com/xiaohuasan/p/14870551.html
Copyright © 2020-2023  润新知