- mapper介绍
- mapper使用规则:按业务划分,一个业务模块相关的sql均定义在一个mapper文件
- mapper的xml格式:
- doctype:
-
12
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
-
- 使用mapper标签包含:
-
-
1
<mapper namespace=
"com.pro.dao.UserDao"
></mapper>
-
- doctype:
- mapper概览
- cache:指定名称的缓存
- cache-ref:引用其他文件的命名配置
- resultMap:描述如何加载数据库结果的对象
- sql:可重用的sql块,也可以被其他语句使用
- insert:插入
- update:更新
- delete:删除
- select:查询
- 使用介绍
- select标签
1234567891011
<select
id=
"selectPerson"
//唯一标识sql语句,与接口中的标识一致。
parameterType=
"int"
//入参类型
resultType=
"hashmap"
//期望返回类型的类名或别名,集合时,应该是集合可以包含的类型,而不能是集合本身
resultMap=
"personResultMap"
//引用resultMap标签定义
flushCache=
"false"
//设置为true,清空缓存
useCache=
"true"
//使用cache:本条结果将被缓存
timeout=
"10000"
fetchSize=
"256"
statementType=
"PREPARED"
//Statement,PreparedStatement 或 CallableStatement。 默认值:PREPARED
resultSetType=
"FORWARD_ONLY"
>
//FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE 中的一种。默认是不设置(驱动自行处理)。<br><br><strong>多表查询:</strong>
<!-- Very Complex Statement --> <select id="selectBlogDetails" resultMap="detailedBlogResultMap"> select B.id as blog_id, B.title as blog_title, B.author_id as blog_author_id, A.id as author_id, A.username as author_username, A.password as author_password, A.email as author_email, A.bio as author_bio, A.favourite_section as author_favourite_section, P.id as post_id, P.blog_id as post_blog_id, P.author_id as post_author_id, P.created_on as post_created_on, P.section as post_section, P.subject as post_subject, P.draft as draft, P.body as post_body, C.id as comment_id, C.post_id as comment_post_id, C.name as comment_name, C.comment as comment_text, T.id as tag_id, T.name as tag_name from Blog B left outer join Author A on B.author_id = A.id left outer join Post P on B.id = P.blog_id left outer join Comment C on P.id = C.post_id left outer join Post_Tag PT on PT.post_id = P.id left outer join Tag T on PT.tag_id = T.id where B.id = #{id} </select>
- insert、update、delete标签
- <insert id="insertAuthor"//唯一标签,与接口中的方法名称一致 parameterType="domain.blog.Author"//参数类型,限定名 flushCache="true" statementType="PREPARED" keyProperty="" keyColumn="" useGeneratedKeys="" timeout="20">
-
1
selectKey:selectKey 元素将会首先运行, id 会被设置,然后插入语句 会被调用
123456789<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>
- sql标签
- 这个元素可以被用来定义可重用的 SQL 代码段,可以包含在其他语句中
-
123456
<sql id=
"userColumns"
> id,username,password </sql>
<select id=
"selectUsers"
resultType=
"map"
>
select <include refid=
"userColumns"
/>
from some_table
where id = #{id}
</select><br><insert id=
"insertUser"
parameterType=
"User"
> <br> insert into users (id, username, password) values (#{id}, #{username}, #{password}) <br></insert>
- resultMap标签
- 结果映射定义:
-
constructor - 类在实例化时,用来注入结果到构造方法中
- idArg - ID 参数;标记结果作为 ID 可以帮助提高整体效能
- arg - 注入到构造方法的一个普通结果
- id – 一个 ID 结果;标记结果作为 ID 可以帮助提高整体效能
- result – 注入到字段或 JavaBean 属性的普通结果
-
association – 一个复杂的类型关联;许多结果将包成这种类型
- 嵌入结果映射 – 结果映射自身的关联,或者参考一个
- has a关系:
-
1
关联元素处理“有一个”类型的关系。
-
123456789101112131415161718192021222324252627
<resultMap id=
"blogResult"
type=
"Blog"
>
<id property=
"id"
column=
"blog_id"
/>
<result property=
"title"
column=
"blog_title"
/>
<association property=
"author"
column=
"blog_author_id"
javaType=
"Author"
resultMap=
"authorResult"
/>
</resultMap>
<resultMap id=
"authorResult"
type=
"Author"
>
<id property=
"id"
column=
"author_id"
/>
<result property=
"username"
column=
"author_username"
/>
<result property=
"password"
column=
"author_password"
/>
<result property=
"email"
column=
"author_email"
/>
<result property=
"bio"
column=
"author_bio"
/>
</resultMap>
<select id=
"selectBlog"
resultMap=
"blogResult"
>
select
B.id as blog_id,
B.title as blog_title,
B.author_id as blog_author_id,
A.id as author_id,
A.username as author_username,
A.password as author_password,
A.email as author_email,
A.bio as author_bio
from Blog B left outer join Author A on B.author_id = A.id
where B.id = #{id}
</select>
-
collection – 复杂类型的集
- 嵌入结果映射 – 结果映射自身的集,或者参考一个
-
discriminator – 使用结果值来决定使用哪个结果映射case – 基于某些值的结果映射
- 嵌入结果映射 – 这种情形结果也映射它本身,因此可以包含很多相 同的元素,或者它可以参照一个外部的结果映射。
- Cache标签
-
<cache/>
字面上看就是这样。这个简单语句的效果如下:
- 映射语句文件中的所有 select 语句将会被缓存。
- 映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
- 缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
- 根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
- 缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
- 缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
所有的这些属性都可以通过缓存元素的属性来修改。比如:
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
-
- select标签
相关文章
- 04-19配置Ceph向外部提供iSCSI存储
- 04-19transformer 全总结
- 04-19ROS是什么以及安装配置
- 04-19「考试总结2021-04-07」进退
- 04-19报表生成器配置FastReport.Net环境
- 04-19Photoshop颜色出现比较大的偏差,偏色严重,显示器配置文件2351似乎有问题
- 04-19P/Invoke各种总结(一、使用StructLayout特性来控制内存结构)
- 04-19在用eclipse创建完SpringMVC案例后,配置文件都没有错,启动Tomcat就报错!!!
- 04-19serverless 项目配置及创建helloworld应用
- 04-19P/Invoke各种总结(三、平台调用时的数据类型对应)