1、实体关系
实体——数据实体,实体关系指的就是数据与数据之间的关系
例如:用户和角色、房屋和楼栋、订单和商品
实体关系分为以下四种:
一对一关联
实例:人和身份证、学生和学生证、用户基本信息和详情
数据表关系:
-
主键关联(用户表主键 和详情主键相同时,表示是匹配的数据)
- 唯一外键关联
一对多关联、多对一关联
实例:
-
一对多: 班级和学生 、 类别和商品、楼栋和房屋
-
多对一:学生和班级 、 商品和类别
数据表关系:
-
在多的一端添加外键和一的一段进行关联
多对多关联
实例:用户和角色、角色和权限、房屋和业主、学生和社团、订单和商品
数据表关系:建立第三张关系表添加两个外键分别与两张表主键进行关联
用户(user_id) 用户角色表(uid,rid) 角色(role_id)
2、 创建项目,部署MyBatis框架
-
创建web项目(maven)
-
<!-- 添加web依赖 -->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>jsp-api</artifactId>
-
<version>2.0</version>
-
<scope>provided</scope>
-
</dependency>
-
<dependency>
-
<groupId></groupId>
-
<artifactId>-api</artifactId>
-
<version>4.0.1</version>
-
<scope>provided</scope>
-
</dependency>
-
-
部署MyBatis框架
-
添加依赖
-
<!-- https:///artifact//mybatis -->
-
<dependency>
-
<groupId></groupId>
-
<artifactId>mybatis</artifactId>
-
<version>3.4.6</version>
-
</dependency>
-
<!-- https:///artifact/mysql/mysql-connector-java -->
-
<dependency>
-
<groupId>mysql</groupId>
-
<artifactId>mysql-connector-java</artifactId>
-
<version>5.1.47</version>
-
</dependency>
-
配置文件
-
帮助类
-
public class MyBatisUtil {
-
-
private static SqlSessionFactory factory;
-
private static final ThreadLocal<SqlSession> local = new ThreadLocal<SqlSession>();
-
-
static{
-
try {
-
InputStream is = Resources.getResourceAsStream("");
-
factory = new SqlSessionFactoryBuilder().build(is);
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
-
public static SqlSessionFactory getSqlSessionFactory(){
-
return factory;
-
}
-
-
public static SqlSession getSqlSession(boolean isAutoCommit){
-
SqlSession sqlSession = local.get();
-
if(sqlSession == null){
-
sqlSession = factory.openSession(isAutoCommit);
-
local.set(sqlSession);
-
}
-
return sqlSession;
-
}
-
-
public static SqlSession getSqlSession(){
-
return getSqlSession(false);
-
}
-
-
public static <T extends Object>T getMapper(Class<T> c){
-
SqlSession sqlSession = getSqlSession(true);
-
return sqlSession.getMapper(c);
-
}
-
-
}
-
3、 一对一关联
实例:用户---详情
3.1、 创建数据表
-
-- 用户信息表
-
create table users(
-
user_id int primary key auto_increment,
-
user_name varchar(20) not null unique,
-
user_pwd varchar(20) not null,
-
user_realname varchar(20) not null,
-
user_img varchar(100) not null
-
);
-
-
-- 用户详情表
-
create table details(
-
detail_id int primary key auto_increment,
-
user_addr varchar(50) not null,
-
user_tel char(11) not null,
-
user_desc varchar(200),
-
uid int not null unique
-
-- constraint FK_USER foreign key(uid) references users(user_id)
-
);
3.2、 创建实体类
-
User
-
@Data
-
@NoArgsConstructor
-
@AllArgsConstructor
-
@ToString
-
public class User {
-
private int userId;
-
private String userName;
-
private String userPwd;
-
private String userRealname;
-
private String userImg;
-
}
-
-
Detail
-
@Data
-
@NoArgsConstructor
-
@AllArgsConstructor
-
@ToString
-
public class Detail {
-
private int detailId;
-
private String userAddr;
-
private String userTel;
-
private String userDesc;
-
private int userId;
-
}
-
3.3、 添加操作(事务)
测试代码 |
---|
3.4、 一对一关联查询
在查询用户的同时关联查询出与之对应的详情
实体
User | Detail |
---|---|
映射文件
连接查询 |
---|
子查询 |
---|
4、 一对多关联
案例:班级(1)—学生(n)
4.1、 创建数据表
-
-- 创建班级信息表
-
create table classes(
-
cid int primary key auto_increment,
-
cname varchar(30) not null unique,
-
cdesc varchar(100)
-
);
-
-
-- 创建学生信息表
-
create table students(
-
sid char(5) primary key,
-
sname varchar(20) not null,
-
sage int not null,
-
scid int not null
-
);
4.2、 创建实体类
Clazz | Student |
---|---|
4.3、关联查询
当查询一个班级的时候, 要关联查询出这个班级下的所有学生
连接查询
连接查询映射配置 |
---|
子查询
子查询映射配置 |
---|
5、多对一关联
实例:学生(n)—班级(1)
当查询一个学生的时候,关联查询这个学生所在的班级信息
5.1、 创建实体类
Student | Clazz |
---|---|
5.2、关联查询
连接查询
连接查询映射配置 |
---|
子查询
子查询映射配置 |
---|
6、多对多关联
案例:学生(m)—课程(n)
6.1、创建数据表
-
-- 学生信息表(如上)
-
-- 课程信息表
-
create table courses(
-
course_id int primary key auto_increment,
-
course_name varchar(50) not null
-
);
-
-- 选课信息表/成绩表(学号、课程号、成绩)
-
create table grades(
-
sid char(5) not null,
-
cid int not null,
-
score int not null
-
);
6.2、关联查询
查询学生时,同时查询学生选择的课程
Student | Course |
---|---|
根据课程编号查询课程时,同时查询选择了这门课程的学生
Student | Course |
---|---|
连接查询映射配置 |
---|
子查询映射配置 |
---|