MyBatis中当实体类中的属性名和表中的字段名不一样怎么办

MyBatis中当实体类中的属性名和表中的字段名不一样怎么办 ?

解决方案:
1.写sql语句时起别名
2.在MyBatis的全局配置文件中开启驼峰命名规则
3.在Mapper映射文件中使用resultMap来自定义映射规则

代码show

  • 代码结构图

image-1660481799195

  • 核心jar包:

image-1660481810274

  • 核心代码
    • 配置
      • EmployeeMapper.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">
<!-- 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>
  • log4j.xml
<?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>
  • 核心类
    • Employee.java
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();
          }
      }
  
  }
  
最近的文章

Linux系统,常用服务类相关命令有哪些

Linux系统,常用服务类相关命令Centos 6- 实操命令servier network statuschkconfig --listchkconfig --level 5 network offCentos 7- 实操命令bash systemctl status firewalld …

继续阅读
更早的文章

简单的谈一下SpringMVC的工作流程

简单的谈一下SpringMVC的工作流程SpringMVC工作流程图核心概念中央控制器 DispatcherServlet处理器映射器处理器拦截器处理器对象处理器适配器视图解析器核心类org.springframework.web.servlet.mvc.method.annotation.Requ…

继续阅读