mybatis性能优化二之多对多查询:用一次请求解决n次请求查询
<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; } */ }
地瓜园