Mybatis实战(五)Mapper配置文件高级映射

Mapper配置文件中除了增删改查等常见的操作外,还有以下几个重要的配置

1.sql

这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中。比如:

<sql id="condition">
		<where>
			<if test="fstate != null and fstate!=‘‘">
				<![CDATA[and fstate = #{fstate}]]>
			</if>
			
		</where>
		<![CDATA[order by fid desc]]>
	</sql>
	<select id="list" resultType="User" parameterType="User">
		<![CDATA[ select fid from SYS_USER]]>
		<include refid="condition" />
	</select>

2.cache

MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。除了可以在主配置文件的settings属性中配置cacheEnabled为true来开启全局的缓存外,你亦可以在

mapper配置文件配置<cache/>属性来开启局部的缓存。

只需要在你的sqlSQL 映射文件中添加一行: <cache/>

字面上看就是这样。这个简单语句的效果如下:

a.映射语句文件中的所有 select 语句将会被缓存。
b.映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
c.缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
d.根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
e.缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
 f.缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
当然所有的这些属性都可以通过缓存元素的属性来修改。最后你也可以通过实现你自己的缓存或为其他第三方缓存方案 创建适配器来完全覆盖缓存行为。

备注:笔者将在后期讲解Mybatis整合Ehcache和memcache等常见的缓存技术


3.resultMap

resultMap是Mybatis中的高级映射,它可以让所有的多表连接变的值可以一次性还回

首先来看一个java实体bean


public class Topic {
	private String fid;// 主键

	private String ftitle;// 标题

	private String fcontent;// 内容

	private List<Replay> replays;// 回复列表
	
	private User author; //作者
	
	/**
	* getter and setter ...
	* 
	*/
	
}

下面是resultMap中的每一个配置项

1) constructor - 类在实例化时,用来注入结果到构造方法中
1.1)
 idArg - ID 参数;标记结果作为 ID 可以帮助提高整体效能
1.2
) arg - 注入到构造方法的一个普通结果

ex:

<constructor>
   <idArg column="fid"  javaType="int"/>
   <arg column="username" javaType="String"/>
</constructor>

3)id – 一个 ID 结果;标记结果作为 ID 可以帮助提高整体效能

  4)result – 注入到字段或 JavaBean 属性的普通结果

  5)association 关联关系,比如上面Topic实体bean中的author属性

ex:

 <association property="author" javaType="Author">
    <id property="id" column="author_id"/>
    <result property="username" column="author_username"/>
    <result property="email" column="author_email"/>
 </association>

   6)collection  集合关系,比如上面Topic实体bean中的replays属性,属性类型为List

ex:

  <collection property="replays" ofType="Replay">
    <id property="fid" column="post_id"/>
    <result property="fcontent" column="replay_fcontent"/>
    <association property="author" javaType="Author"/>
  </collection>

整合:

<resultMap id="detailedTopic" type="Topic">
<constructor>
    <idArg column="topic_id" javaType="int"/>
 </constructor>
<result property="ftitle" column="topic_title"/> 
<association property="author" javaType="Author">
    <id property="id" column="author_id"/>
    <result property="username" column="author_username"/>
    <result property="email" column="author_email"/>
 </association>
<collection property="replays" ofType="Replay">
    <id property="fid" column="replay_id"/>
    <result property="fcontent" column="replay_fcontent"/>
    <association property="author" javaType="Author"/>
</collection>
</resultMap>
备注:上面的配置中property为属性名称,column为数据库字段或者别名


有了如上的resultMap,你可以在查询Topic的时候将其所有的属性一次还回 (连表多表查询),直接将select的还回值设为resultMap即可。(设置了resultMap,无需再设置resultType)

这就是Mybatis高级映射的魅力,让一切复杂的东西变的简单!



欢迎大家一起讨论学习!

有用的自己收!

记录与分享,让你我共成长!欢迎查看我的其他博客;我的博客地址:http://blog.csdn.net/caicongyang





Mybatis实战(五)Mapper配置文件高级映射,布布扣,bubuko.com

Mybatis实战(五)Mapper配置文件高级映射

上一篇:微信应用号(小程序)开发教程二


下一篇:android BroadcastReceiver