1.1分页可以将很多条结果进行分页显示
在企业级开发中,分页也是一种常见的技术。而目前使用的 MyBatis 是不带分页功能的,如果想实现分页的 功能,需要我们手动编写 LIMIT 语句。但是不同的数据库实现分页的 SQL 语句也是不同的,所以手写分页 成本较高。这个时候就可以借助分页插件来帮助我们实现分页功能。
PageHelper:第三方分页助手。将复杂的分页操作进行封装,从而让分页功能变得非常简单。
1.2分页的步骤(1)导入与PageHelper的jar包(这次咱们选择在pom下)
com.github.pagehelper pagehelper3.7.5 com.github.jsqlparser jsqlparser0.9.1
(2)在mybatis核心配置文件中配置PageHelper插件
(3)在测试类内设置分页参数
1.3 分页插件的参数获取
2 MyBatis多表操作 2.1 多表模型介绍
我们之前学习的都是基于单表操作的,而实际开发中,随着业务难度的加深,肯定需要多表操作的。
表模型分类:
一对一:在任意一方建立外键,关联对方的主键。
一对多:在多的一方建立外键,关联一的一方的主键。
多对多:借助中间表,中间表至少两个字段,分别关联两张表的主键。
2.2 多表操作--一对一一对一模型: 人和身份证,一个人只有一个身份证
映射配置文件总结:配置字段和对象属性的映射关系标签。 id 属性:唯一标识 type 属性:实体对象类型 :配置主键映射关系标签。 :配置非主键映射关系标签。 column 属性:表中字段名称 property 属性: 实体对象变量名称 :配置被包含对象的映射关系标签。 property 属性:被包含对象的变量名 javaType 属性:被包含对象的数据类型
练习:
步骤一: sql语句准备
CREATE DATABASE db27;
use db27;
CREATE TABLE person(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAr(20),
age INT
);
INSERT INTO person VALUES (NULL,'张三',23);
INSERT INTO person VALUES (NULL,'李四',24);
INSERT INTO person VALUES (NULL,'王五',25);
CREATE TABLE card(
id INT PRIMARY KEY AUTO_INCREMENT,
number VARCHAr(30),
pid INT,
CONSTRAINT cp_fk FOREIGN KEY (pid) REFERENCES person(id)
);
INSERT INTO card VALUES (NULL,'12345',1);
INSERT INTO card VALUES (NULL,'23456',2);
INSERT INTO card VALUES (NULL,'34567',3);
步骤二:创建javabean
public class Card {
private Integer id; //主键id
private String number; //所属人的身份证号
private Person p; //所属人的对象
public Card(Integer id, String number, Person p) {
this.id = id;
this.number = number;
this.p = p;
}
public Card() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public Person getP() {
return p;
}
public void setP(Person p) {
this.p = p;
}
@Override
public String toString() {
return "Card{" +
"id=" + id +
", number='" + number + ''' +
", p=" + p +
'}';
}
}
person类
public class Person {
private Integer id; //人的主键
private String name; //人的姓名
private Integer age; //人的年龄
public Person(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Person() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + ''' +
", age=" + age +
'}';
}
}
SELECT c.id cid,number,pid,Name,age FROM card c,person p WHERe c.pid=p.id
Test类
public class Test01 {
@Test
public void selectAll() throws Exception{
InputStream is = Resources.getResourceAsStream("MyBaitsConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
OneToOneMapper mapper = sqlSession.getMapper(OneToOneMapper.class);
List cards = mapper.selectAll();
for (Card card : cards) {
System.out.println(card);
}
is.close();
sqlSession.close();
}
}
2.3 多表操作--一对多
一对多模型: 一对多模型:班级和学生,一个班级可以有多个学生。
sql语句准备
CREATE TABLE classes(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAr(20)
);
INSERT INTO classes VALUES (NULL,'一班');
INSERT INTO classes VALUES (NULL,'二班');
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAr(30),
age INT,
cid INT,
CONSTRAINT cs_fk FOREIGN KEY (cid) REFERENCES classes(id)
);
INSERT INTO student VALUES (NULL,'张三',23,1);
INSERT INTO student VALUES (NULL,'李四',24,1);
INSERT INTO student VALUES (NULL,'王五',25,2);
INSERT INTO student VALUES (NULL,'赵六',26,2);
配置文件
Test类
public class Test02 {
@Test
public void selectAll() throws Exception{
InputStream is = Resources.getResourceAsStream("MyBaitsConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
OneToManyMapper mapper = sqlSession.getMapper(OneToManyMapper.class);
List classes = mapper.selectAll();
for (Classes s : classes) {
System.out.println(s.getId()+","+s.getName());
List students =s.getStudents();
for (Student student : students) {
System.out.println(student);
}
}
is.close();
sqlSession.close();
}
}
2.4 多表操作--多表查询
多对多模型:学生和课程,一个学生可以选择多门课程、一个课程也可以被多个学生所选择。
创 建 表
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAr(30),
age INT,
cid INT,
CONSTRAINT cs_fk FOREIGN KEY (cid) REFERENCES classes(id)
);
INSERT INTO student VALUES (NULL,'张三',23,1);
INSERT INTO student VALUES (NULL,'李四',24,1);
INSERT INTO student VALUES (NULL,'王五',25,2);
INSERT INTO student VALUES (NULL,'赵六',26,2);
CREATE TABLE course(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAr(20)
);
INSERT INTO course VALUES (NULL,'语文');
INSERT INTO course VALUES (NULL,'数学');
CREATE TABLE stu_cr(
id INT PRIMARY KEY AUTO_INCREMENT,
sid INT,
cid INT,
CONSTRAINT sc_fk1 FOREIGN KEY (sid) REFERENCES student(id),
CONSTRAINT sc_fk2 FOREIGN KEY (cid) REFERENCES course(id)
);
INSERT INTO stu_cr VALUES (NULL,1,1);
INSERT INTO stu_cr VALUES (NULL,1,2);
INSERT INTO stu_cr VALUES (NULL,2,1);
INSERT INTO stu_cr VALUES (NULL,2,2);
SELECT sid,s.Name sname,s.age sage,sc.cid,c.name cname from student s,course c,stu_cr sc where sc.sid=s.id AND sc.cid =c.id
映射配置文件SELECT sid,s.Name sname,s.age sage,sc.cid,c.name cname from student s,course c,stu_cr sc where sc.sid=s.id AND sc.cid =c.id
Test方法
public class Test03 {
@Test
public void selectAll() throws Exception{
InputStream is = Resources.getResourceAsStream("MyBaitsConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
ManyToManyMapper mapper = sqlSession.getMapper(ManyToManyMapper.class);
List students = mapper.selectAll();
for (Student student : students) {
System.out.println(student.getId()+","+student.getName()+","+student.getAge());
List courses = student.getCourses();
for (Course cours : courses) {
System.out.println(cours);
}
}
is.close();
sqlSession.close();
}
}
ManyToManyMapper接口
public interface ManyToManyMapper {
public abstract List selectAll();



