spring+mybaits整合问题:解决可能出现数据库表字段名与实体不对应问题
没有整合之前,在Mybaits-config配置文件中只需简单设置即可。
<?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>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
方法1.spring配置文件中mybatis开启驼峰命名(推荐做法 )
提示 自 1.3.0 版本开始,新增的 configuration 属性能够在没有对应的 MyBatis XML 配置文件的情况下,直接设置 Configuration 实例。
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:mapper/*.xml"></property>
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<property name="mapUnderscoreToCamelCase" value="true"/>
</bean>
</property>
</bean>
方法2:只要在xxx.mapper.xml文件修改resultType换成resultMap类型,编写映射规则。
1.这里举个实体类SysUser
2.数据库表sys_user
3.SysUserMapper.xml
在编写映射规则时我们要主要注意数据库字段的属性对应的Java数据类型!
<?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.gk.childvaccine.dao.SysUserMapper" >
<resultMap id="BaseResultMap" type="com.gk.childvaccine.po.SysUser" >
<id column="user_id" property="userId" jdbcType="BIGINT" />
<result column="user_name" property="userName" jdbcType="VARCHAR" />
<result column="user_account" property="userAccount" jdbcType="VARCHAR" />
<result column="user_password" property="userPassword" jdbcType="VARCHAR" />
<result column="user_sex" property="userSex" jdbcType="VARCHAR" />
<result column="user_iphone" property="userIphone" jdbcType="VARCHAR" />
<result column="user_email" property="userEmail" jdbcType="VARCHAR" />
<result column="user_salt" property="userSalt" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
user_id, user_name, user_account, user_password, user_sex, user_iphone, user_email,
user_salt
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
select
<include refid="Base_Column_List" />
from sys_user
where user_id = #{userId,jdbcType=BIGINT}
</select>
</mapper>
这里再补充一下 SpringBoot Mybatis 的驼峰命名 开启驼峰命名的方法
第一种方式:
可以在配置类中进行配置。配置的Demo如下:
@Bean(name="sqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setVfs(SpringBootVFS.class);
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return sqlSessionFactoryBean.getObject();
}
第二种方式:
在SpringBoot的application配置文件中进行设置,这里是properties的配置,配置的Demo如下:
mybatis.configuration.mapUnderscoreToCamelCase=true
第三种方式:
第三种利用XML形式的配置,上面已经介绍过就不再举例了:
在使用到SpringBoot+Mybatis-plus时也需要注意的是mybatis-plus默认处理是通过下划线分隔;
如:当我们遇见我们的尸体类名与我们的表字段是驼峰写法时:
private String userName;
我们在数据库的字段名也是 userName
会出现它会提示你user_name字段不存在
解决方法:
appliction.yml 里设置关闭驼峰式编码
mybatis-plus:
configuration:
# 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN(下划线命名) 到经典 Java 属性名 aColumn(驼峰命名) 的类似映射
map-underscore-to-camel-case: false