这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。
用知识改变命运,让我们的家人过上更好的生活
。
文章目录
-
- 一、需求
-
二、什么是延迟加载
-
- 1. 延迟加载的定义
-
2. 延迟加载的利与弊
-
三、准备开发环境
-
- 1. 数据库表
-
2. 编写配置文件
-
四、项目结构图
-
五、一对一关系中配置延迟加载
-
- 1. 创建用户和账户实体类
-
2. 创建 IAccountDao 接口和 IAccountDao.xml 文件
-
3 .在 Mybatis-config.xml 配置文件中注册映射文件
-
4. 在 Mybatis-config.xml 配置文件中开启懒加载配置
-
5. 测试类(只查询账户信息)
-
二、一对多关系中配置延迟加载
-
- 1.在User实体类中加入List属性
-
2. 创建用户和账户持久层接口的方法
-
3. 编写用户持久层映射配置
-
4. 编写账户持久层映射配置
-
5. 测试类(只查询用户信息)
查询账户(Account)信息并且会关联查询用户(User)的所有信息。如果只需要查询账户(Account)信息即可满足需求,当我们需要查询用户(User)信息的时时候再去进行查询用户(User)信息。
解决以上需求将用到延迟加载的知识。
1. 延迟加载的定义
延迟加载 就是在需要 用到数据时才进行加载 ,不需要用到数据时就不进行加载数据。 延迟加载也称为懒加载. 。
2. 延迟加载的利与弊
好处:先从单表进行查询数据,需要时再从关联表去关联查询,将会提高数据库性能,因为查询单表要比关联查询多张表速度快。
坏处: 因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗时间,所以可能造成用户等待时间变长,造成用户体验下降。
1. 数据库表
User表
CREATE TABLE user
(
id
int(11) NOT NULL AUTO_INCREMENT,
username
varchar(32) NOT NULL COMMENT ‘用户名称’,
sex
char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT ‘性别’,
birthday
datetime DEFAULT NULL COMMENT ‘生日’,
address
varchar(256) DEFAULT NULL COMMENT ‘地址’,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
Account表
CREATE TABLE account
(
ID
int(11) NOT NULL COMMENT ‘编号’,
UID
int(11) DEFAULT NULL COMMENT ‘用户编号’,
MONEY
double DEFAULT NULL COMMENT ‘金额’,
PRIMARY KEY (ID
),
KEY FK_Reference_8
(UID
),
CONSTRAINT FK_Reference_8
FOREIGN KEY (UID
) REFERENCES user
(id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2. 编写配置文件
jdbcConfig.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_study?characterEncoding=utf8
jdbc.username=root
jdbc.password=root
Mybatis-config.xml
1. 创建用户和账户实体类
用户实体类 User.java
public class User implements Serializable {
private Integer id;
private String username;
private String sex;
private Date birthday;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return “User{” +
“id=” + id +
“, username='” + username + ‘’’ +
“, sex='” + sex + ‘’’ +
“, birthday=” + birthday +
“, address='” + address + ‘’’ +
‘}’;
}
}
账户实体类 Account.java
public class Account implements Serializable {
private Integer id;
private Integer uid;
private Double money;
// 从表实体应该包含一个主表实体的对象应用,和用户表构成一对一的关系,即一个账号只能由一个用户创建
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 getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
@Override
public String toString() {
return “Account{” +
“id=” + id +
“, uid=” + uid +
“, money=” + money +
‘}’;
}
}
2. 创建 IAccountDao 接口和 IAccountDao.xml 文件
IAccountDao
public interface IAccountDao {
/**
-
查询所有账户信息
-
@return
*/
List findAll();
}
IAccountDao.xml
SELECT
FROM
account
3 .在 Mybatis-config.xml 配置文件中注册映射文件
4. 在 Mybatis-config.xml 配置文件中开启懒加载配置
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档
还有更多面试复习笔记分享如下
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
67)]
[外链图片转存中…(img-kfcdY803-1712174272667)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
由于篇幅有限,这里就不一一罗列了,20道常见面试题(含答案)+21条MySQL性能调优经验小编已整理成Word文档或PDF文档
[外链图片转存中…(img-tuWGtOab-1712174272668)]
还有更多面试复习笔记分享如下
[外链图片转存中…(img-mmj4ZXn0-1712174272668)]
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!