1、建立订单表sql
order_id order_name order_price数据库
1 苹果 6.5app
2 香蕉 3dom
3. 桔子 2spa
2、定义实体类code
public Orderxml
{对象
private Integer id;get
private String name;class
private float price;
}
3、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提供的解决方式来解决字段名和属性名的映射关系的。