Mybatis处理表关联(懒加载)

1.关系型数据库?

  数据库中的表对象之间是有关系的。

  一对一,一对多,多对多。

  ORM映射。数据库表映射到实体对象。

             实体与实体之间是有关系的。

 一对多的关系。

 比如商品分类表与商品表之间的关系,就是一对多的关系。

     入库主表与入库子表之间的关系,也是一对多的关系。

     出库主表与出库子表之间的关系,也是一对多的关系。

ID编号  教师编号   课程编号   其余字段  (外键的都是多的关系)

1        001

2        001

很明显的就是在多的这个表里会出现1的这个表里的字段。

 

 

2.如果我们获取的时候,只想获取单表的数据:

 

 尽可能不用关联查询的时候就不用。

 

延迟加载,也叫懒加载,比如我们取商品信息表的数据,只会从商品信息表里去获取,如果发现我们除了取商品信息表的数据的时候,还会取商品分类表的数据,那么这个时候才会去查询商品分类表的数据。

 

实现延迟加载的步骤:

 

1),首先需要配置mybatis中使用延迟加载:

 

 

 

<!-- lazyLoadingEnabled设置为懒加载--><setting name="lazyLoadingEnabled" value="true"/><!-- aggressiveLazyLoading主动加载设置为false --><setting name="aggressiveLazyLoading" value="false"/>

 

 

 

2)需要配置jar包,cglib的jar包。

 

 

 

<!-- mybatis懒加载需要引入的jar包,cglib包 --><dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>3.1</version></dependency>

 

3.实体与实体之间的关系设定。

设计思路,在产品实体类中会有一个产品分类的实体对象。

  在分类的实体对象中会有一个产品表的集合对象数据。

比如产品表,那么会有一个产品分类的实体对象:

public class GoodsInfo implements Serializable{private Integer goodsid;private Integer goodstypeid;//外键private Integer companyid;private Integer unitid;private String createuser;private String updateuser;private String commdityid;private String commdityname;private String describeit;private String createtime;private String updatetime;private String remark;private String ifdelete;//会有一个外键的实体对象数据private GoodsType goodsType;
}

映射的配置(配置在实体XML里面):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jinglin.hotelsup.dao.imp.GoodsInfoMapper">
<!-- type是告诉将要映射的实体类,id就是标记名 -->
<!-- 实现懒加载的结果集(延迟加载) -->
<resultMap type="GoodsInfo" id="goodsInfoLazyResultMap"><!-- column表示的是数据库的列名,property是对应的属性名 --><id column="goodsid" property="goodsid"/><!--result表示数据库的字段和对象的字段的映射,column表示列名,property表示的是对象的属性名 --><result column="goodstypeid" property="goodstypeid"></result><result column="companyid " property="companyid "></result><result column="unitid" property="unitid"></result><result column="createuser" property="createuser"></result><result column="updateuser" property="updateuser"></result><result column="commdityid" property="commdityid"></result><result column="commdityname" property="commdityname"></result><result column="describeit" property="describeit"></result><result column="createtime" property="createtime"></result><result column="updatetime" property="updatetime"></result><result column="remark" property="remark"></result><result column="ifdelete" property="ifdelete"></result><!--关联另外一个实体对象 --><association  property="goodsType" select="getgoodstypeone"column="goodstypeid"></association>
</resultMap>
<select id="selectOne" resultMap="goodsInfoLazyResultMap" parameterType="java.lang.Integer">select * from goodsinfo where goodsid=#{goodsid}
</select>
<select id="getgoodstypeone" resultType="GoodsType" parameterType="java.lang.Integer">select * from goodstype where goodstypeid=#{goodstypeid}
</select>
</mapper>

2)对于产品分类表,那么会对应到多个产品,实际就是在产品分类表里会有产品的集合:

