本篇作为上一篇的补充,介绍上一篇可能出现的问题

1.mybatis详解-(2)问题分析

如果跟随上一篇的步骤测试,有的结果可能是正常的,但有的结果可能出现lastName=null的情况。lastName=null的情况,请注意sql中我为数据库表中的last_name字段起了个别名lastName,可以跟Employee对象对应,查询的结果就可以注入对象中。

<mapper namespace="org.mybatis.helloworld.EmployeeMapper">
    <select id="selectEmployee" resultType="org.mybatis.helloworld.Employee">
        select id,last_name lastName,email,gender from mybatis_employee where id ={id}
    </select>
</mapper>

2.驼峰命名配置

按照平时开发的正常规范,数据库表中的字段和对象的属性都是一一对应的,且一个属性多个单词,使用驼峰命名规则,数据库表中的字段使用下划线隔开每个单词。
mybatis提供了一个配置,可自动的将数据库字段解析为对象属性(去掉下划线,将下滑线的第一个字母大写,如:last_name可解析为lastName),需要在主配置文件中mybatis-config.xml添加如下配置:

<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

3.测试

修改mapper配置文件,将别名lastName去掉,测试数据库中的last_name值能否注入到对象lastName属性中。

<mapper namespace="org.mybatis.helloworld.EmployeeMapper">
    <select id="selectEmployee" resultType="org.mybatis.helloworld.Employee">
        select id,last_name,email,gender from mybatis_employee where id ={id}
    </select>
</mapper>

输出结果:

DEBUG - Logging initialized using ‘class org.apache.ibatis.logging.slf4j.Slf4jImpl’ adapter.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
DEBUG - PooledDataSource forcefully closed/removed all connections.
class com.sun.proxy.$Proxy2
DEBUG - Openning JDBC Connection
DEBUG - Created connection 665188480.
DEBUG - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@27a5f880]
DEBUG - ==> Preparing: select id,last_name,email,gender from mybatis_employee where id = ?
DEBUG - ==> Parameters: 1(Integer)
Employee [id=1, lastName=zhangsan, email=bestjinyi@163.com, gender=1]
DEBUG - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@27a5f880]
DEBUG - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@27a5f880]
DEBUG - Returned connection 665188480 to pool.