mybatis获取到的数据为NULL

本文介绍了当使用MyBatis框架进行数据查询时,如何通过正确配置映射关系来解决问题,包括利用resultMap属性和SQL别名两种方法。

SQL语句没错的情况下,获取不到mybatis返回的数据,原因是映射文件出错。例子:

// 有一个实体类
class test{
    private String myName;
    private int myAge;
        ……      // getter和setter方法
}
// 假设数据库对应的列名分别为 my_name 和 my_age ,表名为 me
// 直接写select语句为
<select id=".." Type="*.*.test">select my_name,my_age from me</select>
// 时会获取不到数据,因为表的cloumn和实体类的property不一致

解决方法

// 方法一
// 增加resultMap映射
<resultMap id="……" type="*.*.test">
        <result column="my_name" property="myName" jdbcType="VARCHAR" />
        <result column="my_age" property="myAge" jdbcType="INTEGER" />
    </resultMap>

// 方法二
<select id=".." Type="*.*.test">select my_name as myName,my_age as myAge from me</select>
在使用 Spring Boot 和 MyBatis 连接达梦数据库时,如果 `getDatabaseId` 返回 `null`,通常意味着 MyBatis 无法正确识别当前连接的数据库类型。这种情况可能由多种原因引起,以下是常见问题及其解决方案: ### 数据库驱动兼容性 达梦数据库虽然兼容 JDBC 标准,但其驱动实现可能与主流数据库(如 MySQL、Oracle)存在差异。MyBatis 内部通过 `DatabaseMetaData.getDatabaseProductName()` 方法获取数据库厂商名称,并将其作为 `databaseId` 的值。如果达梦数据库返回的名称与 MyBatis 预期不一致,可能导致 `getDatabaseId` 为 `null`。 解决办法是手动指定 `databaseId`,而不是依赖自动检测。例如,在配置文件中显式设置: ```xml <configuration> <databaseIdProvider type="DB_VENDOR"> <property name="DM" value="dm"/> </databaseIdProvider> </configuration> ``` 这样可以确保即使自动检测失败,也能使用预定义的 `databaseId` 值 [^1]。 ### 数据库数据获取失败 MyBatis 在启动时会尝试从数据库连接中获取数据信息,以确定当前使用的数据库类型。如果由于网络问题、权限限制或驱动问题导致元数据获取失败,则 `getDatabaseId` 可能返回 `null`。 检查数据库连接是否正常,并确保用户具有足够的权限访问系统表和元数据。可以通过简单的 SQL 查询验证连接状态: ```sql SELECT * FROM DUAL; ``` ### 自定义 `DatabaseIdProvider` 如果默认的 `DB_VENDOR` 提供者无法正确识别达梦数据库,可以考虑自定义 `DatabaseIdProvider` 实现类,重写其逻辑以明确返回预期的 `databaseId` 值。 以下是一个简单的自定义 `DatabaseIdProvider` 示例: ```java public class CustomDatabaseIdProvider implements DatabaseIdProvider { @Override public String getDatabaseId(DataSource dataSource) throws SQLException { try (Connection connection = dataSource.getConnection()) { DatabaseMetaData metaData = connection.getMetaData(); String productName = metaData.getDatabaseProductName(); if ("DM".equalsIgnoreCase(productName)) { return "dm"; } return null; } } @Override public void setProperties(Properties properties) { // 可选属性设置 } } ``` 然后在配置文件中注册该提供者: ```xml <bean id="databaseIdProvider" class="com.example.CustomDatabaseIdProvider"/> ``` ### 检查依赖版本 确保使用的 MyBatis 和 Spring Boot 版本支持达梦数据库。某些旧版本的 MyBatis 可能在处理非标准数据库时存在问题。建议升级到最新稳定版,并确认达梦数据库驱动版本与当前环境兼容。 ### 日志调试 启用 MyBatis 的详细日志输出,查看其在初始化过程中如何处理 `databaseId`。这有助于进一步定位问题根源。可以在 `application.properties` 中开启日志: ```properties logging.level.org.apache.ibatis=DEBUG ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值