背景
在学校大三下学期的软件建模课程的期末考核大作业中,我选择了基于SpringBoot的宿舍管理系统。因为这门课重点在于UML,所以代码实现只要有基本的CRUD即可,我在数据库设计中,选择了三张表,分别是学生表、宿舍楼表和宿舍管理员表。宿舍楼和学生的关系是一对多的关系,在查询时可以选择隐式内连接方式。
实现
我个人的习惯是先写sql然后实现代码。在这个项目中我采用的是使用xml文件来实现。
先上sql:
SELECT s.sid,s.`name`,s.gender,s.did,d.dname
FROM student s,dormitory d
WHERE s.did = d.did
再上实体类代码,这里有个注意点,当你想进行一对一查询时,需要在多(数据表关系中为多的一方)的那个实体类中加入类型为一(数据表关系中为1的一方)的成员变量,并且设置get/set方法,代码如下:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student implements Serializable {
private Integer sid;
private String name;
private String gender;
private Integer did;
//因为使用了lombok所以不用自己写get/set方法
private Dormitory dormitory;
}
接着开始写controller层、service层、mapper层和xml的代码(因为比较简单这里就只给xml的代码了):
<resultMap id="stuBedsMap" type="com.laoye.pojo.Student">
<id property="sid" column="sid"></id>
<result property="name" column="name"></result>
<result property="gender" column="gender"></result>
<result property="did" column="did"></result>
<!-- 在进行多表查询时需要使用associatio,
property属性表示我们加入关系为一的那个成员变量的名称;
column属性表示通过哪个属性连接这两张表;
javaType属性表示要封装的关系为一的那个类
-->
<association property="dormitory" column="did" javaType="com.laoye.pojo.Dormitory">
<result property="dName" column="dname"></result>
</association>
</resultMap>
<select id="findAllStu" resultMap="stuBedsMap">
SELECT s.sid,s.`name`,s.gender,s.did,d.dname
FROM student s,dormitory d
WHERE s.did = d.did
</select>
配置完就能够进行一对一查询了,展示一下我的结果:
如果哪些地方叙述的不正确还请各位批评指正.