关于mybatis:三XML配置文件笔记

6次阅读

共计 2841 个字符,预计需要花费 8 分钟才能阅读完成。

  • cache – 该命名空间的缓存配置。
  • cache-ref – 援用其它命名空间的缓存配置。
  • resultMap – 形容如何从数据库后果集中加载对象,是最简单也是最弱小的元素。
  • sql – 可被其它语句援用的可重用语句块。
  • insert – 映射插入语句。
  • update – 映射更新语句。
  • delete – 映射删除语句。
  • select – 映射查问语句。

1、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(依赖数据库驱动)。

2、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″>

例:

<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>

3、selectKey
<insert id=”insertAuthor”>
<selectKey keyProperty=”id” resultType=”int” order=”BEFORE”>

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

</selectKey>
insert into Author

(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 数据库的行为类似,在插入语句外部可能有嵌入索引调用。

4、缓存

<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 排除缓存

正文完
 0