MyBatis的映射文件

1、映射文件的结构

映射文件包含了各类SQL语句、参数、结果集、映射规则等信息。
Mybatis的映射文件有很少的几个顶级元素(按照它们应该被定义的顺序)∶

  • cache:给定命名空间的缓存配置。
  • cache-ref:其他命名空间缓存配置的引用。
  • resultMap:最复杂也最强大的元素,用来描述如果从数据库结果集中加载对象。
  • sql:可被其他语句引用的可重用语句块
  • insert:映射插入语句
  • update:映射更新语句
  • delete:映射删除语句
  • select:映射查询语句

2、<select>元素

<select>是MyBatis中最常用的元素之一,主要用于映射查询语句,它包含了SQL语句、参数类型、返回值类型等信息。
简单查询的<select>元素是非常简单的,比如:

<select id="selectPerson" parameterType="int" resultType="hashmap">
    SELECT * FROM PERSON WHERE ID = #{id}
</select>

<select>元素映射一个查询语句,id属性用于指定该映射关系在当前命名空间的唯一标识符,parameterType用于指定传入参数的完全限定类名或别名,resultType用于指定返回结果的完全限定类名或别名,SQL语句中#{id}表示通过占位符的形式接收参数id。

select语句由很多属性允许配置来决定每条语句的作用细节,以下为最常用的属性:

  • id:在命名空间中唯一的标识符,可用于与Mapper接口中的方法做映射。
  • parameterType:将会传入这条语句的参数类的完全限定名或别名。这个属性是可选的。
  • resultType:返回类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。
  • resultMap:外部resultMap的命名引用。注意resultType和resultMap不能同时使用。

 3、<insert>、<update>、<delete>元素

<insert>元素用于映射插入语句,<update>元素用于映射更新语句,<delete>元素用于映射删除语句。与<select>元素的结构组成类似,这三个元素也包含了SQL语句、参数类型等信息。
insert语句最常用的属性与select一样。简单的insert语句如下:

<insert id="insert">
    insert into Author (id,username,password,email,bio) values (#{id},# {username},#{password} ,#{email} ,#{bio})
</insert>

update语句最常用的属性与select一样。简单的update语句如下:

<update id="update">
    update Author set username = #{username},password = #{password},email = #{email},bio = #{bio} where id = #{id}
</update>

delete语句最常用的属性与select一样。简单的delete语句如下:

<delete id="delete">
    delete from Author where id = #{id}
</delete>

4、<sql>元素

Mybatis支持定义可重用的SQL代码段,用于包含在其他语句中。它可以静态地(在加载阶段)参数化。比如:

<sql id="userColumn">
    ${alias}.id,${alias}.username,${alias}.password
</sql>

定义好的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>

5、<resultMap>元素

<resultMap>元素用于映射结果集,它避免了JDBC ResultSets 的冗余和烦琐,同时,它封装并实现了一些JDBC没有提供的功能。
<resultMap>元素包含了子元素如下:

  • constructor:用于在实例化类时,注入结果到构造方法中
    • idArg:ID参数,标记出作为ID的结果可以帮助提高整体性能
    • arg:将被注入到构造方法的一个普通结果
  • id:一个ID结果,标记出作为ID的结果可以帮助提高整体性能
  • result:注入到字段或JavaBean属性的普结果
  • association:可用来配置一对一关联
  •  collection:可用来配置一对多关联.
  • discriminator:用于配置结果集处理方法

id和result都将一个列的值映射到一个简单数据类型(String,int,double,Date等)的属性或字段。
这两者之间的唯一不同是,id元素对应的属性会被标记为对象的标识符,在比较对象实例时使用。这样可以提高整体的性能,尤其是进行缓存和嵌套结果映射(也就是连接映射)的时候。

id和result的属性如下表所示:

以下提供一个小例子:

<resultMap id="studentResultMap" type="StudentPOJO">
    <id property="studentId" column="student_id" >
    <result property="studentName" column="student_name"/>
    <result property="age" column="age">
    <result property="course" column="course"/>
</resultMap>
<select id="select" resultMap="studentResultMap">
    select student_id, student_name, age, course from student where student_id=#{id}
</select>

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值