public class GoodsType implements Serializable {private Integer goodstypeid;private String goodstypename;private String ifdel;//分类表里会出现多的产品的集合private List<GoodsInfo> listgoods;public List<GoodsInfo> getListgoods() {return listgoods;}public void setListgoods(List<GoodsInfo> listgoods) {this.listgoods = listgoods;}public Integer getGoodstypeid() {return goodstypeid;}public void setGoodstypeid(Integer goodstypeid) {this.goodstypeid = goodstypeid;}public String getGoodstypename() {return goodstypename;}public void setGoodstypename(String goodstypename) {this.goodstypename = goodstypename;}public String getIfdel() {return ifdel;}public void setIfdel(String ifdel) {this.ifdel = ifdel;}}

那么对应的映射结果集(配置在对应产品类型的xml里面):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jinglin.hotelsup.dao.imp.GoodsTypeMapper"><!-- 配置延迟加载的映射结果集 --><resultMap type="GoodsType" id="goodsTypeLazyResultMap"><!-- 配置主键 --><id column="goodstypeid" property="goodstypeid"></id><result column="goodstypename" property="goodstypename"></result><result column="ifdel" property="ifdel"></result><!-- 配置集合 --><collection select="selectgoods" property="listgoods" column="goodstypeid"></collection></resultMap><select id="selectOne" resultMap="goodsTypeLazyResultMap" parameterType="java.lang.Integer">select * from goodstype where ifdel='N' and goodstypeid=#{goodstypeid}</select><select id="selectgoods" resultMap="com.jinglin.hotelsup.dao.imp.GoodsInfoMapper.goodsInfoLazyResultMap" parameterType="java.lang.Integer">select * from goodsinfo where goodstypeid=#{goodstypeid}</select></mapper>

 

转载于:https://www.cnblogs.com/ljljava/p/7440725.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/371404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring–设计领域模型和服务层

我们将为时间表管理构建应用程序。 因此&#xff0c;让我们首先考虑一些用例和实体。 让我用几个项目符号写它们&#xff1a; 任务由经理分配给员工。 一项任务可以分配给许多员工。 员工将他在某些任务上工作的小时数填满至系统。 经理/员工查看时间表上的报告&#xff08;时…

如何把很多照片拼成一张照片_一张现场照片引发的中韩之争

来源&#xff1a;渤海新水手聊船专栏前几天&#xff0c;微信群里(造船质量技术高级交流群)一位网友发了一张韩国船厂的现场照片&#xff0c;没想到瞬间引发全群几十位网友的热烈讨论&#xff0c;中韩之争就此上演&#xff01;照片反映出的是国内船厂很难做到的部分——分段预装…

计算机文档设置,电脑这样设置快速的共享文件、分享文档!

原标题&#xff1a;电脑这样设置快速的共享文件、分享文档&#xff01;在日常办公的时候&#xff0c;有时需要共同使用一些文件或者文档或者一些视频资料。那么要怎么方便的使用这些共同的资源呢&#xff1f;当然这时大家可能会说可以用QQ、微信传给对方不就可以了。但是如果文…

关于vue 框架与后台框架的混合使用的尝试

这几天我在研究前台框架和后台框架融合的问题,进行了一些尝试; 我前台选择的是 vue,当然也可以选择 react 等其他 mvvm 框架,不过 vue 对于我来说是最熟悉的; 后台话,我选择的是 php 的 lumen 框架,他是laravel 的简化版,因为比较轻量,所以这也是我的选择; 先说下我这边的环境:…

服务器 raid 1t硬盘吗,用了4块1T的硬盘,做了raid5,显示有2.7T,但是分区做完系统后,有700多G不能动...

满意答案ouourpt892013.11.14采纳率&#xff1a;46% 等级&#xff1a;12已帮助&#xff1a;13583人出现这种情况是由于创建的硬盘使用的是基本磁盘(MBR)格式&#xff0c;因受MBR磁盘格式技术的限制&#xff0c;MBR磁盘只支持2TB的磁盘容量&#xff0c;所以出现了你所说的情况…

vi编辑器服务器维护,vi编辑器有哪几种工作模式及如何转换_网站服务器运行维护,vi编辑器,工作模式...

整理分享一些 Linux思维导图(值得收藏)_网站服务器运行维护本篇文章整理分享了一些 Linux思维导图(值得收藏)。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。vi编辑器有三种基本的工作模式&#xff0c;分别是&#xff1a;指令行模式、…

(八)cmockery中的calculator和run_tests函数的注释代码

所分析的calculator.c和calculator_test.c文件位于 工程中的 cmockery/src/example/ 目录下&#xff0c;是一个相对而言比较全面的样例程序&#xff0c;用到了cmockery项目中的大多数单元测试方法。基本上涵盖了之前所有的样例程序中的用法&#xff0c;还有两组测试是database操…

第一章魔兽窗口

开始显示第一个窗体 用户直接点登陆的话就会提示用户名不能为空密码不能为空 没有账号的话只能先注册&#xff0c;点击蓝色摁钮进入下一个窗体 这里有判断是否为空&#xff0c;注册成功后利用窗体传值&#xff0c;并且打开第一个窗口 把注册的用户名和密码写上去就可以的登陆到…

Apache Digester示例–轻松配置

解决问题–硬编码&#xff0c;需要为您的应用程序创建自定义配置&#xff0c;例如struts配置文件&#xff0c;以仅通过更改文件来改变应用程序行为。 Apache Digester可以轻松为您完成此任务。 使用Apache Digester相当容易将XML文档转换为相应的Java bean对象层次结构。 请参阅…

Java FlameGraph 火焰图

上周一个偶然的机会听同事提到了Java FlameGraph&#xff0c;刚实验了一下&#xff0c;效果非常好。 一、什么是FlameGraph 直接看图说话。FlameGraph 是 SVG格式&#xff0c;矢量图&#xff0c;可以随意扩大缩小&#xff0c;看不清的信息可以放大看。图中&#xff0c;各种红橙…

烟草局计算机笔试,2020年广西南宁烟草局什么时候笔试?

最近广西烟草局各地市社招通知频发&#xff0c;南宁烟草局报名截止至今都无任何消息&#xff0c;根据往年的考情&#xff0c;通知近期很大可能会发布&#xff0c;将于6月底完成笔面!你备考好了吗&#xff1f;今天广西中公国企小编来给大家说一下南宁烟草局社招的笔试内容及备考…

JAVA Swing 组件演示***

下面是Swing组件的演示&#xff1a; package a_swing;import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Cursor; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.…

centos 获取硬件序列号_如何在 Linux 上查找硬件规格

在 Linux 系统上有许多工具可用于查找硬件规格。-- Sk&#xff08;作者&#xff09;在 Linux 系统上有许多工具可用于查找硬件规格。在这里&#xff0c;我列出了四种最常用的工具&#xff0c;可以获取 Linux 系统的几乎所有硬件&#xff08;和软件&#xff09;细节。好在是这些…

Spring –持久层–编写实体并配置Hibernate

欢迎来到本教程的第二部分。 当您看到本文有多长时间时&#xff0c;请不要惊慌–我向您保证&#xff0c;这主要是简单的POJO和一些生成的代码。 在开始之前&#xff0c;我们需要更新我们的Maven依赖项&#xff0c;因为我们现在将使用Hibernate和Spring。 将以下依赖项添加到pom…

无线服务器主机名是,wifi默认服务器主机名

wifi默认服务器主机名 内容精选换一换以CentOS 7操作系统的弹性云服务器为例&#xff1a;登录Linux弹性云服务器&#xff0c;查看“cloud-init”的配置文件。检查“/etc/cloud/cloud.cfg”文件中“update_hostname”是否被注释或者删除。如果没有被注释或者删除&#xff0c;则需…

pygame里面物体闪烁运动_利用自闪烁发光二极管探究小车在倾斜轨道上的运动规律...

2020年11月23日&#xff0c;周一&#xff0c;24小时安全值班。利用当班中午的时间&#xff0c;微主在创客空间测试了自闪烁发光二极管在匀加速运动中的效果&#xff0c;结果还比较满意。将小车放置在倾斜的轨道上&#xff0c;将自闪烁发光二极管和纽扣电池构成频闪光源&#xf…

python网络爬虫与信息提取 学习笔记day3

Day3&#xff1a; 只需两行代码解析html或xml信息 具体代码实现:day3_1 注意BeautifulSoup的B和S需要大写&#xff0c;因为python大小写敏感 import requests r requests.get("http://python123.io/ws/demo.html") r.text demo r.text from bs4 import Beauti…

王者荣耀微信哪个服务器人最少,王者荣耀:微信区王者人数锐减,大神们都去哪了?这些原因很真实...

原标题&#xff1a;王者荣耀&#xff1a;微信区王者人数锐减&#xff0c;大神们都去哪了&#xff1f;这些原因很真实王者荣耀&#xff1a;微信区王者人数锐减&#xff0c;大神们都去哪了&#xff1f;这些原因很真实大家好&#xff01;王者荣耀S16赛季已经开启一月之余&#xff…

一个div压在另一个div上面_【CSS小分享】用CSS画一个新拟态风格键盘

什么是新拟态新拟态的英文名称是“Neumorphism”&#xff0c;也有人称为“Soft UI”。简单讲&#xff0c;新拟态是一种图形样式&#xff0c;其原理是通过模拟真实物体来为界面的UI元素赋予真实感。新拟态风格起源于dribbble&#xff0c;后面陆续被收录在2020设计趋势预测里面&a…

Hibernate中Hql查询

这篇随笔将会记录hql的常用的查询语句&#xff0c;为日后查看提供便利。 在这里通过定义了三个类&#xff0c;Special、Classroom、Student来做测试&#xff0c;Special与Classroom是一对多&#xff0c;Classroom与Student是一对多的关系&#xff0c;这里仅仅贴出这三个bean的属…