您的位置:首页 > 其它

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