<resultMap type="com.cn.vo.Teacher" id="teacher">
<id property="id" column="id" javaType="int" jdbcType="INTEGER" />
<result property="name" column="name" javaType="string"
jdbcType="VARCHAR" />
<!-- <collection property="students" column="t_s_id" ofType="com.cn.vo.Student">
<id property="sid" column="sid" javaType="int" jdbcType="INTEGER" />
<result property="sname" column="sname" javaType="string"
jdbcType="VARCHAR" />
</collection> -->
<collection property="students" resultMap="studentResultMap" />
<collection property="goods" resultMap="goodsResultMap" />
</resultMap>
<resultMap type="com.cn.vo.Student" id="studentResultMap">
<id property="sid" column="sid" javaType="int" jdbcType="INTEGER" />
<result property="sname" column="sname" javaType="string" jdbcType="VARCHAR" />
</resultMap>
<resultMap type="com.cn.vo.GoodItem" id="goodsResultMap">
<id property="gid" column="gid" javaType="int" jdbcType="INTEGER" />
<result property="goodName" column="goodName" javaType="string" jdbcType="VARCHAR" />
<result property="price" column="price" javaType="float" jdbcType="FLOAT" />
<result property="good_sid" column="good_sid" javaType="int" jdbcType="INTEGER" />
</resultMap>
<select id="one2many" parameterType="int" resultMap="teacher">
<!-- select
t.id,t.name,s.t_s_id,s.sid,s.sname
from teacher t
left join student s on t.id = s.t_s_id
left join goodItem g on g.good_sid=s.t_s_id
where t.id = #{id} -->
select
t.id,t.name,s.t_s_id,s.sid,s.sname,g.gid,g.goodname,g.price,g.good_sid
from teacher t
left join student s on t.id = s.t_s_id
left join goodItem g on g.good_sid = s.sid
where t.id = #{id}
</select>
以上是优化的结论:用一次请求解决n次请求查询
题目:在teacher 表中找到该 teacher下面的n个student并找出n个学生每个学生有多少个goods。
sql:
CREATE TABLE teacher (
id number NOT NULL ,
name varchar(100) DEFAULT NULL,
PRIMARY KEY (id)
) ;
CREATE TABLE student (
sid number NOT NULL ,
sname varchar(100) DEFAULT NULL,
t_s_id number NOT NULL ,
PRIMARY KEY (sid)
) ;
insert into teacher(id,name) values(111,'zhangsan');
insert into teacher(id,name) values(222,'lisi');
insert into student(sid,sname,t_s_id) values(1,'xs1',111);
insert into student(sid,sname,t_s_id) values(2,'xs2',111);
insert into student(sid,sname,t_s_id) values(3,'xs3',222);
insert into student(sid,sname,t_s_id) values(4,'xs4',111);
select * from student;
select * from teacher;
select t.id,t.name,s.t_s_id,s.sid,s.sname
from teacher t
left join student s
on t.id = s.t_s_id where t.id = 111
create table goodItem(
gid number not null,
goodName varchar(10),
price float,
good_sid number
)
insert into goodItem(gid,Goodname,Price,Good_Sid)
values(1,'iphone6','6000',2);
insert into goodItem(gid,Goodname,Price,Good_Sid)
values(2,'iphone5','5000',2);
insert into goodItem(gid,Goodname,Price,Good_Sid)
values(3,'iphone4','4000',2);
insert into goodItem(gid,Goodname,Price,Good_Sid)
values(4,'iphone3','3000',1);
vo:
package com.cn.vo;
public class Student {
private int sid;
private String sname;
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
package com.cn.vo;
import java.util.List;
public class Teacher {
private int id;
private String name;
private List<Student> students;
private List<GoodItem> goods;
public List<GoodItem> getGoods() {
return goods;
}
public void setGoods(List<GoodItem> goods) {
this.goods = goods;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
}
package com.cn.vo;
public class Item {
private Integer gid;
private String goodName;
private float price;
private Integer good_sid;
public Integer getGid() {
return gid;
}
public void setGid(Integer gid) {
this.gid = gid;
}
public String getGoodName() {
return goodName;
}
public void setGoodName(String goodName) {
this.goodName = goodName;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public Integer getGood_sid() {
return good_sid;
}
public void setGood_sid(Integer good_sid) {
this.good_sid = good_sid;
}
}
package com.cn.vo;
import java.util.List;
public class GoodItem extends Item{
/* private List<Student> students;
private List<Teacher> teachers;
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
public List<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(List<Teacher> teachers) {
this.teachers = teachers;
}
*/
}
分享到:
相关推荐
在这个场景中,"mybatis关联查询问题(一对多、多对一)"是核心关注点,这涉及到数据库设计中的关系映射以及在Mybatis中如何处理这些关系。 1. **一对多关联**: 在数据库设计中,一对多关联是指一个表中的记录可以...
本案例主要探讨的是Mybatis中的简单关系查询,包括两种常见的处理方式:嵌套查询和嵌套结果,以及多对一查询的懒加载配置。 首先,我们来看嵌套查询,这是初学者在处理关联查询时最直观的方式。当我们在映射文件中...
面试中可能会询问如何通过MyBatis进行SQL优化,包括使用合适的索引、避免N+1查询问题、合理使用缓存以及利用MyBatis提供的内置方法如foreach进行批量处理。 6. MyBatis与其他框架整合:MyBatis是一个轻量级的框架,...
- **性能**:分页时,避免一次性加载大量数据,而是采用懒加载策略,只加载当前页所需的数据,减少内存占用。 - **代码复用**:创建通用的分页Action和Service方法,以便在多个地方重用。 - **错误处理和日志**:...
在IT行业中,Spring和MyBatis是两个非常重要的框架,它们在构建企业级Java应用程序时起着关键作用。...在实际开发中,我们还需要关注性能优化,如使用缓存、避免N+1查询等问题,以提升系统的整体性能。
- 多对多:@ManyToMany/@JoinTable。 5. **Mybatis缓存机制**: - 一级缓存:SqlSession级别的缓存。 - 二级缓存:SqlSessionFactory级别的缓存。 #### 三、Redis缓存系统实战 **Redis**是一个开源的键值存储...
通过分析流程,可以对查询进行诊断和改进,以达到进一步优化的目的。 总之,Spring+MyBatis的架构能够帮助开发者构建出既能满足高性能要求,又具备良好扩展性和维护性的企业级应用。在实际项目中,开发者应当根据...
国际化(i18n)则涉及如何支持多种语言,而防止重复提交是Web开发中的重要问题,Struts2提供了一种解决方案。 2. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,简化了数据库操作。`day57_hibernate_多...
总的来说,SSM框架下的一对多和多对一查询是通过MyBatis的resultMap和相应的SQL语句来实现的,这使得我们可以方便地处理复杂的数据关系,提高了开发效率。同时,通过合理的数据库设计和查询优化,可以有效避免N+1...
在数据库查询优化中,"N+1 选择问题"是一个常见的性能瓶颈,特别是在使用ORM(对象关系映射)框架如iBATIS时。N+1问题发生在当我们执行一系列单独的SQL查询来获取关联数据,而不是一次性加载所有所需数据。这可能...
分页是Web应用中常用的一种优化手段,可以有效地提高用户体验,避免一次性加载大量数据导致页面加载缓慢。实现分页通常需要在服务层处理分页逻辑,如计算总页数,然后在Mybatis的Mapper中编写对应的分页查询语句。 ...
在实际项目中,我们还需要考虑性能优化,如使用PageHelper分页插件,避免N+1查询,以及合理设计缓存策略等。 通过SpringMVC与MyBatis的整合,我们可以构建出一个清晰、高效的Web应用架构,使得开发者能更专注于业务...
7. **最佳实践**:学习如何优化SpringMVC和MyBatis的性能,如合理使用PageHelper进行分页,避免N+1查询问题,使用MyBatis的动态SQL提高SQL的灵活性,以及利用Spring的AOP实现事务管理。 8. **异常处理和日志记录**...
例如,可以使用Spring Security进行权限控制,使用缓存提高数据访问效率,通过日志记录系统运行情况,以及通过i18n支持多语言环境。 总的来说,"管理系统系列--SSM(Spring+SpringMVC+Mybatis)新闻管理系统"是一个...
- **性能优化**:合理设计数据库表结构,避免 N+1 查询,使用缓存提高响应速度。 - **安全性**:对输入参数进行校验,防止 SQL 注入攻击,使用预编译的 SQL 语句(PreparedStatement)。 综上所述,Spring MVC 和...
2. MyBatis的SQL优化:合理设计和使用预编译的SQL(PreparedStatement),避免N+1查询问题,使用JOIN替代多表查询以减少数据库交互次数。 3. SpringMVC中的拦截器(Interceptor):通过自定义拦截器,可以实现权限...
4. **性能优化**:关注数据库查询性能,避免N+1查询,合理使用缓存,提升系统响应速度。 综上所述,SSM框架的代码生成工具是现代Java Web开发中的一大利器,它能有效地提高开发效率,降低项目成本,使开发者更加...
【ssm基于微信小程序加油服务系统论文】\n\n本文主要探讨了如何使用SSM(Spring、SpringMVC、MyBatis)框架构建一个基于微信小程序的加油服务系统。SSM是一个广泛应用于Java Web开发的集成框架,它将Spring的核心...
- MyBatis的缓存机制:一级缓存和二级缓存 5. **面试题常见问题** - 解释Spring的IoC和AOP概念并给出实际应用例子 - 描述一个完整的Struts 2请求处理流程 - Hibernate的懒加载和立即加载的区别,以及如何配置 ...