mybatis入门字段与属性不对应问题(三)
2017-07-25 20:40
267 查看
1:Order
package com.mybatis.domain;
public class Order {
//Order实体类中属性名和orders表中的字段名是不一样的
private Integer id; //id===>order_id
private String orderNo; //orderNo===>order_no
private Float price; //price===>order_price
public Order() {
}
public Order(String orderNo, Float price) {
this.orderNo = orderNo;
this.price = price;
}
public Order(Integer id, String orderNo, Float price) {
this.id = id;
this.orderNo = orderNo;
this.price = price;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
@Override
public String toString() {
return "Order [id=" + id + ", orderNo=" + orderNo + ", price=" + price
+ "]";
}
}
2:OrderMapper
package com.mybatis.dao;
import com.mybatis.domain.Order;
public interface OrderMapper {
public Order getOrderById(Integer id);
public Order getOrderByIdResultMap(Integer id);
}
3:OrderMapper.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">
<mapper namespace="com.mybatis.dao.OrderMapper">
<!--
namespace:命名空间(直接执行要查询的查询条件的参数类型的接口)
id:是每个sql语句的唯一标识
resultType:sql语句执行结果的返回值类型
#{id}:从传递过来的sql语句参数中取出id值
public Employee getEmpById(Integer id)
将select语句的id改为目标方法的方法名
-->
<!-- resultType:类的别名 -->
<!-- databaseId:告诉mybatis执行SQL语句使用的是哪一种数据库 -->
<!-- public Order getOrderById(Integer id) -->
<select id="getOrderById" resultType="com.mybatis.domain.Order" parameterType="java.lang.Integer">
<!-- JavaBean中的属性lastName与数据表中的名字字段不一致 :给数据表字段起别名为JavaBean中的属性名-->
select order_id id,order_no orderNo,order_price price from orders
where order_id=#{id}
</select>
<!-- 自定义返回值类型,因为数据表字段与java类中的属性名字不对应 -->
<resultMap type="com.mybatis.domain.Order" id="orderResultMap">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<result property="price" column="order_price"/>
</resultMap>
<!-- public Order getOrderByIdResultMap(Integer id) -->
<select id="getOrderByIdResultMap" resultMap="orderResultMap" parameterType="java.lang.Integer">
<!-- JavaBean中的属性lastName与数据表中的名字字段不一致 :给数据表字段起别名为JavaBean中的属性名-->
select order_id,order_no,order_price from orders
where order_id=#{id}
</select>
</mapper>
4:Test
package com.mybatis.test;
import java.io.IOException;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.mybatis.dao.OrderMapper;
import com.mybatis.domain.Order;
import com.mybatis.util.MybatisUtil;
public class TestOrder {
@Test
public void test1() throws IOException{
SqlSession sqlSession = MybatisUtil.getSqlSession();
OrderMapper mapper=sqlSession.getMapper(OrderMapper.class) ;
Order order=mapper.getOrderById(1);
System.out.println(order);
}
@Test
public void test2() throws IOException{
SqlSession sqlSession = MybatisUtil.getSqlSession();
OrderMapper mapper=sqlSession.getMapper(OrderMapper.class) ;
Order order=mapper.getOrderByIdResultMap(2);
System.out.println(order);
}
}
总结:
上面的测试代码演示当实体类中的属性名和表中的字段名不一致时,使用MyBatis进行查询操作时无法查询出相应的结果的问题以及针对问题采用的两种办法:
解决办法一: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通[b]过在sql语句中定义别名来解决字段名和属性名的映射关系的。[/b]
解决办法二: 通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式[b]来解决字段名和属性名的映射关系的。[/b]
package com.mybatis.domain;
public class Order {
//Order实体类中属性名和orders表中的字段名是不一样的
private Integer id; //id===>order_id
private String orderNo; //orderNo===>order_no
private Float price; //price===>order_price
public Order() {
}
public Order(String orderNo, Float price) {
this.orderNo = orderNo;
this.price = price;
}
public Order(Integer id, String orderNo, Float price) {
this.id = id;
this.orderNo = orderNo;
this.price = price;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
@Override
public String toString() {
return "Order [id=" + id + ", orderNo=" + orderNo + ", price=" + price
+ "]";
}
}
2:OrderMapper
package com.mybatis.dao;
import com.mybatis.domain.Order;
public interface OrderMapper {
public Order getOrderById(Integer id);
public Order getOrderByIdResultMap(Integer id);
}
3:OrderMapper.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">
<mapper namespace="com.mybatis.dao.OrderMapper">
<!--
namespace:命名空间(直接执行要查询的查询条件的参数类型的接口)
id:是每个sql语句的唯一标识
resultType:sql语句执行结果的返回值类型
#{id}:从传递过来的sql语句参数中取出id值
public Employee getEmpById(Integer id)
将select语句的id改为目标方法的方法名
-->
<!-- resultType:类的别名 -->
<!-- databaseId:告诉mybatis执行SQL语句使用的是哪一种数据库 -->
<!-- public Order getOrderById(Integer id) -->
<select id="getOrderById" resultType="com.mybatis.domain.Order" parameterType="java.lang.Integer">
<!-- JavaBean中的属性lastName与数据表中的名字字段不一致 :给数据表字段起别名为JavaBean中的属性名-->
select order_id id,order_no orderNo,order_price price from orders
where order_id=#{id}
</select>
<!-- 自定义返回值类型,因为数据表字段与java类中的属性名字不对应 -->
<resultMap type="com.mybatis.domain.Order" id="orderResultMap">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<result property="price" column="order_price"/>
</resultMap>
<!-- public Order getOrderByIdResultMap(Integer id) -->
<select id="getOrderByIdResultMap" resultMap="orderResultMap" parameterType="java.lang.Integer">
<!-- JavaBean中的属性lastName与数据表中的名字字段不一致 :给数据表字段起别名为JavaBean中的属性名-->
select order_id,order_no,order_price from orders
where order_id=#{id}
</select>
</mapper>
4:Test
package com.mybatis.test;
import java.io.IOException;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.mybatis.dao.OrderMapper;
import com.mybatis.domain.Order;
import com.mybatis.util.MybatisUtil;
public class TestOrder {
@Test
public void test1() throws IOException{
SqlSession sqlSession = MybatisUtil.getSqlSession();
OrderMapper mapper=sqlSession.getMapper(OrderMapper.class) ;
Order order=mapper.getOrderById(1);
System.out.println(order);
}
@Test
public void test2() throws IOException{
SqlSession sqlSession = MybatisUtil.getSqlSession();
OrderMapper mapper=sqlSession.getMapper(OrderMapper.class) ;
Order order=mapper.getOrderByIdResultMap(2);
System.out.println(order);
}
}
总结:
上面的测试代码演示当实体类中的属性名和表中的字段名不一致时,使用MyBatis进行查询操作时无法查询出相应的结果的问题以及针对问题采用的两种办法:
解决办法一: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通[b]过在sql语句中定义别名来解决字段名和属性名的映射关系的。[/b]
解决办法二: 通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式[b]来解决字段名和属性名的映射关系的。[/b]
相关文章推荐
- 注解开发mybatis的mapper属性和字段不对应问题@Results—resultMap
- MyBatis知识系列之四:解决属性名和字段名不一致的问题
- mybatis框架下解决数据库中表的列的字段名和实体类属性不相同的问题
- mybatis入门四 解决字段名与实体类属性名不相同的冲突
- MyBatis学习-----解决在"数据表中字段与自己定义的属性类的属性字段不相同“的情况下的问题
- MyBatis入门实例-包括实体类与数据库字段对应&CLOB字段处理
- MyBatis入门03 解决字段名与实体类属性名不相同的冲突
- MyBatis学习教程(四)-如何快速解决字段名与实体类属性名不相同的冲突问题
- Mybatis中解决数据库字段名与实体类属性名不同的问题
- MyBatis入门实例-包括实体类与数据库字段对应&CLOB字段处理
- MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)
- mybatis 实体属性和数据库字段不统一问题
- 4、Mybatis中实体类bean的属性名与数据库表中对应字段名不同
- MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突
- MyBatis实现单表增删改查(CURD)--属性名与字段名不一致问题
- MyBatis解决字段名和实体类属性名不相同冲突问题时返回查询结果为空
- MyBatis实体属性与表的字段不对应的解决方案
- MyBatis入门学习教程 解决字段名与实体类属性名不相同的冲突
- mybatis(5)---如何解决实体类中字段和数据表字段不对应引发的问题
- mybatis中实体属性和数据库中的字段不对应相冲突的解决办法