一、创建订单表
order_id order_name order_price
1 苹果 6.5
2 香蕉 3
3. 桔子 2
二、定义实体类
public Order
{
private Integer id;
private String name;
private float price;
}
三、xml文件代码
查不到数据xml如下
<mapper namespace="me.gacl.mapping.orderMapper"> <!-- 根据id查询得到一个order对象,使用这个查询是查询不到我们想要的结果的, 因为实体类的属性名和数据库的字段名对应不上的原因,因此无法查询出对应的记录 --> <select id="getOrderById" parameterType="int" resultType="me.gacl.domain.Order"> select * from orders where order_id=#{id} </select> </mapper>
解决方法如下,方法一
直接将 返回的数据库字段名与实体类的属性名 设置成一样,返回类型(resultType)直接设置成接收的实体类名.
<mapper namespace="me.gacl.mapping.orderMapper"> <!-- 根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的, 这是因为我们将查询的字段名都起一个和实体类属性名相同的别名,这样实体类的属性名和查询结果中的字段名就可以一一对应上 --> <select id="selectOrder" parameterType="int" resultType="me.gacl.domain.Order"> select order_id id, order_name name,order_price price from orders where order_id=#{id} </select> </mapper>
方法二
注意,这里使用了resultMap转换了一下,所以要将resultType改为resultMap。
<mapper namespace="me.gacl.mapping.orderMapper"> <!-- 根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的, 因为我们通过<resultMap>映射实体类属性名和表的字段名一一对应关系 --> <select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap"> select * from orders where order_id=#{id} </select> <!--通过<resultMap>映射实体类属性名和表的字段名对应关系 --> <resultMap type="me.gacl.domain.Order" id="orderResultMap"> <!-- 用id属性来映射主键字段 --> <id property="id" column="order_id"/> <!-- 用result属性来映射非主键字段 --> <result property="name" column="order_name"/> <result property="price" column="order_price"/> </resultMap> </mapper>
总结:
使用MyBatis进行查询操作时无法查询出相应的结果,但是纯sql又能查出数据时,需要考虑下是不是字段对应实体类的属性出现问题,解决方法有如下两点
1>通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。
2>通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。
时间: 2024-10-05 08:19:42