网站建设公司现在还挣钱吗,西安编程培训机构,wordpress站点添加skype,网站语言是什么目录 一 对于映射的概念
1.1 三种关系映射
1.2 resultType与resultMap的区别
resultType#xff1a;
resultMap#xff1a;
二#xff0c;一对一关联查询
2.1 嵌套结果集编写
2.2 案例演示
三#xff0c;一对多关联查询
3.1 嵌套结果集编写 3.3 案例演示
四…目录 一 对于映射的概念
1.1 三种关系映射
1.2 resultType与resultMap的区别
resultType
resultMap
二一对一关联查询
2.1 嵌套结果集编写
2.2 案例演示
三一对多关联查询
3.1 嵌套结果集编写 3.3 案例演示
四多对多关联查询
4.1 嵌套结果集编写 4.2 案例演示 一 对于映射的概念 在关系型数据库中表与表之间存在着三种关联映射关系分别为一对一关系、一对多关系和多对多关系。 那在 MyBatis 中通过 association 元素来处理对象与对象之间关联关系association 元素提供了一系列属性用于维护数据表之间的关系。association 元素是 resultMap元素的子元素它有两种配置方式嵌套查询方式和嵌套结果集方式。 1.1 三种关系映射 一对一关联映射 这种关系表示两个实体类之间存在唯一的对应关系通常通过在表之间使用外键来建立连接。在 MyBatis 中可以使用 association 元素来实现一对一关联映射。 一对多关联映射 这种关系表示一个实体类关联多个其他实体类的实例。例如在数据库中一个文章可以对应多个评论。在 MyBatis 中可以使用 collection 元素来实现一对多关联映射。 多对多关联映射 这种关系表示两个实体类之间存在多对多的关系通常通过中间表来实现。例如一个用户可以拥有多个角色一个角色也可以被多个用户拥有。在 MyBatis 中可以使用中间表和联合查询来实现多对多关联映射。 1.2 resultType与resultMap的区别
resultType 使用 resultType我们直接指定了查询结果的类型它通常用于简单的查询语句不需要复杂的映射关系。优点是简单直观缺点是不能进行复杂的映射操作实体类没有该属性的情况。 resultMap 而使用 resultMap我们可以更加灵活地映射查询结果到任意类型的 Java 对象上。通过定义一个 resultMap我们可以指定每个查询结果列与 Java 对象属性之间的映射关系。优点是功能强大可以进行各种复杂的映射操作缺点是需要编写更多的 XML 配置代码 二一对一关联查询
这里需要建一个VO类VO是Value Object的缩写是一轻量级的数据结构用于在视图层与业务逻辑层之间传递数据。VO通常用于表示视图层所需的数据这些数据来自于业务逻辑层或数据访问层。VO的主要目的是将业务逻辑层的数据结构转换为视图层可以使用的数据结构 。简单来说就是用于关系映射时的结果接收。
下面我们利用订单项以及订单来描述一对一的关系所以我们建立一个OrderitemVo
OrderitemVo:
public class OrderitemVo extends Orderitem {private Order order;public Order getOrder() {return order;}public void setOrder(Order order) {this.order order;}
2.1 嵌套结果集编写
resultMap idOrderitemvoMap typecom.Bing.vo.OrderitemVoresult columnorder_item_id propertyorderItemId/resultresult columnproduct_id propertyproductId/resultresult columnquantity propertyquantity/resultresult columnoid propertyoid/resultassociation propertyorder javaTypecom.Bing.model.Orderresult columnorder_id propertyorderId/resultresult columnorder_no propertyorderNo/result/association/resultMapselect idselectByOiid resultMapOrderitemvoMap parameterTypejava.lang.Integerselect * from t_hibernate_order o,t_hibernate_order_item oi where o.order_idoi.oid and oi.order_item_id#{oiid}/select
2.2 案例演示
接口类并实现
接口Biz编写
public interface OrderitemBiz {OrderitemVo selectByOiid(Integer oiid);
}
实现类Impl类继承Biz:
Service
public class OrderitemImpl implements OrderitemBiz {Autowiredprivate OrderitemMapper OrderitemMapper;Overridepublic OrderitemVo selectByOiid(Integer oiid) {return OrderitemMapper.selectByOiid(oiid);}
}
Test类编写
RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(locations{classpath:spring-context.xml})
public class OrderitemImplTest {Autowiredprivate OrderitemBiz OrderitemBiz;Testpublic void selectByOiid() {OrderitemVo orderitemVo OrderitemBiz.selectByOiid(27);System.out.println(orderitemVo);System.out.println(orderitemVo.getOrder());}
}
测试运行结果 三一对多关联查询
下面我们利用订单以及订单项来描述一对多的关系所以我们建立一个OrderVo。
注意要使用list集合
public class OrderVo extends Order {private ListOrderitem orderitemsnew ArrayList();public ListOrderitem getOrderitems() {return orderitems;}public void setOrderitems(ListOrderitem orderitems) {this.orderitems orderitems;}Overridepublic String toString() {return OrderVo{ orderitems orderitems };}
}
3.1 嵌套结果集编写 resultMap idOrderMap typecom.Bing.vo.OrderVo result columnorder_id propertyorderId/resultresult columnorder_no propertyorderNo/resultcollection propertyorderitems ofTypecom.Bing.model.Orderitemresult columnorder_item_id propertyorderItemId/resultresult columnproduct_id propertyproductId/resultresult columnquantity propertyquantity/resultresult columnoid propertyoid/result/collection/resultMapselect idbyOid resultMapOrderMap parameterTypejava.lang.Integer select * from t_hibernate_order o,t_hibernate_order_item oi where o.order_idoi.oidand o.order_id#{oid}/select 3.3 案例演示
接口类并实现
接口Biz编写
public interface OrderBiz {OrderVo byOid(Integer id);
}
实现Impl类继承Biz:
Service
public class OrderBizImpl implements OrderBiz {Autowiredprivate OrderMapper orderMapper;Overridepublic OrderVo byOid(Integer id) {return orderMapper.byOid(id);}
}
Test类编写
RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(locations{classpath:spring-context.xml})
public class OrderBizImplTest {
Autowired
private OrderBiz orderBiz;Testpublic void byOid() {OrderVo orderVo orderBiz.byOid(7);System.out.println(orderVo);orderVo.getOrderitems().forEach(System.out::println);}
}
测试类运行结果 四多对多关联查询
我们以书籍有多个类别以及每个类别又有多本书的这种关系来实操多对多关系的查询
HbookVo
public class HbookVo extends HBook {private ListHCategory hcategory;public ListHCategory getHcategory() {return hcategory;}public void setHcategory(ListHCategory hcategory) {this.hcategory hcategory;}
}
4.1 嵌套结果集编写
resultMap idHbookVo typecom.Bing.vo.HbookVo result columnbook_id propertybookId/resultresult columnbook_name propertybookName/resultresult columnprice propertyprice/resultcollection propertyhcategory ofTypecom.Bing.model.HCategoryresult columncategory_id propertycategoryId/resultresult columncategory_name propertycategoryName/result/collection/resultMapselect idselectByBid resultMapHbookVo parameterTypejava.lang.IntegerSELECT*
FROMt_hibernate_book b,t_hibernate_book_category bc,t_hibernate_category c
WHEREb.book_id bc.bidAND bc.cid c.category_idAND b.book_id #{bid}/select 4.2 案例演示
接口类并实现
接口Biz编写
public interface HBookBiz {HbookVo selectByBid(Integer bid);
}
实现类Impl类继承Biz:
Service
public class HBookBizImpl implements HBookBiz {Autowiredprivate HBookMapper hbookMapper;Overridepublic HbookVo selectByBid(Integer bid) {return hbookMapper.selectByBid(bid);}
}
Test类编写
RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(locations{classpath:spring-context.xml})
public class HBookBizImplTest {Autowiredprivate HBookBiz hbookBiz;Testpublic void selectByBid() {HbookVo hbookVo hbookBiz.selectByBid(8);System.out.println(hbookVo);hbookVo.getHcategory().forEach(System.out::println);}
}
Test类运行结果 好啦今天的分享就到这了希望能够帮到你呢