forked from bwajtr/java-persistence-frameworks-comparison
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDataRepositoryMapper.xml
142 lines (125 loc) · 4.73 KB
/
DataRepositoryMapper.xml
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
131
132
133
134
135
136
137
138
139
140
141
142
<?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="com.clevergang.dbtests.repository.impl.mybatis.DataRepositoryMapper">
<select id="findCompany" resultType="com.clevergang.dbtests.repository.api.data.Company">
SELECT *
FROM company
WHERE pid = #{pid}
</select>
<select id="findCompanyStatic" statementType="STATEMENT"
resultType="com.clevergang.dbtests.repository.api.data.Company">
SELECT *
FROM company
WHERE pid = ${pid}
</select>
<select id="findDepartment" resultType="com.clevergang.dbtests.repository.api.data.Department">
SELECT *
FROM department
WHERE pid = #{pid}
</select>
<select id="employeesWithSalaryGreaterThan" resultType="com.clevergang.dbtests.repository.api.data.Employee">
SELECT *
FROM employee
WHERE salary > #{minSalary}
</select>
<select id="findDepartmentsOfCompany" resultType="com.clevergang.dbtests.repository.api.data.Department">
SELECT *
FROM department
WHERE company_pid = #{pid}
ORDER BY pid;
</select>
<select id="getProjectsWithCostsGreaterThan"
resultType="com.clevergang.dbtests.repository.api.data.ProjectsWithCostsGreaterThanOutput">
WITH
project_info AS (
SELECT
project.pid project_pid,
project.name project_name,
salary monthly_cost,
company.name company_name
FROM project
JOIN projectemployee ON project.pid = projectemployee.project_pid
JOIN employee ON projectemployee.employee_pid = employee.pid
LEFT JOIN department ON employee.department_pid = department.pid
LEFT JOIN company ON department.company_pid = company.pid
),
project_cost AS (
SELECT
project_pid,
sum(monthly_cost) total_cost
FROM project_info
GROUP BY project_pid
)
SELECT
project_name AS projectName,
total_cost AS totalCost,
company_name AS companyName,
sum(monthly_cost) AS companyCost
FROM project_info
JOIN project_cost USING (project_pid)
WHERE total_cost > #{totalCostBoundary}
GROUP BY project_name, total_cost, company_name
ORDER BY company_name
</select>
<insert id="insertProject" useGeneratedKeys="true" keyColumn="pid" keyProperty="pid">
INSERT INTO project (name, datestarted)
VALUES (#{name}, #{date})
RETURNING pid;
</insert>
<update id="updateEmployee">
UPDATE employee
SET department_pid = #{departmentPid},
name = #{name},
surname = #{surname},
email = #{email},
salary = #{salary}
WHERE pid = #{pid};
</update>
<delete id="deleteDepartments">
Delete from department
where pid in (
<foreach item="item" collection="departmentsToDelete" separator=",">
#{item.pid}
</foreach>
)
</delete>
<insert id="insertDepartment">
INSERT INTO department (company_pid, name)
VALUES (#{companyPid}, #{name})
RETURNING pid
</insert>
<update id="updateDepartment">
UPDATE department
SET
company_pid = #{companyPid},
name = #{name}
WHERE pid = #{pid}
</update>
<select id="callRegisterEmployee" resultType="com.clevergang.dbtests.repository.api.data.RegisterEmployeeOutput">
SELECT
employee_id AS employeePid,
department_id AS departmentPid,
company_id AS companyPid
FROM register_employee(#{name}, #{surname}, #{email}, #{salary}, #{departmentName}, #{companyName})
</select>
<select id="getProjectsCount" resultType="java.lang.Integer">
SELECT count(*)
FROM project
</select>
<select id="findEmployee" resultType="com.clevergang.dbtests.repository.api.data.Employee">
SELECT *
FROM employee
WHERE pid = #{pid}
</select>
<select id="findProject" resultType="com.clevergang.dbtests.repository.api.data.Project">
SELECT pid, name, datestarted as date
FROM project
WHERE pid = #{pid}
</select>
<delete id="removeProject">
DELETE FROM project
WHERE pid = #{pid}
</delete>
</mapper>