Mybatis-3-映射文件详解1

179 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

今天详细看下Mybatis mapper映射文件,由于MyBatis强大的语句映射,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。

记录下官网:

官网:mybatis.org/mybatis-3/zh/sqlmap-xml.html

我们按照顺序来看下这mybatis的几个顶级元素标签:

SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):

  1. cache – 给定命名空间的缓存配置。

  2. cache-ref – 其他命名空间缓存配置的引用。

  3. resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象

  4. sql – 可被其他语句引用的可重用语句块。

  5. insert – 映射插入语句

  6. update – 映射更新语句

  7. delete – 映射删除语句

  8. select – 映射查询语句

一、缓存

二、自定义缓存:

三、resultMap – 用来描述如何从数据库结果集中来加载对象

<?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.xing.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.xing.entity.UserEntity" autoMapping="true" >
<result column="id" jdbcType="INTEGER" property="id" />
<result column="user_name" jdbcType="VARCHAR" property="userName" />
        <result column="pass_word" jdbcType="VARCHAR" property="passWord" />
<result column="real_name" jdbcType="VARCHAR" property="realName" />
    </resultMap>
</mapper>

         可以看到以上代码就实现了数据库表user(UserMapper)及字段和属性的映射,详解可以看官网。

四、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>
也可以在 include 元素的 refid 属性或内部语句中使用属性值,例如:
<sql id="sometable">
  ${prefix}Table
</sql>
<sql id="someinclude">
  from
<include refid="${include_target}"/>
</sql>
<select id="select" resultType="map">
  select
    field1, field2, field3
<include refid="someinclude">
<property name="prefix" value="Some"/>
<property name="include_target" value="sometable"/>
</include>
</select>

五、insert

 新增、更新、删除的标签属性都差不多

<insert id="insert" parameterType="com.xing.entity.UserEntity">
    insert into user 
    (id, userName, passWord,realName)
values
    (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},#{realname,jdbcType=VARCHAR})
</insert>

六、update

<update id="updateByExampleSelective" parameterType="map">
    update user
    <set>
      <if test="record.id != null">
        id = #{record.id,jdbcType=INTEGER},
      </if>
      <if test="record.username != null">
        userName = #{record.username,jdbcType=VARCHAR},
      </if>
      <if test="record.password != null">
        passWord = #{record.password,jdbcType=VARCHAR},
      </if>
      <if test="record.realname != null">
        realName = #{record.realname,jdbcType=VARCHAR},
      </if>
    </set>
    <if test="_parameter != null">
      <include refid="Update_By_Example_Where_Clause" />
    </if>
  </update>

七、delete

<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
  delete from user
where id = #{id,jdbcType=INTEGER}
</delete>

八、Select 查询


<select id="getOne" resultType="com.xing.entity.UserEntity"
  parameterType="int" flushCache="false"
  useCache="true"
  timeout="10000"
  fetchSize="256"
  statementType="PREPARED">
select * from user where id = #{id}
</select>

总结:

        Mybatis mapper xml文件的几个顶级元素,点击”阅读原文“可以直接到Mybatis中文网,每个标签及属性都写的明明白白的。

END