mybatis属性callSettersOnNulls,mapUnderscoreToCamelCase设置

本文详细介绍了MyBatis中配置项mapUnderscoreToCamelCase的作用及设置方法,并讲解了如何通过callSettersOnNulls来处理查询结果中空值字段的问题。

mapUnderscoreToCamelCase:

是否启用下划线与驼峰式命名规则的映射(如first_name => firstName)

开启:

mybatis-config.xml

[html] view plain copy
  1. <!-- 开启驼峰命名转换   seckill_id====>seckillId -->  
  2.          <setting name="mapUnderscoreToCamelCase" value="true"/>  
类别名:

在spring-dao.xml中进行配置

[html] view plain copy
  1. <!-- mybatis- sessionFactory -->  
  2.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  3.         <!-- 注入数据库连接池 -->  
  4.         <property name="dataSource" ref="dataSource"/>  
  5.         <!-- 配置mybatis全局配置文件 -->  
  6.         <property name="configLocation" value="classpath:mybatis-config.xml"/>  
  7.         <!-- 扫描entity包  使用别名   
  8.             org.seckill.entity.Seckill===>Seckill  resultType,parameterType  
  9.         -->  
  10.         <property name="typeAliasesPackage" value="org.seckill.entity"/>  
  11.         <!-- 扫描sql配置文件 ,mapper.xml -->  
  12.         <property name="mapperLocations" value="classpath:mapper/*.xml"/>  
  13.     </bean>  

 callSettersOnNulls:

Spring+MyBatis开发过程中,在xxMapper.xml配置文件进行select查询时resultType="map",如果要查询的字段是空值,在返回的map中会出现找不到这个字段对应的属性。要解决这个问题需要指定 callSettersOnNulls 属性,具体过程如下:

1,创建xml配置文件。
在applicationContext.xml 同一级目录中创建文件mybatis-config.xml,内容如下:    
[java] view plain copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3. <configuration>  
  4.     <settings>  
  5.         <setting name="callSettersOnNulls" value="true"/>  
  6.     </settings>  
  7.     ...  
  8. </configuration>  

2,在applicationContext-mybatis.xml文件中配置 mybatis-config.xml的引用,部分代码如下:
[java] view plain copy
  1. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"  
  2. p:dataSource-ref="dataSource" p:configLocation="classpath:mybatis-config.xml"  
  3. p:mapperLocations="classpath:mybatis/mapper/*.xml" />  
### 含义 `callSettersOnNulls` 是 MyBatis 中的一个配置参数。默认情况下,MyBatis 对 `Map` 的解析生成,如果值为 `null` 的话,对应的 `key` 不会被加入到 `Map` 中。当将 `callSettersOnNulls` 设置为 `true` 时,即使字段值为 `null`,MyBatis 也会将对应的 `key` 加入到 `Map` 中,保证 `Map` 包含所有查询字段的 `key` [^2]。 ### 使用场景 在项目中查询数据并返回 `Map` 时,如果需要确保 `Map` 中包含所有查询字段的 `key`,即使某些字段的值为 `null`,就可以使用 `callSettersOnNulls` 参数。例如,在与前端对接时,前端需要接收到完整的字段结构,即使某些字段没有值,也希望能获取到对应的 `key`,此时就可以通过设置该参数来满足需求 [^2]。 ### 使用方法 #### 在 MyBatis 配置文件中设置MyBatis 的配置文件里设置 `callSettersOnNulls` 参数为 `true`,示例如下: ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 配置全局属性 --> <settings> <!--使用jdbc的getGeneratedKeys获取数据库自增主键值 --> <setting name="useGeneratedKeys" value="true"/> <!-- 使用列别名替换列名 默认true --> <setting name="useColumnLabel" value="true"/> <!-- 开启驼峰命名转换 --> <setting name="mapUnderscoreToCamelCase" value="true"/> <setting name="callSettersOnNulls" value="true"/> </settings> </configuration> ``` #### Spring Boot 使用配置类的形式设置 如果在 `yaml` 配置文件中已经写好了数据源,可以使用配置类的方式设置 `callSettersOnNulls`,示例代码如下: ```java import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration public class MybatisConfig { @Bean public SqlSessionFactoryBean newSqlSessionFactoryBean(DataSource dataSource) { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration(); configuration.setCallSettersOnNulls(true); bean.setConfiguration(configuration); bean.setDataSource(dataSource); return bean; } } ``` ### 版本要求 需要注意的是,`callSettersOnNulls` 需要至少 MyBatis 3.2 版本的支持,如果使用的是较低版本,设置该参数会报错 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值