jdbcType="BIGINT" 和class Long 不匹配
时间: 2023-07-06 16:30:54 浏览: 170
这是因为,在使用 MyBatis 进行数据库操作时,MyBatis 会将从数据库中查询到的数据转换成对应的 Java 类型,以便于在 Java 代码中进行处理。而在 MyBatis 中,JDBC 类型和 Java 类型之间存在一定的映射关系,可以通过 `jdbcType` 属性来指定查询结果应该转换成的 Java 类型。
在这个问题中,`jdbcType="BIGINT"` 表示查询结果的 JDBC 类型为 `BIGINT`,而 MyBatis 默认将 `BIGINT` 映射成 `java.lang.Long` 类型。因此,如果你在 MyBatis 的映射文件中将查询结果映射成 `Long` 类型,在执行查询操作时就不会出现类型不匹配的问题。
如果你确实需要将查询结果映射成其他类型,可以在映射文件中通过 `resultType` 属性来指定。例如,如果你希望将查询结果映射成 `java.math.BigInteger` 类型,可以这样写:
```
<resultMap id="myResultMap" type="java.math.BigInteger">
<result column="my_column" jdbcType="BIGINT"/>
</resultMap>
```
这样,在执行查询操作时,MyBatis 就会将查询结果转换成 `java.math.BigInteger` 类型,避免了类型不匹配的问题。
相关问题
mybatis bigint jdbctype
In MyBatis, if you want to map a column of type `BIGINT` in your database to a Java type, you can use the `java.lang.Long` data type.
To specify the JDBC type for the mapping, you can use the `jdbcType` attribute in your MyBatis mapping XML file or annotations. For a `BIGINT` column, the corresponding JDBC type is `BIGINT`. Here's an example:
Using XML:
```xml
<resultMap id="myResultMap" type="com.example.MyEntity">
<id property="id" column="id" jdbcType="BIGINT"/>
<!-- Other mappings -->
</resultMap>
```
Using annotations:
```java
public class MyEntity {
@Id
@Column(name = "id", jdbcType = JdbcType.BIGINT)
private Long id;
// Other fields and getters/setters
}
```
By specifying the `jdbcType` as `BIGINT`, MyBatis will handle the mapping between the `BIGINT` database column and the `Long` Java type.
JacksonTypeHandler解析Long类型为Integer,GsonTypeHandler解析Long类型为Double
JacksonTypeHandler和GsonTypeHandler都是MybatisPlus中使用的类型处理器,它们分别使用了Jackson库和Gson库来进行Java对象与JSON字符串之间的转换。
如果你遇到了JacksonTypeHandler将Long类型转换为Integer类型的问题,或者GsonTypeHandler将Long类型转换为Double类型的问题,可能是因为你在MybatisPlus映射文件中使用了错误的Java类型。
首先,请检查你的数据库表结构是否正确,确保对应的列类型为Long类型。
然后,请检查你的MybatisPlus映射文件中是否正确定义了Java类型。例如,如果你的列名为"age",并且对应的Java属性为age,那么你需要在映射文件中将其定义为Long类型:
```
<resultMap id="userResultMap" type="User">
<result column="age" property="age" jdbcType="BIGINT" javaType="java.lang.Long" />
</resultMap>
```
如果你使用了注解方式进行映射,那么你需要在对应的Java属性上标注@JsonSerialize和@JsonDeserialize注解,指定对应的序列化和反序列化类,例如:
```
@JsonSerialize(using = ToStringSerializer.class)
@JsonDeserialize(using = LongDeserializer.class)
private Long age;
```
最后,如果你使用了自定义的Jackson或Gson配置,那么请确保你正确地配置了Long类型的序列化和反序列化。你可以使用以下代码来配置Long类型的序列化和反序列化:
```
// 配置Jackson
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Long.class, ToStringSerializer.instance);
module.addDeserializer(Long.class, LongDeserializer.instance);
mapper.registerModule(module);
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
typeHandlerRegistry.register(Long.class, new JacksonTypeHandler<>(Long.class));
// 配置Gson
Gson gson = new GsonBuilder().registerTypeAdapter(Long.class, new LongDeserializer()).create();
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
typeHandlerRegistry.register(Long.class, new GsonTypeHandler<>(gson, Long.class));
```
总之,如果你发现JacksonTypeHandler或GsonTypeHandler将Long类型转换为了错误的类型,请检查你的Java类型定义以及Jackson或Gson配置是否正确。
阅读全文