关于Mybatis 查询 查到空数据列的情况

MyBatis查询配置示例
本文介绍了一个使用MyBatis进行数据库查询的具体案例,包括XML配置文件的编写及查询结果展示,对于理解MyBatis如何映射SQL语句及结果集有一定帮助。

<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:12.0pt;"><span style="color:#e8bf6a;"><select </span><span style="color:#bababa;">id</span><span style="color:#6a8759;">="getlist" </span><span style="color:#bababa;">resultType</span><span style="color:#6a8759;">="WordBook"</span><span style="color:#e8bf6a;">>
</span><span style="color:#e8bf6a;">    </span>SELECT  a.key_ AS  WordBook_KEY , a.value_ AS WordBook_VALUE
    FROM  wordbook a
    WHERE key_=#{key}
<span style="color:#e8bf6a;"></select></span>

这个是查询
下面是结果







2016-06-13 09:48:26,503 INFO [jeesite.modules.sys.interceptor.LogInterceptor] - ViewName: zopsen/bhgjypfbb/jgjbhgjypfbbList2016-06-13 09:48:26,537 DEBUG [jeesite.modules.sys.interceptor.LogInterceptor] - 计时结束:09:48:26.537 耗时:0:0:0.114 URI: /zopsenFramework/a/bhgjyfbb/jgjbhgjyfbb 最大内存: 2715m 已分配内存: 1001m 已分配内存中的剩余空间: 619m 最大可用内存: 2333m2016-06-13 09:48:26,538 DEBUG [modules.sys.dao.LogDao.insert] - ==> Preparing: INSERT INTO sys_log( id, type, title, create_by, create_date, remote_addr, user_agent, request_uri, method, params, exception ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) 2016-06-13 09:48:26,541 DEBUG [modules.sys.dao.LogDao.insert] - ==> Parameters: 5dbf0267518f48d7b57d96760db00314(String), 1(String), 柳钉(String), e273f2f0fcb84bb09f57e4ec9115c94c(String), 2016-06-13 09:48:26.538(Timestamp), 0:0:0:0:0:0:0:1(String), Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0(String), /zopsenFramework/a/bhgjyfbb/jgjbhgjyfbb(String), GET(String), (String), (String)2016-06-13 09:48:26,589 DEBUG [modules.sys.dao.LogDao.insert] - <== Updates: 12016-06-13 09:48:28,352 DEBUG [jeesite.modules.sys.interceptor.LogInterceptor] - 开始计时: 09:48:28.352 URI: /zopsenFramework/a/bhgjyfbb/jgjbhgjyfbb/formldbhgjcxm[null, null, null, null, null, null, null]2016-06-13 09:48:28,409 INFO [jeesite.modules.sys.interceptor.LogInterceptor] - ViewName: zopsen/bhgjypfbb/jgjbhgjypfbbForm2016-06-13 09:48:28,567 DEBUG [jeesite.modules.sys.interceptor.LogInterceptor] - 计时结束:09:48:28.566 耗时:0:0:0.214 URI: /zopsenFramework/a/bhgjyfbb/jgjbhgjyfbb/form 最大内存: 2715m 已分配内存: 1001m 已分配内存中的剩余空间: 605m 最大可用内存: 2318m2016-06-13 09:48:28,633 DEBUG [modules.sys.dao.LogDao.insert] - ==> Preparing: INSERT INTO sys_log( id, type, title, create_by, create_date, remote_addr, user_agent, request_uri, method, params, exception ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )



修改xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zopsen.wordbook.dao.WordBookDao">
    <!--T get(String key);-->
    <!--List<T> getlist(String key);-->
    <resultMap id="wordBook" type="WordBook">
        <result column="key_" property="WordBook_KEY"></result>
        <result column="value_" property="WordBook_VALUE"></result>
    </resultMap>


    <select id="get"  parameterType="java.lang.String"  resultMap="wordBook">
--         SELECT  a.key_ AS  WordBook_KEY , a.value_ AS WordBook_VALUE
           SELECT  key_ AS , value_
        FROM  wordbook
        WHERE key_=#{key}

    </select>

    <select id="getlist" parameterType="java.lang.String"  resultMap="wordBook">
