标签:use system 继承 不用 list xtend 基本数据类型 span 转换
1,例如订单表与用户表的关联,一个订单对应一个用户,这是一对一关联;
用代码实现是这样:
A(用resultType去实现的话,如下)
1,使用到继承,
OrderUser extend Order{ private String username; private String address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
这个类只需要写出相关确定需要的信息即可。
2,编写mapper.xml
OrderUser类继承Orders类后,OrderUser类包括了Orders类的所有字段,只需要定义用户的信息字段即可。
接着按照需求编写sql语句,在OrderMapper.xml映射文件中添加如下select
元素:
<select id="getOrderUserList" resultType="orderuser">
SELECT
o.id,
o.user_id userId,
o.number,
o.createtime,
o.note,
u.username,
u.address
FROM
orders o
LEFT JOIN `user` u ON o.user_id = u.id
</select>
3,最后在dao层编写接口
List<OrderUser> getOrderUserList();
最后在OrderMapperTest单元测试类中编写如下测试方法:
@Test
public void testGetOrderUserList() {
SqlSession sqlSession = sqlSessionFactory.openSession();
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
List<OrderUser> orderList = orderMapper.getOrderUserList();
for (OrderUser orderUser : orderList) {
System.out.println(orderUser);
}
sqlSession.close();
}
方法二:
使用resultmap 实现:
定义专门的resultMap用于映射一对一查询结果。首先在Orders类中加入user属性,user属性中用于存储关联查询的用户信息,因为订单关联查询用户是一对一关系,
所以这里使用单个User对象存储关联查询的用户信息。这样Orders类的代码为:
public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number == null ? null : number.trim(); } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public String getNote() { return note; } public void setNote(String note) { this.note = note == null ? null : note.trim(); } }
重点的区别是,这里增加了一个User的对象属性,下面的mapper 就可以使用属性来进行关联了。
先在OrderMapper.xml映射文件中添加如下select
元素:
<select id="getOrderUserResultMap" resultMap="order_user_resultmap"> SELECT o.id, o.user_id, o.number, o.createtime, o.note, u.username, u.address FROM orders o LEFT JOIN `user` u ON o.user_id = u.id </select>
上面id为order_user_resultmap的resultMap也须定义,如下:
<resultMap type="orders" id="order_user_resultmap">
<id property="id" column="id"/>
<result property="userId" column="user_id" />
<result property="number" column="number" />
<result property="createtime" column="createtime" />
<result property="note" column="note" />
<!-- 配置一对一关联映射 -->
<association property="user" javaType="cn.itheima.mybatis.po.User"> //这个就是关联的属性(通过一对一进行关联)
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
</association>
</resultMap>
3,附上resultType 与 resultMap最直观的区别:、
标签:use system 继承 不用 list xtend 基本数据类型 span 转换
原文地址:https://www.cnblogs.com/aashui/p/9363155.html