mybatis No enum const class org.apache.ibatis.type.JdbcType.Integer

本文解决了一个关于 MyBatis 中 JDBCType 属性大小写敏感的问题。作者在使用 MyBatis 进行动态 SQL 编写时遇到了错误,通过调整 jdbcType 的值为大写成功解决了该问题。

mybais在使用的时候报错,写法是


 <if test="direct != null and direct != ''" >
        #{direct,jdbcType=Integer,
      </if>


最后修正为



 <if test="direct != null and direct != ''" >
        #{direct,jdbcType=INTEGER,
      </if>


所以 mybatis配置重的jdbaType类型要是大写的,否则就会出现此种异常



<think>我们正在解决MyBatis报错:No enum constant org.apache.ibatis.type.JdbcType.INT 根据引用[3]中的内容,错误原因是:在MyBatis配置中使用了小写的`jdbcType="Integer"`,而MyBatisJdbcType枚举中只有大写的类型名。 正确的写法应该是使用大写,例如:`jdbcType="INTEGER"`。 另外,引用[1]和引用[2]也提到类似的问题,即MyBatis无法识别配置中的JdbcType字符串,因为它必须与枚举常量名称完全一致(大小写敏感)。 因此,解决方案是将`jdbcType`的值改为全大写,并且使用正确的枚举常量名。对于整数类型,应该使用`INTEGER`,而不是`INT`或`Integer`。 注意:在MyBatis中,`JdbcType`枚举中并没有`INT`这个常量,但是有`INTEGER`。所以,如果你在配置中写了`jdbcType="INT"`,就会报错“No enum constant org.apache.ibatis.type.JdbcType.INT”。 因此,正确的做法是: - 将`jdbcType`的值改为`INTEGER`(全大写)。 例如,在MyBatis的映射文件中,将: <result column="age" property="age" jdbcType="INT" /> 改为: <result column="age" property="age" jdbcType="INTEGER" /> 另外,引用[4]提到,当遇到数据库的特定类型(如TEXT)在JdbcType枚举中不存在时,我们可以选择使用相似的枚举常量(如VARCHAR、LONGVARCHAR等)。同理,对于整数类型,我们使用`INTEGER`。 总结:MyBatisJdbcType枚举是大小写敏感的,且必须使用正确的常量名。整数类型对应的常量是`INTEGER`(全大写)。 下面我们给出一个完整的示例步骤:</think>### 解决 MyBatis 错误:`No enum constant org.apache.ibatis.type.JdbcType.INT` #### 问题原因分析 1. **大小写敏感问题** MyBatis 的 `JdbcType` 枚举仅识别**全大写的类型名称**。错误写法 `jdbcType="INT"` 或 `jdbcType="Integer"` 会导致此异常[^3]。 2. **类型名称不匹配** MyBatis 没有 `INT` 枚举常量,整数类型应使用 `INTEGER`(对应 MySQL 的 `INT` 类型)[^3]。 3. **特殊类型处理** 非常规类型(如 `TEXT`)需映射到最接近的标准 JDBC 类型(如 `LONGVARCHAR`)[^4]。 --- #### 解决方案 ##### 1. 修正类型声明(关键步骤) ```xml <!-- 错误示例 ❌ --> <result column="age" property="age" jdbcType="INT" /> <result column="id" property="id" jdbcType="Integer" /> <!-- 正确修正 ✅ --> <result column="age" property="age" jdbcType="INTEGER" /> <result column="id" property="id" jdbcType="INTEGER" /> ``` ##### 2. 完整类型对照表 | MySQL 类型 | MyBatis `jdbcType` 值 | Java 类型 | |------------------|------------------------|------------------| | `INT` | `INTEGER` | `Integer`/`int` | | `BIGINT` | `BIGINT` | `Long` | | `VARCHAR(255)` | `VARCHAR` | `String` | | `TEXT` | `LONGVARCHAR` | `String` | | `DATETIME` | `TIMESTAMP` | `java.util.Date` | > 📌 注:所有 `jdbcType` 值必须**全大写**(如 `INTEGER` 而非 `Integer`)[^3] ##### 3. 特殊类型处理示例 ```xml <!-- TEXT 类型处理 --> <result column="content" property="content" jdbcType="LONGVARCHAR" javaType="java.lang.String" /> <!-- [^4] --> <!-- DATETIME 类型处理 --> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> <!-- [^2] --> ``` ##### 4. 验证配置 在 MyBatis 配置文件中启用详细日志: ```xml <configuration> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> </configuration> ``` 运行测试时观察日志,确保无 `No enum constant` 错误。 --- #### 常见错误场景修复 **场景 1:插入操作参数类型错误** ```xml <!-- 错误 ❌ --> <insert id="insertUser"> INSERT INTO users(age) VALUES(#{age, jdbcType=INT}) </insert> <!-- 修正 ✅ --> <insert id="insertUser"> INSERT INTO users(age) VALUES(#{age, jdbcType=INTEGER}) </insert> ``` **场景 2:结果映射类型错误** ```xml <!-- 错误 ❌ --> <resultMap id="userMap" type="User"> <result column="user_id" property="id" jdbcType="int" /> </resultMap> <!-- 修正 ✅ --> <resultMap id="userMap" type="User"> <result column="user_id" property="id" jdbcType="INTEGER" /> </resultMap> ``` --- #### 预防措施 1. **统一命名规范** 在项目中约定:所有 `jdbcType` 值使用全大写标准枚举名。 2. **IDE 自动补全** 利用 IDE 的代码提示功能(如 IntelliJ 的 `Ctrl+Space`)选择合法枚举值: ![MyBatis jdbcType 枚举提示](https://example.com/mybatis-enum-hint.png) 3. **自定义类型处理器** 对于特殊类型(如 MySQL 的 `JSON`),创建自定义处理器: ```java @MappedJdbcTypes(JdbcType.VARCHAR) // 映射到基础类型 public class JsonTypeHandler extends BaseTypeHandler<MyData> { // 实现类型转换逻辑 } ``` --- ### 相关问题 1. 如何解决 `No enum constant org.apache.ibatis.type.JdbcType.DATETIME` 错误?[^2] 2. MyBatis 中 `jdbcType` 和 `javaType` 有什么区别?何时需要同时指定? 3. MySQL 的 `BIGINT UNSIGNED` 类型在 MyBatis 中应该如何映射? 4. 如何处理 MyBatis 中枚举类型(Enum)与数据库字段的映射? 5. 为什么 MyBatis 要求 `jdbcType` 必须全大写?这种设计有何优缺点?
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值