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

posted @ 2021-06-10 14:20  剧里局外  阅读(99)  评论(0编辑  收藏  举报