mybatis映射文件mapper详解

mapper.xml映射文件主要是用来编写sql语句的,以及一些结果集的映射关系的编写,还有就是缓存的一些配置等等。

1.<select>元素

<select>元素就是sql查询语句。可以执行一些简单的查询操作,也可以是复杂的查询操作。例如:

<select id="findCustomerById" parameterType="Integer"
            resultType="com.itheima.po.Customer">
            select * from t_customer where id = #{id}
</select>

2.<insert>元素

<insert>元素用于映射插入语句,在执行完元素中定义的SQL语句后,会返回一个表示插入记录数的整数。

<insert>元素的配置示例如下:

<insert
      id="addCustomer"
      parameterType="com.itheima.po.Customer"
      flushCache="true"
      statementType="PREPARED"
      keyProperty=""
      keyColumn=""
      useGeneratedKeys=""
      timeout="20">

执行插入操作后,很多时候需要返回插入成功的数据生成的主键值,此时就可以通过上面讲解的3个属性来实现。
1.对于支持主键自助增长的数据库(如MySQL),可以通过如下配置实现:

<insert id="addCustomer" parameterType="com.itheima.po.Customer"
            keyProperty="id" useGeneratedKeys="true" >
      insert into t_customer(username,jobs,phone)
      values(#{username},#{jobs},#{phone})
</insert>

2.对于不支持主键自助增长的数据库(如Oracle),可以通过如下配置实现:

<insert id="insertCustomer" parameterType="com.itheima.po.Customer">
      <selectKey keyProperty="id" resultType="Integer" order="BEFORE">
            select if(max(id) is null, 1, max(id) +1) as newId from t_customer
      </selectKey>          
      insert into t_customer(id,username,jobs,phone)
      values(#{id},#{username},#{jobs},#{phone})
</insert>

3.<update><delete>元素

<update><delete>元素的使用比较简单,它们的属性配置也基本相同。
1.<update><delete>元素的常用属性如下:

<update
      id="updateCustomer"
      parameterType="com.itheima.po.Customer"
      flushCache="true"
      statementType="PREPARED"
      timeout="20">
    
<delete
      id="deleteCustomer"
      parameterType="com.itheima.po.Customer"
      flushCache="true"
      statementType="PREPARED"
      timeout="20">

2.<update><delete>元素的使用示例如下:

<update id="updateCustomer" parameterType="com.itheima.po.Customer">
       update t_customer 
       set username=#{username},jobs=#{jobs},phone=#{phone}
       where id=#{id}
</update>

<delete id="deleteCustomer" parameterType="Integer">
        delete from t_customer where id=#{id}
</delete>

4.<sql>元素

sql片段,可以在mapper文件中的任何地方引用。减少代码量。

例如:

<sql id="customerColumns">id,username,jobs,phone</sql>

定义sql片段,通过<include>元素的refid属性引用id为someinclude的代码片段

例如:

<select id="findCustomerById" parameterType="Integer" 
         resultType="com.itheima.po.Customer">
    select 
    <include refid="customerColumns"/>
    from tableName
    where id = #{id}
</select>

5.<resultMap>元素

<resultMap>元素表示结果映射集,是MyBatis中最重要也是最强大的元素。它的主要作用是定义映射规则、级联的更新以及定义类型转化器等。
<resultMap>元素中包含了一些子元素,它的元素结构如下所示:

<resultMap type="" id="">
       <constructor>    <!-- 类在实例化时,用来注入结果到构造方法中-->
             <idArg/>      <!-- ID参数;标记结果作为ID-->
             <arg/>          <!-- 注入到构造方法的一个普通结果-->
       </constructor>  
       <id/>                 <!-- 用于表示哪个列是主键-->
       <result/>           <!-- 注入到字段或JavaBean属性的普通结果-->
       <association property="" />        <!-- 用于一对一关联 -->
       <collection property="" />          <!-- 用于一对多关联 -->
       <discriminator javaType="">      <!-- 使用结果值来决定使用哪个结果映射-->
            <case value="" />                   <!-- 基于某些值的结果映射 -->
       </discriminator> 
</resultMap>

简单的结果集映射

    <resultMap id="BaseResultMap" type="cn.jason.bootmybatis.model.Tests">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="name" property="name" jdbcType="VARCHAR"/>
        <result column="age" property="age" jdbcType="INTEGER"/>
    </resultMap>

   
    <select id="selectByPrimaryKey" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from tests
        where id = #{id,jdbcType=BIGINT}
    </select>

猜你喜欢

转载自www.cnblogs.com/jasonboren/p/11394707.html