使用MyBatis进行查询操作时无法查询出相应的结果,但是纯sql又能查出数据时,需要考虑下是不是字段对应实体类的属性出现问题,解决方法有如下两点
1、通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。
2、通过<resultMap>来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。
下面来看例子吧:
方法一 直接将 返回的数据库字段名与实体类的属性名 设置成一样,返回类型(resultType)直接设置成接收的实体类名.
<mapper namespace="me.gacl.mapping.orderMapper"> <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"> <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>