getBigDecimal

This commit is contained in:
redkale
2024-09-23 22:56:53 +08:00
parent c098674ab8
commit 6aa4e87b35
6 changed files with 89 additions and 0 deletions

View File

@@ -6,6 +6,7 @@
package org.redkale.source;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.*;
import java.util.*;
import java.util.concurrent.*;
@@ -3001,6 +3002,24 @@ public class DataJdbcSource extends AbstractDataSqlSource {
}
}
@Override
public BigDecimal getBigDecimal(int index) {
try {
return rr.getBigDecimal(index);
} catch (SQLException e) {
throw new SourceException(e);
}
}
@Override
public BigDecimal getBigDecimal(String column) {
try {
return rr.getBigDecimal(column);
} catch (SQLException e) {
throw new SourceException(e);
}
}
@Override
public Boolean getBoolean(int index) {
try {

View File

@@ -5,6 +5,7 @@
package org.redkale.source;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import org.redkale.annotation.ClassDepends;
import org.redkale.annotation.Nullable;
@@ -44,6 +45,13 @@ public interface DataResultSetRow {
@ClassDepends
public byte[] getBytes(String columnLabel);
// columnIdex从1开始
@ClassDepends
public BigDecimal getBigDecimal(int columnIdex);
@ClassDepends
public BigDecimal getBigDecimal(String columnLabel);
// columnIdex从1开始
@ClassDepends
public Boolean getBoolean(int columnIdex);

View File

@@ -5,6 +5,7 @@
package org.redkale.source;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Objects;
import org.redkale.annotation.ClassDepends;
import org.redkale.asm.Asms;
@@ -434,6 +435,25 @@ public abstract class EntityFullFunc<T> {
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "[B");
continue;
}
} else if (attr.type() == BigDecimal.class) {
if (setter != null) {
String desc = Type.getMethodDescriptor(setter);
mv.visitVarInsn(ALOAD, 2); // obj
mv.visitVarInsn(ALOAD, 1); // row
Asms.visitInsn(mv, attrIndex);
mv.visitMethodInsn(
INVOKEINTERFACE, rowName, "getBigDecimal", "(I)Ljava/math/BigDecimal;", true);
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
continue;
} else if (field != null) {
mv.visitVarInsn(ALOAD, 2); // obj
mv.visitVarInsn(ALOAD, 1); // row
Asms.visitInsn(mv, attrIndex);
mv.visitMethodInsn(
INVOKEINTERFACE, rowName, "getBigDecimal", "(I)Ljava/math/BigDecimal;", true);
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "Ljava/math/BigDecimal;");
continue;
}
}
mv.visitVarInsn(ALOAD, 0);
Asms.visitInsn(mv, attrIndex);
@@ -737,6 +757,23 @@ public abstract class EntityFullFunc<T> {
mv.visitTypeInsn(CHECKCAST, "[B");
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "[B");
}
} else if (attr.type() == BigDecimal.class) {
if (setter != null) {
String desc = Type.getMethodDescriptor(setter);
mv.visitVarInsn(ALOAD, 2); // obj
mv.visitVarInsn(ALOAD, 1); // values
Asms.visitInsn(mv, attrIndex);
mv.visitInsn(AALOAD);
mv.visitTypeInsn(CHECKCAST, "java/math/BigDecimal");
mv.visitMethodInsn(INVOKEVIRTUAL, entityName, setter.getName(), desc, false);
} else if (field != null) {
mv.visitVarInsn(ALOAD, 2); // obj
mv.visitVarInsn(ALOAD, 1); // values
Asms.visitInsn(mv, attrIndex);
mv.visitInsn(AALOAD);
mv.visitTypeInsn(CHECKCAST, "java/math/BigDecimal");
mv.visitFieldInsn(PUTFIELD, entityName, field.getName(), "Ljava/math/BigDecimal;");
}
} else {
if (setter != null) {
String desc = Type.getMethodDescriptor(setter);

View File

@@ -4,6 +4,7 @@
*/
package org.redkale.test.source;
import java.math.BigDecimal;
import java.util.List;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
@@ -78,6 +79,16 @@ public class EntityFullFuncTest {
return null;
}
@Override
public BigDecimal getBigDecimal(int columnIdex) {
return BigDecimal.ZERO;
}
@Override
public BigDecimal getBigDecimal(String columnLabel) {
return BigDecimal.ZERO;
}
@Override
public Boolean getBoolean(int columnIdex) {
return true;

View File

@@ -4,6 +4,7 @@
*/
package org.redkale.test.source;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Set;
import org.redkale.convert.json.JsonConvert;
@@ -25,6 +26,8 @@ public class FullBean {
private BigInteger number;
private BigDecimal scale;
private boolean flag;
private short status;
@@ -111,6 +114,14 @@ public class FullBean {
this.number = number;
}
public BigDecimal getScale() {
return scale;
}
public void setScale(BigDecimal scale) {
this.scale = scale;
}
public boolean isFlag() {
return flag;
}

View File

@@ -4,6 +4,7 @@
*/
package org.redkale.test.source;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Set;
import org.redkale.convert.json.JsonConvert;
@@ -25,6 +26,8 @@ public class FullBean2 {
public BigInteger number;
public BigDecimal scale;
public boolean flag;
public short status;