首页 > 网站 > WEB开发 > 正文

MyBatis(六) resultMap 多表查询 之(一)

2024-04-27 15:19:04
字体:
来源:转载
供稿:网友

resultMap 用于映射 对象关系的 时使用。 对照对象的属性可以很方便的写出 mapper.xml 映射文件。

下面用一个例子来再次说明resultMap 的映射过程。 场景如下: 需要查询 多个用户,当点击查看是可以查看他的所有的订单,点击订单时可以查看里面的商品

如果要完成这个需求,对应的实体对象如下:

对象结构

Order//订单类 |--int id |--int userId |--date createTime |--User user User //用户信息 |--int id |--String name |--String address |--List<Order> orderList //该用户的所有订单 |--List<OrderItem> orderItemList//该订单的详情记录 OrderItem //订单详情 |--int id |--orderId //订单id |--int goodsId //商品id |--int number //购买数量 |--goods goods goods //商品对象 |--id |--name |--PRice

下面对应上面的文件 编写 Mapper.xml 的 ResultMap映射代码:

映射文件 OrderDao.xml

<!-- 获取用户订单和商品详情 --> <!-- Order --> <resultMap type="Order" id="findUserAndOrderDetail"> <id column="id" property="id"/> <result column="createTime" property="createTime"/> <!-- User user --> <association property="user" javaType="User"> <id column="userId" property="id"/><!-- 外键映射 --> <result column="name" property="name"/> <result column="address" property="address"/> </association> <!-- List<Order> orderItemList --> <collection property="orderItemList" ofType="OrderItem"> <id column="orderId" property="id"/><!-- 外键映射 --> <result column="number" property="number"/> <result column="note" property="note"/> <!-- goods --> <association property="goods" javaType="goods"> <id column="goodsId" property="id"/><!-- 外键映射 --> <result column="goodsName" property="name"/> <result column="price" property="price"/> </association> </collection> </resultMap><select id="findByName" resultMap="findUserAndOrderDetail"> select order.*, user.name,user.address orderItem.number goods.name goodsName,goods.price from user,order,orderItem,goods where user.id=order.userId and order.id = orderItem.orderId and goods.id = orderItem.goodsId </select>映射 List 时 使用 <collection oftype="包.对象"/>映射 对象时 使用 <association javaType="包.对象">外键关联 使用<id column="goodsId" property="id"/>

接口

public interface OrderDao { public List<Orders> findOrderMapById()throws Exception;}名称、方法名,返回值,返回类型 做到一致。OrderDao.xml == OrderDao.java (放在同一目录下)public List<Orders> findOrderMapById()throws Exception;<resultMap type="Order" id="findUserAndOrderDetail">

4、junit测试代码。

public void findOrderMapById() throws Exception { Sqlsession openSession = sqlSessionFactory.openSession(); OrderDao mapper = openSession.getMapper(OrderDao.class); List<Orders> Orders= mapper.findUserAndOrderDetail(); for(int i=0; i<Orders.size(); i++){ System.out.println(Orders.get(i)); } openSession.close(); }

下一章我们来做一个简单的例子: 这里写链接内容


上一篇:web前端面试整理

下一篇:java反射技术

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表