Skip to content

Commit 5fb8958

Browse files
committed
1 parent d64efdb commit 5fb8958

File tree

6 files changed

+172
-2
lines changed

6 files changed

+172
-2
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.apache.ibatis.type;
2+
3+
import java.math.BigInteger;
4+
import java.sql.CallableStatement;
5+
import java.sql.PreparedStatement;
6+
import java.sql.ResultSet;
7+
import java.sql.SQLException;
8+
9+
public class BigIntegerTypeHandler extends BaseTypeHandler {
10+
11+
public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType)
12+
throws SQLException {
13+
BigInteger bigint = (BigInteger) parameter;
14+
ps.setLong(i, bigint.longValue());
15+
}
16+
17+
public Object getNullableResult(ResultSet rs, String columnName)
18+
throws SQLException {
19+
return BigInteger.valueOf(rs.getLong(columnName));
20+
}
21+
22+
public Object getNullableResult(CallableStatement cs, int columnIndex)
23+
throws SQLException {
24+
return BigInteger.valueOf(cs.getLong(columnIndex));
25+
}
26+
}

src/main/java/org/apache/ibatis/type/TypeHandlerRegistry.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import java.lang.annotation.Annotation;
66
import java.math.BigDecimal;
7+
import java.math.BigInteger;
78
import java.util.Date;
89
import java.util.HashMap;
910
import java.util.EnumMap;
@@ -73,9 +74,13 @@ public TypeHandlerRegistry() {
7374
register(JdbcType.NCHAR, new NStringTypeHandler());
7475
register(JdbcType.NCLOB, new NClobTypeHandler());
7576

77+
register(BigInteger.class, new BigIntegerTypeHandler());
78+
register(JdbcType.BIGINT, new LongTypeHandler());
79+
7680
register(BigDecimal.class, new BigDecimalTypeHandler());
77-
register(JdbcType.BIGINT, new BigDecimalTypeHandler());
7881
register(JdbcType.REAL, new BigDecimalTypeHandler());
82+
register(JdbcType.DECIMAL, new BigDecimalTypeHandler());
83+
register(JdbcType.NUMERIC, new BigDecimalTypeHandler());
7984

8085
register(byte[].class, new ByteArrayTypeHandler());
8186
register(byte[].class, JdbcType.BLOB, new BlobTypeHandler());

src/test/java/org/apache/ibatis/submitted/dynsql/CreateDB.sql

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,18 @@ insert into ibtest.names (id, description) values(3, 'Pebbles');
1111
insert into ibtest.names (id, description) values(4, 'Barney');
1212
insert into ibtest.names (id, description) values(5, 'Betty');
1313
insert into ibtest.names (id, description) values(6, 'Bamm Bamm');
14+
15+
create table ibtest.numerics (
16+
id int,
17+
tinynumber tinyint,
18+
smallnumber smallint,
19+
longinteger bigint,
20+
biginteger bigint,
21+
numericnumber numeric(10,2),
22+
decimalnumber decimal(10,2),
23+
realnumber real,
24+
floatnumber float,
25+
doublenumber double
26+
);
27+
28+
insert into ibtest.numerics values(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

src/test/java/org/apache/ibatis/submitted/dynsql/DynSql.xml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,19 @@
55
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
66

77
<mapper namespace="org.apache.ibatis.submitted.dynsql">
8+
<resultMap type="org.apache.ibatis.submitted.dynsql.NumericRow" id="numericRow">
9+
<result column="id" property="id" jdbcType="INTEGER"/>
10+
<result column="tinynumber" property="tinynumber" jdbcType="TINYINT"/>
11+
<result column="smallnumber" property="smallnumber" jdbcType="SMALLINT"/>
12+
<result column="longinteger" property="longinteger" jdbcType="BIGINT"/>
13+
<result column="biginteger" property="biginteger" jdbcType="BIGINT"/>
14+
<result column="numericnumber" property="numericnumber" jdbcType="NUMERIC"/>
15+
<result column="decimalnumber" property="decimalnumber" jdbcType="DECIMAL"/>
16+
<result column="realnumber" property="realnumber" jdbcType="REAL"/>
17+
<result column="floatnumber" property="floatnumber" jdbcType="FLOAT"/>
18+
<result column="doublenumber" property="doublenumber" jdbcType="DOUBLE"/>
19+
</resultMap>
20+
821
<select id="select" parameterType="org.apache.ibatis.submitted.dynsql.Parameter" resultType="map">
922
<if test="enabled">
1023
<foreach collection="ids" item="id" separator="union">
@@ -20,4 +33,8 @@
2033
select * from ${schema}.names where id = #{id}
2134
</foreach>
2235
</select>
36+
37+
<select id="selectNumerics" resultMap="numericRow">
38+
select * from ibtest.numerics
39+
</select>
2340
</mapper>

src/test/java/org/apache/ibatis/submitted/dynsql/DynSqlTest.java

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
11
package org.apache.ibatis.submitted.dynsql;
22

3+
import static org.junit.Assert.assertTrue;
4+
import static org.junit.Assert.assertEquals;
5+
36
import org.apache.ibatis.io.Resources;
47
import org.apache.ibatis.jdbc.ScriptRunner;
58
import org.apache.ibatis.session.SqlSession;
69
import org.apache.ibatis.session.SqlSessionFactory;
710
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
8-
import static org.junit.Assert.assertTrue;
911
import org.junit.BeforeClass;
1012
import org.junit.Test;
1113

1214
import java.io.Reader;
15+
import java.math.BigDecimal;
16+
import java.math.BigInteger;
1317
import java.sql.Connection;
1418
import java.util.ArrayList;
1519
import java.util.List;
@@ -84,4 +88,29 @@ public void testSelectSimple() {
8488
sqlSession.close();
8589
}
8690
}
91+
92+
@Test
93+
public void testNumerics() {
94+
SqlSession sqlSession = sqlSessionFactory.openSession();
95+
try {
96+
List<NumericRow> answer = sqlSession.selectList("org.apache.ibatis.submitted.dynsql.selectNumerics");
97+
98+
assertTrue(answer.size() == 1);
99+
100+
NumericRow row = answer.get(0);
101+
assertEquals(1, (int) row.getId());
102+
assertEquals(2, (int) row.getTinynumber());
103+
assertEquals(3, (int) row.getSmallnumber());
104+
assertEquals(4l, (long) row.getLonginteger());
105+
assertEquals(new BigInteger("5"), row.getBiginteger());
106+
assertEquals(new BigDecimal("6.00"), row.getNumericnumber());
107+
assertEquals(new BigDecimal("7.00"), row.getDecimalnumber());
108+
assertEquals((Float) 8.0f, row.getRealnumber());
109+
assertEquals((Float) 9.0f, row.getFloatnumber());
110+
assertEquals((Double) 10.0, row.getDoublenumber());
111+
112+
} finally {
113+
sqlSession.close();
114+
}
115+
}
87116
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package org.apache.ibatis.submitted.dynsql;
2+
3+
import java.math.BigDecimal;
4+
import java.math.BigInteger;
5+
6+
7+
public class NumericRow {
8+
private Integer id;
9+
private Byte tinynumber;
10+
private Short smallnumber;
11+
private Long longinteger;
12+
private BigInteger biginteger;
13+
private BigDecimal numericnumber;
14+
private BigDecimal decimalnumber;
15+
private Float realnumber;
16+
private Float floatnumber;
17+
private Double doublenumber;
18+
public Integer getId() {
19+
return id;
20+
}
21+
public void setId(Integer id) {
22+
this.id = id;
23+
}
24+
public Byte getTinynumber() {
25+
return tinynumber;
26+
}
27+
public void setTinynumber(Byte tinynumber) {
28+
this.tinynumber = tinynumber;
29+
}
30+
public Short getSmallnumber() {
31+
return smallnumber;
32+
}
33+
public void setSmallnumber(Short smallnumber) {
34+
this.smallnumber = smallnumber;
35+
}
36+
public Long getLonginteger() {
37+
return longinteger;
38+
}
39+
public void setLonginteger(Long longinteger) {
40+
this.longinteger = longinteger;
41+
}
42+
public BigInteger getBiginteger() {
43+
return biginteger;
44+
}
45+
public void setBiginteger(BigInteger biginteger) {
46+
this.biginteger = biginteger;
47+
}
48+
public BigDecimal getNumericnumber() {
49+
return numericnumber;
50+
}
51+
public void setNumericnumber(BigDecimal numericnumber) {
52+
this.numericnumber = numericnumber;
53+
}
54+
public BigDecimal getDecimalnumber() {
55+
return decimalnumber;
56+
}
57+
public void setDecimalnumber(BigDecimal decimalnumber) {
58+
this.decimalnumber = decimalnumber;
59+
}
60+
public Float getRealnumber() {
61+
return realnumber;
62+
}
63+
public void setRealnumber(Float realnumber) {
64+
this.realnumber = realnumber;
65+
}
66+
public Float getFloatnumber() {
67+
return floatnumber;
68+
}
69+
public void setFloatnumber(Float floatnumber) {
70+
this.floatnumber = floatnumber;
71+
}
72+
public Double getDoublenumber() {
73+
return doublenumber;
74+
}
75+
public void setDoublenumber(Double doublenumber) {
76+
this.doublenumber = doublenumber;
77+
}
78+
}

0 commit comments

Comments
 (0)