View Javadoc
1   /*
2    *    Copyright 2016-2025 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       https://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
15   */
16  package examples.column.comparison;
17  
18  import static examples.column.comparison.ColumnComparisonDynamicSqlSupport.*;
19  import static org.assertj.core.api.Assertions.assertThat;
20  import static org.mybatis.dynamic.sql.SqlBuilder.*;
21  
22  import java.util.List;
23  
24  import org.junit.jupiter.api.Test;
25  import org.mybatis.dynamic.sql.render.RenderingStrategies;
26  import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
27  import org.springframework.beans.factory.annotation.Autowired;
28  import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
29  
30  @SpringJUnitConfig(classes = ColumnComparisonConfiguration.class)
31  class ColumnComparisonTest {
32  
33      @Autowired
34      private ColumnComparisonMapper mapper;
35  
36      @Test
37      void testColumnComparisonLessThan() {
38          SelectStatementProvider selectStatement = select(number1, number2)
39                  .from(columnComparison)
40                  .where(number1, isLessThan(number2))
41                  .orderBy(number1, number2)
42                  .build()
43                  .render(RenderingStrategies.MYBATIS3);
44  
45          String expected = "select number1, number2 "
46                  + "from ColumnComparison "
47                  + "where number1 < number2 "
48                  + "order by number1, number2";
49  
50          List<ColumnComparisonRecord> records = mapper.selectMany(selectStatement);
51  
52          assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
53          assertThat(records).hasSize(5);
54          assertThat(records.get(0).number1()).isEqualTo(1);
55          assertThat(records.get(4).number1()).isEqualTo(5);
56      }
57  
58      @Test
59      void testColumnComparisonLessThanOrEqual() {
60          SelectStatementProvider selectStatement = select(number1, number2)
61                  .from(columnComparison)
62                  .where(number1, isLessThanOrEqualTo(number2))
63                  .orderBy(number1, number2)
64                  .build()
65                  .render(RenderingStrategies.MYBATIS3);
66  
67          String expected = "select number1, number2 "
68                  + "from ColumnComparison "
69                  + "where number1 <= number2 "
70                  + "order by number1, number2";
71  
72          List<ColumnComparisonRecord> records = mapper.selectMany(selectStatement);
73  
74          assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
75          assertThat(records).hasSize(6);
76          assertThat(records.get(0).number1()).isEqualTo(1);
77          assertThat(records.get(5).number2()).isEqualTo(6);
78      }
79  
80      @Test
81      void testColumnComparisonGreaterThan() {
82          SelectStatementProvider selectStatement = select(number1, number2)
83                  .from(columnComparison)
84                  .where(number1, isGreaterThan(number2))
85                  .orderBy(number1, number2)
86                  .build()
87                  .render(RenderingStrategies.MYBATIS3);
88  
89          String expected = "select number1, number2 "
90                  + "from ColumnComparison "
91                  + "where number1 > number2 "
92                  + "order by number1, number2";
93  
94          List<ColumnComparisonRecord> records = mapper.selectMany(selectStatement);
95  
96          assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
97          assertThat(records).hasSize(5);
98          assertThat(records.get(0).number1()).isEqualTo(7);
99          assertThat(records.get(4).number1()).isEqualTo(11);
100     }
101 
102     @Test
103     void testColumnComparisonGreaterThanOrEqual() {
104         SelectStatementProvider selectStatement = select(number1, number2)
105                 .from(columnComparison)
106                 .where(number1, isGreaterThanOrEqualTo(number2))
107                 .orderBy(number1, number2)
108                 .build()
109                 .render(RenderingStrategies.MYBATIS3);
110 
111         String expected = "select number1, number2 "
112                 + "from ColumnComparison "
113                 + "where number1 >= number2 "
114                 + "order by number1, number2";
115 
116         List<ColumnComparisonRecord> records = mapper.selectMany(selectStatement);
117 
118         assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
119         assertThat(records).hasSize(6);
120         assertThat(records.get(0).number1()).isEqualTo(6);
121         assertThat(records.get(5).number1()).isEqualTo(11);
122     }
123 
124     @Test
125     void testColumnComparisonEqual() {
126         SelectStatementProvider selectStatement = select(number1, number2)
127                 .from(columnComparison)
128                 .where(number1, isEqualTo(number2))
129                 .orderBy(number1, number2)
130                 .build()
131                 .render(RenderingStrategies.MYBATIS3);
132 
133         String expected = "select number1, number2 "
134                 + "from ColumnComparison "
135                 + "where number1 = number2 "
136                 + "order by number1, number2";
137 
138         List<ColumnComparisonRecord> records = mapper.selectMany(selectStatement);
139 
140         assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
141         assertThat(records).hasSize(1);
142         assertThat(records.get(0).number1()).isEqualTo(6);
143     }
144 
145     @Test
146     void testColumnComparisonNotEqual() {
147         SelectStatementProvider selectStatement = select(number1, number2)
148                 .from(columnComparison)
149                 .where(number1, isNotEqualTo(number2))
150                 .orderBy(number1, number2)
151                 .build()
152                 .render(RenderingStrategies.MYBATIS3);
153 
154         String expected = "select number1, number2 "
155                 + "from ColumnComparison "
156                 + "where number1 <> number2 "
157                 + "order by number1, number2";
158 
159         List<ColumnComparisonRecord> records = mapper.selectMany(selectStatement);
160 
161         assertThat(selectStatement.getSelectStatement()).isEqualTo(expected);
162         assertThat(records).hasSize(10);
163         assertThat(records.get(0).number1()).isEqualTo(1);
164         assertThat(records.get(9).number1()).isEqualTo(11);
165     }
166 
167     @Test
168     void testHelperMethod() {
169         List<ColumnComparisonRecord> records = mapper.select(d ->
170                 d.where(number1, isNotEqualTo(number2))
171                         .orderBy(number1, number2)
172         );
173 
174         assertThat(records).hasSize(10);
175         assertThat(records.get(0).number1()).isEqualTo(1);
176         assertThat(records.get(9).number1()).isEqualTo(11);
177     }
178 }