--         SELECT  a.key_ AS  WordBook_KEY , a.value_ AS WordBook_VALUE
           SELECT  key_  , value_
        FROM  wordbook
        WHERE key_=#{key}
    </select>

</mapper>

结果为

2016-06-13 10:14:09,858 DEBUG [jeesite.modules.sys.interceptor.LogInterceptor] - 开始计时: 10:14:09.858  URI: /zopsenFramework/a/bhgjyfbb/jgjbhgjyfbb/form
ldbhgjcxm
[WordBook{WordBook_KEY='ldbhgjcxm', WordBook_VALUE='其它'}, WordBook{WordBook_KEY='ldbhgjcxm', WordBook_VALUE='剪切'}, WordBook{WordBook_KEY='ldbhgjcxm', WordBook_VALUE='外观尺寸'}, WordBook{WordBook_KEY='ldbhgjcxm', WordBook_VALUE='拉托'}, WordBook{WordBook_KEY='ldbhgjcxm', WordBook_VALUE='裂纹'}, WordBook{WordBook_KEY='ldbhgjcxm', WordBook_VALUE='锁紧性能'}, WordBook{WordBook_KEY='ldbhgjcxm', WordBook_VALUE='预紧力'}]
2016-06-13 10:14:09,917 INFO  [jeesite.modules.sys.interceptor.LogInterceptor] - ViewName: zopsen/bhgjypfbb/jgjbhgjypfbbForm
2016-06-13 10:14:10,014 DEBUG [jeesite.modules.sys.interceptor.LogInterceptor] - 计时结束:10:14:10.014 


结果表明 当为空时一般是值没法赋值完毕  

 持续更新中。。。。   分析原理。。。。


### MyBatis查询结果为时返回字符串解决方案 为了处理MyBatis查询结果中的`NULL`值并将其转换为字符串,可以采用自定义`TypeHandler`的方式。通过实现`TypeHandler<String>`接口,在获取结果集(`ResultSet`)时将`NULL`值替换为字符串。 #### 自定义 `TypeHandler` 创建一个新的类继承于`BaseTypeHandler<String>`,重写方法来控制如何读取和设置数据库字段的值: ```java import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class NullStringTypeHandler extends BaseTypeHandler<String> { @Override public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { if (parameter != null && !"".equals(parameter.trim())) { ps.setString(i, parameter); } else { ps.setNull(i, JdbcType.VARCHAR.TYPE_CODE); } } @Override public String getNullableResult(ResultSet rs, String columnName) throws SQLException { Object obj = rs.getObject(columnName); return obj == null ? "" : obj.toString(); } @Override public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { Object obj = rs.getObject(columnIndex); return obj == null ? "" : obj.toString(); } @Override public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { Object obj = cs.getObject(columnIndex); return obj == null ? "" : obj.toString(); } } ``` 此代码片段展示了当从数据库检索到的数据为`NULL`时,会返回一个字符串而不是默认行为下的`null`对象[^1]。 #### 配置 TypeHandler 为了让上述处理器生效,还需要在Mapper XML文件中指定该类型的使用位置或是在全局范围内注册它。可以在SQL映射文件里针对特定应用这个处理器;也可以在整个项目层面配置,使得所有涉及字符串类型的字段都遵循这一规则。 对于局部作用域的应用方式如下所示: ```xml <resultMap id="baseResultMap" type="com.example.model.YourModel"> <!-- other columns --> <result property="yourProperty" column="YOUR_COLUMN_NAME" typeHandler="com.example.handler.NullStringTypeHandler"/> </resultMap> ``` 而如果希望更广泛地影响整个应用程序,则可在核心配置文件中声明: ```xml <typeHandlers> <typeHandler javaType="string" handler="com.example.handler.NullStringTypeHandler"/> </typeHandlers> ``` 这样做的好处是可以统一管理所有的字符串类型字段的行为模式,减少重复劳动的同时也提高了代码的一致性和可维护性。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值