Skip to content

Commit f66de16

Browse files
committed
Tests and demo code for stored procedures with MyBatis
1 parent 1d70f7b commit f66de16

File tree

7 files changed

+475
-0
lines changed

7 files changed

+475
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
drop procedure sptest.getnames if exists]
2+
drop procedure sptest.getname if exists]
3+
drop procedure sptest.adder if exists]
4+
drop table sptest.names if exists]
5+
drop schema sptest if exists]
6+
7+
create schema sptest]
8+
9+
create procedure sptest.adder(in addend1 integer, in addend2 integer, out theSum integer)
10+
begin atomic
11+
set theSum = addend1 + addend2;
12+
end]
13+
14+
create table sptest.names (
15+
id integer generated by default as identity not null,
16+
first_name varchar(20),
17+
last_name varchar(20),
18+
primary key(id)
19+
)]
20+
21+
insert into sptest.names (first_name, last_name) values('Fred', 'Flintstone')]
22+
insert into sptest.names (first_name, last_name) values('Wilma', 'Flintstone')]
23+
insert into sptest.names (first_name, last_name) values('Barney', 'Rubble')]
24+
insert into sptest.names (first_name, last_name) values('Betty', 'Rubble')]
25+
26+
-- note that these create procedure statements will fail until hsqldb 2.0.1
27+
create procedure sptest.getname(in nameId integer)
28+
reads sql data
29+
dynamic result sets 1
30+
BEGIN ATOMIC
31+
declare cur cursor for select * from sptest.names where id = nameId;
32+
open cur;
33+
END]
34+
35+
create procedure sptest.getnames(in lowestId int, out totalrows integer)
36+
reads sql data
37+
dynamic result sets 1
38+
BEGIN ATOMIC
39+
declare cur cursor for select * from sptest.names where id >= lowestId;
40+
select count(*) into totalrows from sptest.names where id >= lowestId;
41+
open cur;
42+
END]
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="UTF-8" ?>
2+
3+
<!DOCTYPE configuration
4+
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
5+
"http://mybatis.org/dtd/mybatis-3-config.dtd">
6+
<configuration>
7+
8+
<settings>
9+
<setting name="cacheEnabled" value="true"/>
10+
<setting name="lazyLoadingEnabled" value="false"/>
11+
<setting name="multipleResultSetsEnabled" value="true"/>
12+
<setting name="useColumnLabel" value="true"/>
13+
<setting name="useGeneratedKeys" value="false"/>
14+
<setting name="defaultExecutorType" value="SIMPLE"/>
15+
<setting name="defaultStatementTimeout" value="25000"/>
16+
</settings>
17+
18+
<environments default="development">
19+
<environment id="development">
20+
<transactionManager type="JDBC"/>
21+
<dataSource type="UNPOOLED">
22+
<property name="driver" value="org.hsqldb.jdbcDriver"/>
23+
<property name="url" value="jdbc:hsqldb:mem:sptest"/>
24+
<property name="username" value="sa"/>
25+
</dataSource>
26+
</environment>
27+
</environments>
28+
29+
<mappers>
30+
<mapper resource="org/apache/ibatis/submitted/sptests/SPMapper.xml" />
31+
</mappers>
32+
33+
</configuration>
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.apache.ibatis.submitted.sptests;
2+
3+
public class Name {
4+
private Integer id;
5+
private String firstName;
6+
private String lastName;
7+
public Integer getId() {
8+
return id;
9+
}
10+
public void setId(Integer id) {
11+
this.id = id;
12+
}
13+
public String getFirstName() {
14+
return firstName;
15+
}
16+
public void setFirstName(String firstName) {
17+
this.firstName = firstName;
18+
}
19+
public String getLastName() {
20+
return lastName;
21+
}
22+
public void setLastName(String lastName) {
23+
this.lastName = lastName;
24+
}
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.apache.ibatis.submitted.sptests;
2+
3+
public class Parameter {
4+
private Integer addend1;
5+
private Integer addend2;
6+
private Integer sum;
7+
public Integer getAddend1() {
8+
return addend1;
9+
}
10+
public void setAddend1(Integer addend1) {
11+
this.addend1 = addend1;
12+
}
13+
public Integer getAddend2() {
14+
return addend2;
15+
}
16+
public void setAddend2(Integer addend2) {
17+
this.addend2 = addend2;
18+
}
19+
public Integer getSum() {
20+
return sum;
21+
}
22+
public void setSum(Integer sum) {
23+
this.sum = sum;
24+
}
25+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.apache.ibatis.submitted.sptests;
2+
3+
import java.util.List;
4+
import java.util.Map;
5+
6+
public interface SPMapper {
7+
Object adder(Parameter parameter);
8+
void adder2(Parameter parameter);
9+
Name getName(Integer id);
10+
List<Name> getNames(Map<String, Object> parms);
11+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3+
<mapper namespace="org.apache.ibatis.submitted.sptests.SPMapper">
4+
<resultMap type="org.apache.ibatis.submitted.sptests.Name" id="nameResult">
5+
<result column="ID" property="id"/>
6+
<result column="FIRST_NAME" property="firstName"/>
7+
<result column="LAST_NAME" property="lastName"/>
8+
</resultMap>
9+
10+
<!-- Important things for stored procedures:
11+
1. Must set the statement type to CALLABLE
12+
2. Must use the JDBC standard escape sequence for stored procedures:
13+
{call xxx (parm1, parm2)}
14+
3. Must set the MODE of all parameters (IN, OUT, INOUT)
15+
4. All IN, OUT, and INOUT parameters must be a part of the
16+
parameterType or parameterMap (discouraged).
17+
5. resultType or resultMap (more typically) is only used if
18+
the procedure returns a result set. IMPORTANT: Oracle ref
19+
cursors are usually returned as parameters, NOT directly
20+
from the stored proc. So with ref cursors, resultMap
21+
and/or resultType is usually not used.
22+
-->
23+
24+
<select id="adder" parameterType="org.apache.ibatis.submitted.sptests.Parameter" statementType="CALLABLE">
25+
{call sptest.adder(
26+
#{addend1,jdbcType=INTEGER,mode=IN},
27+
#{addend2,jdbcType=INTEGER,mode=IN},
28+
#{sum,jdbcType=INTEGER,mode=OUT}
29+
)}
30+
</select>
31+
32+
<update id="adder2" parameterType="org.apache.ibatis.submitted.sptests.Parameter" statementType="CALLABLE">
33+
{call sptest.adder(
34+
#{addend1,jdbcType=INTEGER,mode=IN},
35+
#{addend2,jdbcType=INTEGER,mode=IN},
36+
#{sum,jdbcType=INTEGER,mode=OUT}
37+
)}
38+
</update>
39+
40+
<select id="getName" parameterType="java.lang.Integer" statementType="CALLABLE"
41+
resultMap="nameResult">
42+
{call sptest.getname(
43+
#{id,jdbcType=INTEGER,mode=IN})}
44+
</select>
45+
46+
<select id="getNames" parameterType="java.util.Map" statementType="CALLABLE"
47+
resultMap="nameResult">
48+
{call sptest.getnames(
49+
#{lowestId,jdbcType=INTEGER,mode=IN},
50+
#{totalRows,jdbcType=INTEGER,mode=OUT})}
51+
</select>
52+
</mapper>

0 commit comments

Comments
 (0)