在昨天的文章中,已经实现了将数据库表中的内容读取出来,但是结果却是不对的
仔细观察上面的截图,发现数据库t_user表中的字段和User类中的属性完全一样的,数据是赋值进去了的,但是user_tel,registration_time这两个字段在User表中是以驼峰形式命名的属性,找到问题所在,其实数据库字段名和类名中的属性不匹配,引起的问题,这种问题当然很常见,所以Mybatis中有很多种办法来解决这种字段和属性不匹配的问题
一.数据库字段和Java Bean类属性不匹配问题的设置
这个问题我们常见的有三种办法都可以解决
1.在MyBatis全局配置中进行设置,打开驼峰规则匹配
这个也就是在mybatis-configuration.xml文件中,加入下面的配置
注意这段代码的位置,MyBatis的全局配置,对于配置标签的位置是有限制的,不能随便改变设置标签的位置.
现在我们将标签直接放在标签下方
只需要这么设置之后,我们这里的代码就可以正确获取数据库中的值了
标签中,还有很多我们日常常用的设置
设置参数描述有效值默认值cacheEnabled全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存。truefalselazyLoadingEnabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。truefalseaggressiveLazyLoading当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载(参考lazyLoadTriggerMethods).truefalsemultipleResultSetsEnabled是否允许单一语句返回多结果集(需要兼容驱动)。truefalseuseColumnLabel使用列标签代替列名。不同的驱动在这方面会有不同的表现, 具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。truefalseuseGeneratedKeys允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。truefalseautoMappingBehavior指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。NONE, PARTIAL, FULLPARTIALautoMappingUnknownColumnBehavior指定发现自动映射目标未知列(或者未知属性类型)的行为。NONE: 不做任何反应 WARNING: 输出提醒日志 (‘org.apache.ibatis.session.AutoMappingUnknownColumnBehavior’ 的日志等级必须设置为 WARN) FAILING: 映射失败 (抛出 SqlSessionException)NONE, WARNING, FAILINGNONEdefaultExecutorType配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。SIMPLE REUSE BATCHSIMPLEdefaultStatementTimeout设置超时时间,它决定驱动等待数据库响应的秒数。任意正整数Not Set (null)defaultFetchSize为驱动的结果集获取数