这篇文章主要介绍“mybatis实体类字段获取不到值怎么解决”,在日常操作中,相信很多人在mybatis实体类字段获取不到值怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mybatis实体类字段获取不到值怎么解决”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
mybatis实体类字段大小写问题 字段获取不到值
由于前期设计问题,项目中需要用到的一个字段 rootpath,所以我再实体层加了这么一个字段。
然后,我在前台向后台传数据的时候,这个rootpath一直都获取不到值。经过排查对比,发现我写的set和get方法名称后面的RootPath 中的P字母大写导致的。
解决办法
将set和get方法后面的P改为小写p就可以了
推断
mybatis认为rootpath是一个单词,但是我错误的认为了是两个单词,然后再写set和get的时候给P大写了,所以导致了字段获取不到值!
踩坑mybatis 转换大小写问题
由于在Windows环境下MySQL数据库不严格区分大小写,所以我们在对数据库的表和字段进行命名时两个单词之间都是使用下划线“_”的,比如“user_name”。但是,我们在项目开发时,为了遵守代码规范,实体类中的属性采用的都是驼峰式命名。这样,MyBatis可能就会报错没有该属性的get和set方法。
解决方法
1.使用resultMap
通过resultMap中的column值(数据库字段名)和property值(实体类属性名)进行一一映射。
<?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.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.domain.User"> <id column="id" jdbcType="INTEGER" property="id" /> <result column="user_name" jdbcType="VARCHAR" property="userName" /> <result column="password" jdbcType="VARCHAR" property="password" /> </resultMap> <select id="xxx" parameterType="xxx" resultMap="BaseResultMap" > ...... </select>
2.对MyBatis进行配置:
(1)在mybatis-config.xml配置文件中添加以下代码:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <configuration> <!-- 配置mybatis自动转换为驼峰命名 --> <settings> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings></configuration>
(2) 在application.yml文件中进行配置:
#mybatis配置mybatis: configuration: map-underscore-to-camel-case: true
其中的map-underscore-to-camel-case也可以写成mapUnderscoreToCamelCase(未尝试),然后MyBatis的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.mapper.UserMapper"> <select id="xxx" parameterType="xxx" resultType="User" > ...... </select>
第(1)种方式和第(2)种方式同时配置时,第(2)种方式的优先级更高。
3.自定义配置类的方式配置:给容器中添加一个ConfigurationCustomizer。
@Configurationpublic class MyBatisConfig { @Bean public ConfigurationCustomizer configurationCustomizer() { return new ConfigurationCustomizer() { @Override public void customize(org.apache.ibatis.session.Configuration configuration) { configuration.setMapUnderscoreToCamelCase(true); } }; }}
到此,关于“mybatis实体类字段获取不到值怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!