1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package examples.paging;
17
18 import static examples.animal.data.AnimalDataDynamicSqlSupport.id;
19 import static org.assertj.core.api.Assertions.assertThat;
20
21 import java.io.InputStream;
22 import java.io.InputStreamReader;
23 import java.sql.Connection;
24 import java.sql.DriverManager;
25 import java.util.List;
26
27 import org.apache.ibatis.datasource.unpooled.UnpooledDataSource;
28 import org.apache.ibatis.jdbc.ScriptRunner;
29 import org.apache.ibatis.mapping.Environment;
30 import org.apache.ibatis.session.Configuration;
31 import org.apache.ibatis.session.SqlSession;
32 import org.apache.ibatis.session.SqlSessionFactory;
33 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
34 import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
35 import org.junit.jupiter.api.BeforeEach;
36 import org.junit.jupiter.api.Test;
37
38 import examples.animal.data.AnimalData;
39
40 class LimitAndOffsetTest {
41
42 private static final String JDBC_URL = "jdbc:hsqldb:mem:aname";
43 private static final String JDBC_DRIVER = "org.hsqldb.jdbcDriver";
44
45 private SqlSessionFactory sqlSessionFactory;
46
47 @BeforeEach
48 void setup() throws Exception {
49 Class.forName(JDBC_DRIVER);
50 try (InputStream is = getClass().getResourceAsStream("/examples/animal/data/CreateAnimalData.sql")) {
51 assert is != null;
52 try (Connection connection = DriverManager.getConnection(JDBC_URL, "sa", "");
53 InputStreamReader isr = new InputStreamReader(is)) {
54 ScriptRunner sr = new ScriptRunner(connection);
55 sr.setLogWriter(null);
56 sr.runScript(isr);
57 }
58 }
59
60 UnpooledDataSource ds = new UnpooledDataSource(JDBC_DRIVER, JDBC_URL, "sa", "");
61 Environment environment = new Environment("test", new JdbcTransactionFactory(), ds);
62 Configuration config = new Configuration(environment);
63 config.addMapper(LimitAndOffsetMapper.class);
64 sqlSessionFactory = new SqlSessionFactoryBuilder().build(config);
65 }
66
67 @Test
68 void testLimitAndOffset() {
69 try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
70 LimitAndOffsetMapper mapper = sqlSession.getMapper(LimitAndOffsetMapper.class);
71
72 List<AnimalData> rows = mapper.selectWithLimitAndOffset(5, 3)
73 .orderBy(id)
74 .build()
75 .execute();
76
77 assertThat(rows).hasSize(5);
78 assertThat(rows.get(0).id()).isEqualTo(4);
79 }
80 }
81
82 @Test
83 void testLimitAndOffsetDistinct() {
84 try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
85 LimitAndOffsetMapper mapper = sqlSession.getMapper(LimitAndOffsetMapper.class);
86
87 List<AnimalData> rows = mapper.selectDistinctWithLimitAndOffset(5, 3)
88 .orderBy(id)
89 .build()
90 .execute();
91
92 assertThat(rows).hasSize(5);
93 assertThat(rows.get(0).id()).isEqualTo(4);
94 }
95 }
96 }