博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis 嵌套查询与懒加载
阅读量:4345 次
发布时间:2019-06-07

本文共 8252 字,大约阅读时间需要 27 分钟。

懒加载:对于页面有很多静态资源的情况下(比如网商购物页面),为了节省用户流量和提高页面性能,可以在用户浏览到当前资源的时候,再对资源进行请求和加载。

      fetchType="lazy"

 

 mybatis多对一嵌套查询:

嵌套查询的特点就是:利用一个查询的时候发送多条sql语句;

1+n条sql语句:1条主sql,还有多条分别查询语句:

 

 例如:我想要查询用户的详细信息包括地址,(地址在另一张表,此时表被关系表管理),我就需要嵌套查询:

1.先根据id查询用户信息:

select * from t_user where id =5

 

2.再根据用户信息查询用户地址的关系表得到地址表中的id:

select address_id aid from t_user_address ua where user_id =5

3.根据关系表地址id拿到地址的详细信息:

select * from t_address where id =1

select * from t_address where id =2

 

代码原理:

 

 

 t_address 地址信息表

 

 t_address_user地址id和用户id关系表

 t_user用户表

 

 查询的sql和结果:

 

 代码实现:

 

配置懒加载:mybatis-config.xml

 

编写sql:UserDAO.xm 1 <resultMap id="mynesting" type="user">

 

1 
2
3
4
5
6
7
8
9 10
11
12
13
14
15 16 19 20 23 24

 

 

 

 

 UserDAO:

1 package com.etc.dao; 2  3 import com.etc.entity.User; 4  5 import java.util.List; 6  7 public interface UserDao { 8   9     List
ById(int id);10 11 12 }

 

UA.java:

1 package com.etc.entity; 2  3 import java.util.List; 4  5 public class UA { 6     private int userId; 7     private int addressId; 8     private List
addresses; 9 10 public List
getAddresses() {11 return addresses;12 }13 14 public void setAddresses(List
addresses) {15 this.addresses = addresses;16 }17 18 public int getUserId() {19 return userId;20 }21 22 public void setUserId(int userId) {23 this.userId = userId;24 }25 26 public int getAddressId() {27 return addressId;28 }29 30 public void setAddressId(int addressId) {31 this.addressId = addressId;32 }33 34 @Override35 public String toString() {36 return ""+addresses;37 }38 }
UA.java

User.java:

1 package com.etc.entity; 2  3 import java.util.Date; 4 import java.util.List; 5  6 public class User { 7     private int id; 8     private String name; 9     private double sal;10     private Date birth;11     private List
addresses;12 13 public User() {14 }15 16 public User(int id, String name, double sal, Date birth, List
addresses) {17 this.id = id;18 this.name = name;19 this.sal = sal;20 this.birth = birth;21 this.addresses = addresses;22 }23 24 public int getId() {25 return id;26 }27 28 public void setId(int id) {29 this.id = id;30 }31 32 public String getName() {33 return name;34 }35 36 public void setName(String name) {37 this.name = name;38 }39 40 public double getSal() {41 return sal;42 }43 44 public void setSal(double sal) {45 this.sal = sal;46 }47 48 public Date getBirth() {49 return birth;50 }51 52 public void setBirth(Date birth) {53 this.birth = birth;54 }55 56 public List
getAddresses() {57 return addresses;58 }59 60 public void setAddresses(List
addresses) {61 this.addresses = addresses;62 }63 64 @Override65 public String toString() {66 return "User{" +67 "id=" + id +68 ", name='" + name + '\'' +69 ", sal=" + sal +70 ", birth=" + birth +71 ", addresses=" + addresses +72 '}';73 }74 }
User.java

address.java:

1 package com.etc.entity; 2  3 public class Address { 4     private int id; 5     private String name; 6     private User user; 7  8     public int getId() { 9         return id;10     }11 12     public void setId(int id) {13         this.id = id;14     }15 16     public String getName() {17         return name;18     }19 20     public void setName(String name) {21         this.name = name;22     }23 24     public User getUser() {25         return user;26     }27 28     public void setUser(User user) {29         this.user = user;30     }31 32     @Override33     public String toString() {34         return "Address{" +35                 "id=" + id +36                 ", name='" + name + '\'' +37                 ", user=" + user +38                 '}';39     }40 }
address.java

 

 

t_uesr.sql:

1 /* 2 Navicat MySQL Data Transfer 3  4 Source Server         : Test 5 Source Server Version : 50562 6 Source Host           : localhost:3310 7 Source Database       : mybatis 8  9 Target Server Type    : MYSQL10 Target Server Version : 5056211 File Encoding         : 6500112 13 Date: 2019-07-25 11:43:2314 */15 16 SET FOREIGN_KEY_CHECKS=0;17 18 -- ----------------------------19 -- Table structure for t_user20 -- ----------------------------21 DROP TABLE IF EXISTS `t_user`;22 CREATE TABLE `t_user` (23   `id` int(11) NOT NULL AUTO_INCREMENT,24   `name` varchar(255) DEFAULT NULL,25   `sal` float(255,0) DEFAULT NULL,26   `birthday` date DEFAULT NULL,27   PRIMARY KEY (`id`)28 ) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;29 30 -- ----------------------------31 -- Records of t_user32 -- ----------------------------33 INSERT INTO `t_user` VALUES ('5', 'asda', '1000', '2019-07-22');34 INSERT INTO `t_user` VALUES ('6', 'asda', '1000', '2019-07-22');35 INSERT INTO `t_user` VALUES ('7', 'asdasdaa', '1000', '2019-07-22');36 INSERT INTO `t_user` VALUES ('8', 'asdasdaa', '1000', '2019-07-22');37 INSERT INTO `t_user` VALUES ('9', 'asdasdaa', '1000', '2019-07-22');38 INSERT INTO `t_user` VALUES ('10', 'asdasdaa', '1000', '2019-07-22');39 INSERT INTO `t_user` VALUES ('11', 'asdasdaa', '1000', '2019-07-22');40 INSERT INTO `t_user` VALUES ('12', 'asdasdaa', '1000', '2019-07-22');41 INSERT INTO `t_user` VALUES ('13', 'asdasdaa', '1000', '2019-07-23');42 INSERT INTO `t_user` VALUES ('14', 'asdasdaa', '1000', '2019-07-23');
t_user.sql

t_address.sql:

1 /* 2 Navicat MySQL Data Transfer 3  4 Source Server         : Test 5 Source Server Version : 50562 6 Source Host           : localhost:3310 7 Source Database       : mybatis 8  9 Target Server Type    : MYSQL10 Target Server Version : 5056211 File Encoding         : 6500112 13 Date: 2019-07-25 11:43:3014 */15 16 SET FOREIGN_KEY_CHECKS=0;17 18 -- ----------------------------19 -- Table structure for t_address20 -- ----------------------------21 DROP TABLE IF EXISTS `t_address`;22 CREATE TABLE `t_address` (23   `id` int(11) NOT NULL AUTO_INCREMENT,24   `name` varchar(255) DEFAULT NULL,25   PRIMARY KEY (`id`)26 ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;27 28 -- ----------------------------29 -- Records of t_address30 -- ----------------------------31 INSERT INTO `t_address` VALUES ('1', '这是地址');32 INSERT INTO `t_address` VALUES ('2', '这是地址');33 INSERT INTO `t_address` VALUES ('3', '7');34 INSERT INTO `t_address` VALUES ('4', '8');35 INSERT INTO `t_address` VALUES ('5', '9');36 INSERT INTO `t_address` VALUES ('6', '10');
t_address.sql

t_user_address.sql:

1 /* 2 Navicat MySQL Data Transfer 3  4 Source Server         : Test 5 Source Server Version : 50562 6 Source Host           : localhost:3310 7 Source Database       : mybatis 8  9 Target Server Type    : MYSQL10 Target Server Version : 5056211 File Encoding         : 6500112 13 Date: 2019-07-25 11:43:1214 */15 16 SET FOREIGN_KEY_CHECKS=0;17 18 -- ----------------------------19 -- Table structure for t_user_address20 -- ----------------------------21 DROP TABLE IF EXISTS `t_user_address`;22 CREATE TABLE `t_user_address` (23   `user_id` int(11) DEFAULT NULL,24   `address_id` int(11) DEFAULT NULL,25   UNIQUE KEY `address_unqiue` (`address_id`) USING BTREE26 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;27 28 -- ----------------------------29 -- Records of t_user_address30 -- ----------------------------31 INSERT INTO `t_user_address` VALUES ('5', '1');32 INSERT INTO `t_user_address` VALUES ('5', '2');33 INSERT INTO `t_user_address` VALUES ('6', '3');34 INSERT INTO `t_user_address` VALUES ('6', '4');35 INSERT INTO `t_user_address` VALUES ('6', '5');
t_user_address.sql

 

懒加载: fetchType="lazy"

 

userDaoTest:

 

查询结果:

 

 

转载于:https://www.cnblogs.com/LiuOOP/p/11243423.html

你可能感兴趣的文章
[置顶] Android系统五大布局详解Layout
查看>>
IronRuby - 编写自动化测试脚本
查看>>
禁止CloudStack删除Xenserver原有虚拟机
查看>>
How Many Elements Are in the Power Set?
查看>>
eclipse突然启动不了问题
查看>>
Python_函数
查看>>
下游系统访问思考
查看>>
TreeView绑定数据库数据
查看>>
StringTokenizer
查看>>
移动互联网产品设计的核心要素有哪些?
查看>>
经典SQL语句大全
查看>>
ftp免交互上传文件脚本
查看>>
linq 去除list集合中的重复项。
查看>>
php断点续传
查看>>
题目:最佳课题选择
查看>>
latex插入python代码
查看>>
448. Find All Numbers Disappeared in an Array
查看>>
Nginx 安装配置
查看>>
在 tornado 中异步无阻塞的执行耗时任务
查看>>
Android中的GridView
查看>>