Mybaits之resultType和resultMap實現一對一查詢
阿新 • • 發佈:2018-11-04
resultType:
po類:
public class OrdersCustom extends Orders { private String username; private String sex; private String address; set和get省略 } public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; //使用者資訊 private User user; } public class User implements Serializable { //屬性名和資料庫表的欄位對應 private int id; private String username;// 使用者姓名 private String sex;// 性別 private Date birthday;// 生日 private String address;// 地址 //使用者建立的訂單列表 private List<Orders> ordersList; }
Mapper.xml:
<select id="findOrdersUser" resultType="com.mybatis.xdw.po.OrdersCustom">
select orders.*,user.username,user.sex,user.address
from orders,user where orders.user_id = user.id
</select>
Test類:
public void findOrdersUser() throws Exception { SqlSession sqlSession = ssf.openSession(); OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class); List<OrdersCustom> list = ordersMapperCustom.findOrdersUser(); System.out.println(list); sqlSession.close(); }
resultMap:
po類同上
Mapper.xml:
<!-- 把資料庫和實體類聯絡起來,找出表和實體類對應的欄位 --> <resultMap type="com.mybatis.xdw.po.Orders" id="OrdersUserResultMap"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> <association property="user" javaType="com.mybatis.xdw.po.User"> <id column="id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="birthday" property="birthday"/> <result column="address" property="address"/> </association> </resultMap> <select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap"> select orders.*,user.username,user.sex,user.address from orders,user where orders.user_id = user.id </select>
Test類:
public void findOrdersUserResultMap() throws Exception {
SqlSession sqlSession = ssf.openSession();
OrdersMapperCustom ordersMapperCustom =
sqlSession.getMapper(OrdersMapperCustom.class);
List<Orders> list = ordersMapperCustom.findOrdersUserResultMap();
System.out.println(list);
sqlSession.close();
}
總結:
resultType:使用resultType實現較為簡單,如果pojo中沒有包括查詢出來的列名,需要增加列名對應的屬性,即可完成對映。
如果沒有查詢結果的特殊要求建議使用resultType。
resultMap:需要單獨定義resultMap,實現有點麻煩,如果對查詢結果有特殊的要求,使用resultMap可以完成將關聯查詢對映pojo的屬性中。
resultMap可以實現延遲載入,resultType無法實現延遲載入。