3、XML配置文件(笔记)

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

一、select - 映射查询语句算法

<select
id="selectPerson"
parameterType="int"
resultType="hashmap"
resultMap="personResultMap"
flushCache="false" #将其设置为 true 后,只要语句被调用,都会致使本地缓存和二级缓存被清空,默认值:false。
useCache="true" #将其设置为 true 后,将会致使本条语句的结果被二级缓存缓存起来,默认值:对 select 元素为 true。
timeout="10" #这个设置是在抛出异常以前,驱动程序等待数据库返回请求结果的秒数。默认值为未设置(unset)(依赖数据库驱动)。
fetchSize="256" #这是一个给驱动的建议值,尝试让驱动程序每次批量返回的结果行数等于这个设置值。 默认值为未设置(unset)(依赖驱动)
statementType="PREPARED" #可选 STATEMENT,PREPARED 或 CALLABLE。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。
resultSetType="FORWARD_ONLY"> #FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT(等价于 unset) 中的一个,默认值为 unset (依赖数据库驱动)。sql

二、insert、update、delete数据库

<insert
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
keyProperty="" #(仅适用于 insert 和 update)指定可以惟一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset)。若是生成列不止一个,能够用逗号分隔多个属性名称。
keyColumn="" #(仅适用于 insert 和 update)设置生成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列不是表中的第一列的时候,是必须设置的。若是生成列不止一个,能够用逗号分隔多个属性名称。
useGeneratedKeys="" #(仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(好比:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false。
timeout="20">缓存

<update
id="updateAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20">安全

<delete
id="deleteAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20">dom

例:fetch

<insert id="insertAuthor" useGeneratedKeys="true"
    keyProperty="id">
  insert into Author (username, password, email, bio) values
  <foreach item="item" collection="list" separator=",">
    (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
  </foreach>
</insert>

三、selectKey
<insert id="insertAuthor">
<selectKey keyProperty="id" resultType="int" order="BEFORE">线程

select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1

</selectKey>
insert into Authorcode

(id, username, password, email,bio, favourite_section)

values对象

(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})

</insert>

keyProperty : selectKey 语句结果应该被设置到的目标属性。若是生成列不止一个,能够用逗号分隔多个属性名称。
keyColumn 返回结果集中生成列属性的列名。若是生成列不止一个,能够用逗号分隔多个属性名称。
order 能够设置为 BEFORE 或 AFTER。若是设置为 BEFORE,那么它首先会生成主键,设置 keyProperty 再执行插入语句。若是设置为 AFTER,那么先执行插入语句,而后是 selectKey 中的语句 - 这和 Oracle 数据库的行为类似,在插入语句内部可能有嵌入索引调用。

四、缓存

<cache/> 开启二级缓存
基本上就是这样。这个简单语句的效果以下:

映射语句文件中的全部 select 语句的结果将会被缓存。
映射语句文件中的全部 insert、update 和 delete 语句会刷新缓存。
缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不须要的缓存。
缓存不会定时进行刷新(也就是说,没有刷新间隔)。
缓存会保存列表或对象(不管查询方法返回哪一种)的 1024 个引用。
缓存会被视为读/写缓存,这意味着获取到的对象并非共享的,能够安全地被调用者修改,而不干扰其余调用者或线程所作的潜在修改。

<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
#建立了一个 FIFO 缓存,每隔 60 秒刷新,最多能够存储结果对象或列表的 512 个引用,并且返回的对象被认为是只读的,所以对它们进行修改可能会在不一样线程中的调用者产生冲突。

<select ... flushCache="false" useCache="true"/>useCache 排除缓存

相关文章
相关标签/搜索