WorkflowBaseMapper.xml
6.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="weaver.conn.mybatis.mapper.WorkflowBaseMapper">
<!-- databaseId与resultType使用说明 -->
<!--可以通过在标签属性中使用databaseId标识数据库,也可以在语句中通过_databaseId区分 -->
<!-- resultType需要写明javabean的全路径。如果想简写,需要在MyBatis.xml中配置typeAliases -->
<!-- 与resultType中属性值的映射是忽略大小写与下划线的。 -->
<select id="selectHrmAlbumSubcompanyVO" resultType="weaver.conn.mybatis.bean.HrmAlbumSubcompanyVO" databaseId="mysql">
select
<if test="_databaseId=='mysql'">
1,
</if>
a.*,b.*,(convert(b.albumsize/(1000+0.0) , decimal(18,2))) as totalsize,
(convert((b.albumSizeUsed/(1000+0.0)),decimal(18,2))) as usesize,
(convert((b.albumSize-b.albumSizeUsed)/(1000+0.0),decimal(18,2))) as remainsize,
(case b.albumSize when 0 then 0 else (convert((b.albumSizeUsed/(b.albumSize+0.0)*100),decimal(18,2))) end ) AS rate
from HrmSubcompany a LEFT JOIN AlbumSubcompany b ON a.id=b.subcompanyId
order by a.supsubcomid,a.id
</select>
<select id="selectHrmAlbumSubcompanyVO" resultType="weaver.conn.mybatis.bean.HrmAlbumSubcompanyVO" databaseId="oracle">
select a.*,b.*,
round(b.albumsize/(1000+0.0),2) as totalsize,
round(b.albumSizeUsed/(1000+0.0),2) as usesize,
round((b.albumSize-b.albumSizeUsed)/(1000+0.0),2) as remainsize,
(case b.albumSize when 0 then 0 else round((b.albumSizeUsed/(b.albumSize+0.0)*100),2) end ) AS rate
from HrmSubcompany a LEFT JOIN AlbumSubcompany b ON a.id=b.subcompanyId
order by a.supsubcomid,a.id
</select>
<select id="selectHrmAlbumSubcompanyVO" resultType="weaver.conn.mybatis.bean.HrmAlbumSubcompanyVO" databaseId="sqlserver">
select a.*,b.*,(convert(decimal(18,2),b.albumsize/(1000+0.0))) as totalsize,
(convert(decimal(18,2),(b.albumSizeUsed/(1000+0.0)))) as usesize,
(convert(decimal(18,2),(b.albumSize-b.albumSizeUsed)/(1000+0.0))) as remainsize,
(case b.albumSize when 0 then 0 else (convert(decimal(18,2),(b.albumSizeUsed/(b.albumSize+0.0)*100))) end ) AS rate
from HrmSubcompany a LEFT JOIN AlbumSubcompany b ON a.id=b.subcompanyId
order by a.supsubcomid,a.id
</select>
<!-- resultMap使用说明 -->
<!-- resultMap与resultType不能同时使用 -->
<!-- resultMap的优势在于,一次配置,随处调用 -->
<!-- 如果要在其它Mapper中调用,调用处需要写resultMap的全路径 -->
<!-- resultMap中也可以配置collection或更为复杂的bean的映射,有需要请查看MyBatis官方文档,这里不再展开 -->
<resultMap id="blogResult" type="weaver.conn.mybatis.bean.Blog">
<id property="id" column="id" />
<result property="title" column="blog_title"/>
<!-- 关联属性中实体类的写法 -->
<association property="author" javaType="weaver.conn.mybatis.bean.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"/>
</association>
</resultMap>
<!-- #{}与${} -->
<!-- mybatis会将#{}转为预处理语句,下面的where条件转换后形如 where id = ? -->
<!-- 而${}则会直接拼进sql语句中,所以有sql注入风险,一般用于 order by ${columnName} ${columnAsc}以及 select * from ${tableName} 这样的地方-->
<select id="selectBlog" resultMap="blogResult">
select * from blog where id = #{id} order by ${orderColumn}
</select>
<!-- 传入单个参数时,不想使用Map或javabean,可以使用下面的写法 -->
<select id="selectBlog2" resultMap="blogResult">
select * from blog order by ${_parameter}
</select>
<!-- 传入数组时,可以使用下面的写法,按数组顺序确定参数位置 -->
<select id="selectBlog3" resultMap="blogResult">
select * from blog where id = #{_parameter[0]} order by ${_parameter[1]}
</select>
<!-- insert -->
<!-- 多传参时,请传入map或javabean。Mybatis会根据Map的key或javaBean的prop来确定参数的key -->
<insert id="insert">
insert into workflow_base(id, workflow_name) values (#{id}, #{workflowName});
</insert>
<!-- 自增主键的insert -->
<!-- 如此标识之后,插入完毕后会将自增主键中的值配置到传入参数的id属性中-->
<insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id">
insert into Author (username,password,email,bio)
values (#{username},#{password},#{email},#{bio})
</insert>
<!-- 调用sequence的insert -->
<!-- 调用完毕后,也会获得自增的主键 -->
<insert id="insertAuthor" databaseId="oracle">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select AuthorSeq.nextval from dual
</selectKey>
insert into Author
(id, username, password, email,bio, favourite_section)
values
(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
</insert>
<!-- foreach批量插入 -->
<insert id="insertAuthor" databaseId="mysql" 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>
<!-- update与delete -->
<update id="updateAuthor">
update author set name = #{name} where id = #{id}
</update>
<delete id="deleteAuthor">
delete from author where id = #{id}
</delete>
<!-- sql块-->
<!-- sql块中也可以接受传参,不过这里不再展开了 -->
<sql id="subQuery">
select blog.id,blog.name,author.name authorName, author.sex from blog, author
where blog.author = author.id
</sql>
<select id="selectBlogNumByAuthor">
select authorName, count(1) num
from (
<include refid="subQuery"></include>
) a group by authorName
</select>
<select id="selectBlogNumBySex">
select sex, count(1) num
from (
<include refid="subQuery"></include>
) a group by sex
</select>
</mapper>