栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatic框架(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatic框架(二)

1 分页查询

1.1分页可以将很多条结果进行分页显示

在企业级开发中,分页也是一种常见的技术。而目前使用的 MyBatis 是不带分页功能的,如果想实现分页的 功能,需要我们手动编写 LIMIT 语句。但是不同的数据库实现分页的 SQL 语句也是不同的,所以手写分页 成本较高。这个时候就可以借助分页插件来帮助我们实现分页功能。

PageHelper:第三方分页助手。将复杂的分页操作进行封装,从而让分页功能变得非常简单。

1.2分页的步骤

(1)导入与PageHelper的jar包(这次咱们选择在pom下)


  com.github.pagehelper
  pagehelper
  3.7.5


  com.github.jsqlparser
  jsqlparser
  0.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 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();

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/978509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号