实际的开发过程中,数据库表字段不一定与实体类中的属性一一对应,这样的话在使用Mybatis开发过程中就必须解决字段名与属性名不一致的冲突,否则Mybatis框架在底层进行数据处理时会出现异常。
项目结构
创建测试表和数据
CREATE TABLE orders(
order_id INT PRIMARY KEY AUTO_INCREMENT,
order_no VARCHAR(20),
order_price FLOAT
);
INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);
INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);
INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);
定义实体类
package com.taowd.mybatis.entry;
public class Orders {
private String id;
private String no;
private String price;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
解决冲突的方案1:通过在sql语句中定义别名
<?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="mapper.ordersMapper">
<!-- 根据id查询得到一个Orders对象 -->
<select id="selectOrder" parameterType="int" resultType="_Orders">
select
order_id id, order_no no,order_price price from orders where
order_id=#{id}
</select>
</mapper>
解决冲突的方案2:使用resultMap进行映射
<!-- 解决方案2:使用resultMap进行映射 -->
<select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
select * from orders where order_id=#{id}
</select>
<resultMap type="_Orders" id="orderResultMap">
<id property="id" column="order_id" />
<result property="no" column="order_no" />
<result property="price" column="order_price" />
</resultMap>