MyBatis中当实体类中的属性名和表中的字段名不一样怎么办 ?
解决方案:
1.写sql语句时起别名
2.在MyBatis的全局配置文件中开启驼峰命名规则
3.在Mapper映射文件中使用resultMap来自定义映射规则
代码show


<?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">
<!-- namespace属性:必须是接口的全类名 -->
<mapper namespace="cn.wangzengqiang.interview.atguigu2019.javaee.mybatis.mapper.EmployeeMapper">
<!--
id属性:必须是接口中方法的方法名
resultType属性:必须是方法的返回值的全类名
-->
<!-- 属性取不到值 -->
<!--<select id="getEmployeeById" resultType="cn.wangzengqiang.interview.atguigu2019.javaee.mybatis.entities.Employee">
select * from employees where id = #{id}
</select>-->
<!--解决方案1:sql起别名-->
<!--<select id="getEmployeeById" resultType="cn.wangzengqiang.interview.atguigu2019.javaee.mybatis.entities.Employee">
select id,last_name lastName,email,salary,dept_id deptId from employees where id = #{id}
</select>-->
<!--解决方案2:开启驼峰命名配置 mybatis-config.xml配置-->
<!--<select id="getEmployeeById" resultType="cn.wangzengqiang.interview.atguigu2019.javaee.mybatis.entities.Employee">
select * from employees where id = #{id}
</select>-->
<!--解决方案3:自定义映射-->
<select id="getEmployeeById" resultMap="myMap">
select * from employees where id = #{id}
</select>
<!-- 自定义高级映射 -->
<resultMap type="cn.wangzengqiang.interview.atguigu2019.javaee.mybatis.entities.Employee" id="myMap">
<!-- 映射主键 -->
<id column="id" property="id"/>
<!-- 映射其他列 -->
<result column="last_name" property="lastName"/>
<result column="email" property="email"/>
<result column="salary" property="salary"/>
<result column="dept_id" property="deptId"/>
</resultMap>
</mapper>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
- mybatis-config.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>-->
<!-- 开启驼峰命名规则 ,可以将数据库中的下划线映射为驼峰命名
例如:last_name可以映射为lastName
-->
<!-- <setting name="mapUnderscoreToCamelCase" value="true"/>-->
<!-- </settings>-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!-- 注册映射文件 -->
<mappers>
<mapper resource="EmployeeMapper.xml" />
</mappers>
</configuration>
public class Employee {
private Integer id;
private String lastName;
private String email;
private double salary;
private Integer deptId;
public Employee(Integer id, String lastName, String email, double salary, Integer deptId) {
super();
this.id = id;
this.lastName = lastName;
this.email = email;
this.salary = salary;
this.deptId = deptId;
}
public Employee() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", salary=" + salary + ", deptId="
+ deptId + "]";
}
}
- EmployeeMapper.java
public interface EmployeeMapper {
Employee getEmployeeById(Integer id);
}
- MyBatisTest.java
public class MyBatisTest {
//1.MyBatis中当实体类中的属性名和表中的字段名不一样 ,怎么办 ?
/*
* 解决方案:
* 1.写sql语句时起别名
* 2.在MyBatis的全局配置文件中开启驼峰命名规则
* 3.在Mapper映射文件中使用resultMap来自定义映射规则
*/
@Test
public void testGetEmployee() throws IOException {
//1.创建SqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获取sqlSession,sqlSession就相当于JDBC中的connection
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
//3.获取Mapper对象
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
//4.调用EmployeeMapper中获取Employee的方法
Employee employee = mapper.getEmployeeById(1);
System.out.println(employee);
} finally {
//5.关闭sqlSession
sqlSession.close();
}
}
}