数据库小问题记录

  1. 外键的作用是什么,外键加在两个关联表的那一边。
    作用:保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值
    外键放在哪一个表中:分为下面几种情况:
  • 首先,外键引用的那个列在主表中必须是主键列或者唯一列。
  • 所以1:n的肯定把外键建立在n的那张表上。
  • 1:1,一般要看谁是主表,谁是附属表,外键当然建立在附属表中。
  • n:m的情况,需要建立一个关系表, 两个原表和其关系分别是1:n,1:m
    例子(多对多):
    角色表
    在这里插入图片描述
    用户表
    在这里插入图片描述
    联系表(外键设在这里)
    在这里插入图片描述

外键放在联系表中。

  1. mybatis的多对多嵌套查询
    作用:使用mybatis时,当我们遇到表与表之之间存在关联的时候,就可以使用嵌套查询
    还是使用上面的例子:
public class UserInfo {
    private String uid;

    private String username;

    private String name;

    private String password;

    private String salt;

    private Integer state;
	//新建一个roles,用来接受联系表的数据
    private List<SysUserRoleKey> roles;

    public List<SysUserRoleKey> getRoles() {
        return roles;
    }

    public void setRoles(List<SysUserRoleKey> roles) {
        this.roles = roles;
    }
 }
public class SysUserRoleKey {
    private String roleId;

    private String uid;
	//与role的类是一对一的关系
    private SysRole role;

    private UserInfo userInfos;
}

resultMap

<resultMap id="UserAndRole" type="com.example.demo.Model.UserInfo">
    <id column="uid" jdbcType="VARCHAR" property="uid" />
    <result column="username" jdbcType="VARCHAR" property="username" />
    <result column="name" jdbcType="VARCHAR" property="name" />
    <result column="password" jdbcType="VARCHAR" property="password" />
    <result column="salt" jdbcType="VARCHAR" property="salt" />
    <result column="state" jdbcType="INTEGER" property="state" />
    <collection property="roles" ofType="com.example.demo.Model.SysUserRoleKey">
      <id column="role_id" jdbcType="VARCHAR" property="roleId" />
      <id column="uid" jdbcType="VARCHAR" property="uid" />
      <association property="role" javaType="com.example.demo.Model.SysRole">
        <id column="role_id" jdbcType="VARCHAR" property="roleId" />
        <result column="available" jdbcType="INTEGER" property="available" />
        <result column="description" jdbcType="VARCHAR" property="description" />
        <result column="role" jdbcType="VARCHAR" property="role" />
      </association>
    </collection>
  </resultMap>

查询语句

</select>
  <select id="selectUserRole" resultMap="UserAndRole" parameterType="java.lang.String">
    select sr.role_id ,sr.available,sr.description,sr.role,各种你需要的属性
    FROM user_info  u
    left join  sys_user_role  sur ON u.uid=sur.uid
    left join sys_role  sr ON sur.role_id=sr.role_id
  </select>
发布了36 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/s_xchenzejian/article/details/97039257