在处理字段名和属性名不一致的情况下,可以通过以下方法进行映射:
1. 为查询的字段设置别名:
在SQL查询中为字段设置别名,以便与Java属性名保持一致。
示例:
SELECT emp_id AS empId, emp_name AS empName FROM employees;
2. 使用MyBatis全局配置
如果字段名使用下划线(符合MySQL要求),而属性名使用驼峰命名(符合Java要求),可以在MyBatis配置中进行全局设置,使其自动映射。
MyBatis配置示例:
在mybatis-config.xml
中添加以下配置:
mapUnderscoreToCamelCase默认属性为false,是关闭状态。
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
示例:
假设数据库字段为emp_id
和emp_name
,Java属性为empId
和empName
,MyBatis会自动将下划线命名的字段映射为驼峰命名的属性。
3. 手动映射
如果不使用MyBatis的自动映射功能,可以手动定义映射关系。
示例:
public class Employee {
private int empId;
private String empName;
// getters and setters
}
// MyBatis Mapper XML
<resultMap id="employeeResultMap" type="Employee">
<id property="empId" column="emp_id"/>
<result property="empName" column="emp_name"/>
</resultMap>
4.代码运行实例:
mybatis-config.xml代码如下:
<settings>
<!--将下划线映射为驼峰-->
<setting name = "mapUnderscoreToCamelCase" value ="true"/>
</settings>
<?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>
<properties resource="jdbc.properties"/>
<settings>
<!--将下划线映射为驼峰-->
<setting name = "mapUnderscoreToCamelCase" value ="true"/>
</settings>
<typeAliases>
<package name="com.atguigu.mybatis.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.atguigu.mybatis.mapper"></package>
</mappers>
</configuration>
EmpMapper代码如下:
Emp getEmpByEmpId(@Param("empId") Integer empId);
package com.atguigu.mybatis.mapper;
import com.atguigu.mybatis.pojo.Emp;
import org.apache.ibatis.annotations.Param;
public interface EmpMapper {
/* *
*
*根据员工Id查询员工信息
* @param empId
* @return com.atguigu.mybatis.pojo.Emp
* @author yzh
* @create 2025/2/21
**/
Emp getEmpByEmpId(@Param("empId") Integer empId);
}
EmpMapper.xml代码如下:
select * from t_emp where emp_id = #{empId}
<?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.atguigu.mybatis.mapper.EmpMapper">
<!-- Mapper 命名空间为空,需要根据实际需求填写 -->
<!--Emp getEmpByEmpId(@Param("empId") Integer empId);-->
<select id="getEmpByEmpId" resultType="Emp">
<!--select * from t_emp where emp_id = #{empId}-->
<!--select emp_id empId,emp_name empName,age,gender from t_emp where emp_id = #{empId}-->
select * from t_emp where emp_id = #{empId}
</select>
</mapper>
ResultMapperTest代码如下:
@Test
public void testGetEmpByEmpId() {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = mapper.getEmpByEmpId(1);
System.out.println(emp);
}
import com.atguigu.mybatis.mapper.EmpMapper;
import com.atguigu.mybatis.pojo.Emp;
import com.atguigu.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class ResultMapperTest {
@Test
public void testGetEmpByEmpId() {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = mapper.getEmpByEmpId(1);
System.out.println(emp);
}
}
运行结果代码及截图:成功查询!
DEBUG 02-21 20:30:50,701 ==> Preparing: select * from t_emp where emp_id = ? (BaseJdbcLogger.java:137)
DEBUG 02-21 20:30:50,743 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:137)
DEBUG 02-21 20:30:50,773 <== Total: 1 (BaseJdbcLogger.java:137)
Emp{empId=1, empName='张三', age=20, gender='男'}
进程已结束,退出代码为 0
5.So Tired——>Have a Rest
2025/2/21-20:33:18