ssm框架进阶-----数据库多表查询
2019-07-18 本文已影响0人
chen_k
没看过先看前两篇
正文
一. 查询双表
背景介绍:通过对科目id的查询,查询出所对应科目的成员
1.在test数据库中新建表sub_user
![](https://img.haomeiwen.com/i6842147/409cc0d62bf9b9a1.png)
2.在model中建立SubjectModel和SubjectModelOne
![](https://img.haomeiwen.com/i6842147/fc9c92d6607974b4.png)
![](https://img.haomeiwen.com/i6842147/0626276f17eb8635.png)
public class SubjectModel {
private UserModel userModel;
public UserModel getUserModel() {
return userModel;
}
public void setUserModel(UserModel userModel) {
this.userModel = userModel;
}
}
public class SubjectModelOne {
private List<UserModel> userModels;
public List<UserModel> getUserModels() {
return userModels;
}
public void setUserModels(List<UserModel> userModels) {
this.userModels = userModels;
}
}
3.在mapper的UserDao中编写sql 语句 如图【05】
![](https://img.haomeiwen.com/i6842147/53683d58a33b4037.png)
注:共有两种写法,任选一种即可
<resultMap id="SubjectUserMap" type="SubjectModel">
<association property="userModel" javaType="UserModel"
select="getUserById" column="id">
<result column="id" property="id"/>
<result property="name" column="name"/>
<result column="age" property="age"/>
</association>
</resultMap>
<resultMap id="SubjectUserMap2" type="SubjectModelOne">
<collection property="userModels" ofType="UserModel"
>
<result column="id" property="id"/>
<result property="name" column="name"/>
<result column="age" property="age"/>
</collection>
</resultMap>
<!--方式1-->
<select id="findUserBySubjectId" resultMap="SubjectUserMap">
SELECT * FROM sub_user WHERE subject_id=#{id}
</select>
<!--方式2-->
<select id="findUserBySubjectId2" resultMap="SubjectUserMap2">
SELECT * FROM sub_user s , user u WHERE u.id=s.user_id AND s.subject_id=#{id}
</select>
4.在dao的UserDao中编写 如图【06】
![](https://img.haomeiwen.com/i6842147/0cce1f9798450c1c.png)
List<SubjectModel> findUserBySubjectId(int id);
SubjectModelOne findUserBySubjectId2(int id);
5.在service的UserService中编写 如图【07】
![](https://img.haomeiwen.com/i6842147/09983ab38fa714a6.png)
public List<SubjectModel> findUserBySubjectId(int id) {
return userDao.findUserBySubjectId(id);
}
public SubjectModelOne findUserBySubjectId2(int id) {
return userDao.findUserBySubjectId2(id);
}
6.在controller的UserController中编写 如图【08】
![](https://img.haomeiwen.com/i6842147/b2ccaf548ccd8e85.png)
@RequestMapping(value = "findUserBySubjectId")
public List<SubjectModel> findUserBySubjectId(int id) {
return userService.findUserBySubjectId(id);
}
@RequestMapping(value = "findUserBySubjectId2")
public SubjectModelOne findUserBySubjectId2(int id) {
return userService.findUserBySubjectId2(id);
}
7.运行测试
http://localhost:8080/user/findUserBySubjectId?id=1
http://localhost:8080/user/findUserBySubjectId2?id=1
二.查询三表
背景介绍:通过对科目名称的查询,查询出所对应科目的成员
1.在test数据库中新建表subject
![](https://img.haomeiwen.com/i6842147/c21d2a5dbdbeca17.png)
2.在model中建立SubjectUserModel
![](https://img.haomeiwen.com/i6842147/7861683c6953bf6c.png)
private String su_name;
private List<SubjectModel> subjectModels;
public String getName() {
return su_name;
}
public void setName(String su_name) {
this.su_name = su_name;
}
public List<SubjectModel> getSubjectModels() {
return subjectModels;
}
public void setSubjectModels(List<SubjectModel> subjectModels) {
this.subjectModels = subjectModels;
}
3.在mapper的UserDao中编写sql 语句
![](https://img.haomeiwen.com/i6842147/08478bcd61e0ab84.png)
<resultMap id="SubjectUserNameMap" type="SubjectUserModel">
<result column="name" property="su_name"/>
<collection property="subjectModels" ofType="SubjectModel">
<association property="userModel" javaType="UserModel">
<result column="id" property="id"/>
<result property="name" column="uname"/>
<result column="age" property="age"/>
</association>
</collection>
</resultMap>
<select id="findUserBySubjectName" resultMap="SubjectUserNameMap">
SELECT s.name,u.id,u.name uname,u.age FROM subject s , sub_user su, user u WHERE su.subject_id=s.id AND u.id=su.user_id AND s.name=#{name}
</select>
注:因为subject中的name和User中的name重复需要设置别名。
4.在dao的UserDao中编写
![](https://img.haomeiwen.com/i6842147/95be30a9a80d0d84.png)
SubjectUserModel findUserBySubjectName(String name);
5.在service的UserService中编写
![](https://img.haomeiwen.com/i6842147/ce6ce3f5ef038813.png)
public SubjectUserModel findUserBySubjectName(String name) {
return userDao.findUserBySubjectName(name);
}
6.在controller的UserController中编写
![](https://img.haomeiwen.com/i6842147/26d4326cf673abd0.png)
@RequestMapping(value = "findUserBySubjectName")
public SubjectUserModel findUserBySubjectName(String name) {
return userService.findUserBySubjectName(name);
}