create table tb_student(
sid int primary key auto_increment,
stu_num varchar(20) not null unique,
stu_name varchar(20) not null,
stu_age int not null
);
创建实体类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {
private int stu_id;
private String stu_num;
private String stu_name;
private int stu_age;
}
创建DAO接口,并定义操作方法
package com.lxr.dao;
import com.lxr.bean.Student;
public interface StudentDAO {
public int insertStudent(Student stduent);
}
public void testListStudentByPage(){
StudentDAO studentDAO = MyBatisUtils.getMapper(StudentDAO.class);
PageHelper.startPage(1,2);
//执行查询之前进行分页操作
List students = studentDAO.listStudent();
//PageInfo中包含了数据和分页信息
PageInfo pageInfo = new PageInfo<>(students);
List list = pageInfo.getList();
for(Student stu:list){
System.out.println(stu);
}
}
4.带条件分页
先进行条件查询在PageInfo
关联映射
1.实体关系
主要指数据实体,数据与数据之间的关系 用户和角色 房屋和楼栋 订单和商品
实体关系分为以下四种:
1.一对一关联
实例:学生,学生证
数据表关系:
1.主键关联
2.唯一外键关联
2.一对多关联
实例:班级和学生 类别和商品
数据表关系:在多的一段添加外键和一的一端添加关联
3.多对一关联
实例:学生和班级
数据表关系:在多的一段添加外键和一的一端添加关联
4.多对多关联
实例:订单和商品
数据表关系:建立第三张关系表添加两个外键分别与两张表主键相关联
1.一对一关联
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
#物理关联
#uid int not null unique,
#constraint FK_USER foreign key (uid) references users(user_id)
)
2.创建实体类
User
public class User {
private int userId;
private String userName;
private String userPwd;
private String userRealname;
private String userImg;
}
Detal
public class Detail {
private int detailId;
private String userAddr;
private String userTel;
private String userDesc;
private int userId;
}
3.创建DAO接口定义操作方法
4.添加操作(事务管理)
5.单元测试
junitjunit4.12test
事务管理,添加用户,回填,添加详情
public void testInsertUser() {
//用户注册提交了基本信息到Servlet,Servlet接收组测信息封装到User和Detail对象里
User user = new User(0,"nisi","123123","李四","02.jpj");
Detail detail = new Detail(0,"深圳市","13030303300","这个人很懒,没有签名",0);
SqlSession sqlSession = MyBatisUtil.getSession(false);;
try {
UserDAO userDAO = sqlSession.getMapper(UserDAO.class);
int i = userDAO.insertUser(user);
detail.setUserId(user.getUserId());
DetailDAO detailDAO = sqlSession.getMapper(DetailDAO.class);
int j = detailDAO.insertDetail(detail);
System.out.println(i + " " + j);
sqlSession.commit();
}catch (Exception e){
e.printStackTrace();
sqlSession.rollback();
}
}
6.关联查询
实体 User中加入关联的Detail属性
public class User {
private int userId;
private String userName;
private String userPwd;
private String userRealname;
private String userImg;
private Detail detail;
}
映射 方案一:连接查询
select user_id ,user_name ,user_pwd , user_realname , user_img,detail_id,user_addr,user_tel,user_desc
from users u
INNER JOIN details d
on u.user_id = d.uid
where u.user_name = #{username}
方案二:子查询 1.DetailDAO
public Detail queryDetailByUid(int uid);
2.DetailMapper
select detail_id,user_addr,user_tel,user_desc
from details
where uid = #{uid}
3.UserMapper
select user_id ,user_name ,user_pwd , user_realname , user_img
from users u
INNER JOIN details d
on u.user_id = d.uid
where u.user_name = #{username}
2.一对多关联查询
2.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 ,
cid int not null
)
2.2 创建实体类
班级
public class Clazz {
private int classId;
private String className;
private String classDesc;
private List stus;
}
*学生
public class Student {
private String stuId;
private String stuName;
private int stuAge;
private int stuCid;
}
2.3 关联查询
当查询一个班级的时候 关联查询出学生 一对多 看一 2.3.1 连接查询
select c.cid , cname , cdesc , sid , sname , sage
from classes c INNER JOIN students s
on c.cid = s.cid
where c.cid = #{classId}
2.3.2 子查询 StudentMapper
select sid,sname,sage
from students
where cid = #{cid}
ClazzMapper
select cid , cname , cdesc
from classes
where cid = #{classId}
3.多对一关联
4.多对多关联
4.1 创建数据表
create table courses(
courseId int primary key auto_increment,
courseName varchar(50) not null
);
create table grades(
sid char(5) not null ,
courseId int not null ,
score int not null
)
4.2 查询课程时,同时查询选择此课程的学生
连接查询
select c.courseId,c.courseName,s.sid,s.sname,s.sage
from courses c INNER JOIN grades g INNER JOIN students s
on c.courseId = g.courseId and g.sid = s.sid
where c.courseId = #{corseId};