Mybaits的映射器配置详解

来源:互联网 发布:黑暗骑士 知乎 编辑:程序博客网 时间:2024/04/26 05:46

Mybaits的映射器配置基本元素:

cache:设置缓存配置

cache-ref:从其他的命名空间引用缓存配置

resultMap:描述了如何从结果中加载对象

sql:可以定义sql语句的部分内容以便重用

insert:映射insert语句

update:映射update语句

delete:映射delete语句

select:映射select语句

使用详解

(1)Mapper

<mapper namespace="com.yihaomen.mybatis.models.UserMapper">
    <select id="selectUserByID" parameterType="int" resultType="com.yihaomen.mybatis.model.User">
        select * from user where id = #{id}
    </select>
</mapper>

mappe只r有一个namespace属性,该属性主要有两个作用:

a、可以有效地区分不同的mapper,在不同的mapper里可以可以有id相同的元素

b、与接口关联,接口可以使用namespace+id调用sql映射语句(所以namespace的命名务必要与接口同名)

例如:User user = (User) session.selectOne("com.yihaomen.mybatis.models.UserMapper.selectUserByID", 1);

(2)cache配置

<cache type="PERPETUAL" eviction="LRU"flushInterval="60000" size="512" readOnly="true" /> 

l        type-cache实现类,默认为PERPETUAL可以使用自定义的cache实现类(别名或完整类名皆可)

l        eviction-回收算法,默认为LRU可选的算法有:

                  LRU– 最近最少使用的:移除最长时间不被使用的对象。

                 FIFO– 先进先出:按对象进入缓存的顺序来移除它们。

                 SOFT– 软引用:移除基于垃圾回收器状态和软引用规则的对象。

                 WEAK– 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

l        flushInterval-刷新间隔,默认为1个小时,单位毫秒

l        size-缓存大小,默认大小1024,单位为引用数

l        readOnly-只读

(3)cache-ref

<cache-ref namespace="com.someone.application.data.SomeMapper"/> 

如果你不想定义自己的cache,可以使用cache-ref引用别的cache。因为每个cache都以namespace为id,所以cache-ref只需要配置一个namespace属性就可以了。需要注意的是,如果cache-refcache都配置了,以cache为准。

(4)sql标签

<sql id="userColumns"> userid,username,password</sql> 

如果定义了上述的sql,那么可以在其他元素中使用userColumns代替userid,username,password

例如:

<select id="queryUsers" parameterType="UserDto" resultType="UserDto" useCache="false">     select <include refid="userColumns"/> from t_user t where t.username = #{username} 

</select> 

(5)select标签

  1. <select id="queryUsers" parameterType="UserDto" resultType="UserDto" useCache="false">  
  2.     select <include refid="userColumns"/> from t_user t where t.username = #{username}  
  3.       </select> 

属性

描述

id

在命名空间中唯一的标识符,可以被用来引用这条语句。同样,id+namespace既作为configuration中缓存的key又与namespace对应的接口中的方法关联。

parameterType

将会传入这条语句的参数类的完全限定名或别名。

parameterMap

已废弃。

resultType

从这条语句中返回的期望类型的类的完全限定名或别名。注意集合情形,那应该是集合可以包含的类型,而不能是集合本身(是否使用集合由id对应的方法的返回类型决定)。使用resultType或resultMap,但不能同时使用。

resultMap

引用外部的resultMap。使用resultMap或resultType,但不能同时使用。

flushCache

将其设置为true,不论语句什么时候被调用,都会导致缓存被清空。默认值:false。

useCache

将其设置为true,将会导致本条语句的结果被缓存。默认值:true。

timeout

这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最大等待值。默认不设置(驱动自行处理)。

fetchSize

这是暗示驱动程序每次批量返回的结果行数。默认不设置(驱动自行处理)。

statementType

STATEMENT,PREPARED或CALLABLE的一种。这会让MyBatis使用选择使用Statement,PreparedStatement或CallableStatement。默认值:PREPARED。

resultSetType

FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE中的一种。默认是不设置(驱动自行处理)。

 

(6)     insertudpatedelete标签

  1. <insert id="insertUser" parameterType="UserDto" useGeneratedKeys="true" keyProperty="userid">  
  2.     insert into t_user (userid,username,password)  
  3.     values (#{userid},#{username},#{password})  
  4. </insert>  
  5. <update id="updateUser" parameterType="UserDto">  
  6.     update t_user set  
  7.     username = #{username},  
  8.     password = #{password},  
  9.     where userid = #{userid}  
  10. </update>  
  11. <delete id="deleteUser" parameterType="UserDto">  
  12.     delete from t_user where userid = #{userid}  
  13.       </delete>  

属性说明如下:

属性

描述

id

在命名空间中唯一的标识符,可以被用来引用这条语句。同样,id+namespace既作为configuration中缓存的key又与namespace对应的接口中的方法关联。

parameterType

将会传入这条语句的参数类的完全限定名或别名。

parameterMap

已废弃。

flushCache

将其设置为true,不论语句什么时候被调用,都会导致缓存被清空。默认值:false。

timeout

这个设置驱动程序等待数据库返回请求结果,并抛出异常时间的最大等待值。默认不设置(驱动自行处理)。

statementType

STATEMENT,PREPARED或CALLABLE的一种。这会让MyBatis使用选择使用Statement,PreparedStatement或CallableStatement。默认值:PREPARED。

useGeneratedKeys

(仅对insert有用)这会告诉MyBatis使用JDBC的getGeneratedKeys方法来取出由数据(比如:像MySQL和SQL Server这样的数据库管理系统的自动递增字段)内部生成的主键。默认值:false。

keyProperty

(仅对insert有用)标记一个属性,MyBatis会通过getGeneratedKeys或者通过insert语句的selectKey子元素设置它的值。默认:不设置。


(7)selectKey标签:insert下的子元素(这个还需要进一步的理解????)

  1. <selectKey keyProperty="userid" resultType="int" order="BEFORE">  
  2.      select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1  
  3. </selectKey> 

selectKey给了你一个简单的行为在你的数据库中来处理自动生成的主键,而不需要使你的Java代码变得复杂。在上面的示例中,selectKey元素将会首先运行,userid会被设置,然后插入语句会被调用。另外,selectKey节点生成的KeyGenerator优先级高于insert节点的useGeneratedKeys属性生成的KeyGenerator对象,也就是说配置了SelectKey子节点就不需要再配置useGeneratedKeys属性了。属性说明如下:

属性

描述

keyProperty

selectKey语句结果设置的目标属性。

resultType

结果的类型。MyBatis允许任何简单类型用作主键的类型,包括字符串。

order

这可以被设置为BEFORE或AFTER。如果设置为BEFORE,那么它会首先选择主键,设置keyProperty然后执行插入语句。如果设置为AFTER,那么先执行插入语句,然后是selectKey元素-这和如Oracle数据库相似,可以在插入语句中嵌入序列调用。

statementType

和前面的相同,MyBatis支持STATEMENT,PREPARED和CALLABLE语句的映射类型,分别代表PreparedStatement和CallableStatement类型。






0 0