Springboot+mybatis多对一,一对多

Springboot+mybatis多对一,一对多,第1张

文章目录
  • 数据库创建
    • 代码
  • Springboot环境搭建
    • Maven环境搭建
    • application.yml环境搭建
    • entity搭建
      • Student 实体类
      • Teacher实体类创建
    • Dao 接口搭建
    • 关键部分多对一mybatis.xml编写
      • 多对一association的理解
      • 结果
    • 关键部分一对多mybatis.xml编写
      • 多对一collection理解
      • 结果

数据库创建 代码
CREATE TABLE `teacher` (
  `id` INT(10) NOT NULL,
  `name` VARCHAR(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师'); 

CREATE TABLE `student` (
  `id` INT(10) NOT NULL,
  `name` VARCHAR(30) DEFAULT NULL,
  `tid` INT(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fktid` (`tid`),
  CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1'); 
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1'); 
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1'); 
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1'); 
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');
Springboot环境搭建 Maven环境搭建
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
application.yml环境搭建
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/blogcrunchy?useUnicode=true&characterEncoding=utf8
    username: root
    password: 123456

mybatis:
  mapper-locations: classpath:mapper/*.xml       # mapper映射文件位置
  type-aliases-package: com.example.demo.entity  # entity包路径
  configuration:
    map-underscore-to-camel-case: true           # mybatis来开启驼峰功能
entity搭建 Student 实体类
package com.example.demo.entity;

import lombok.Data;

@Data
public class Student {
    private Integer id;
    private String name;
    private Integer tid;
    private Teacher teacher;   //注意此处 在mybatis.xml文件里面会有区别  此处为实体类
}
Teacher实体类创建
package com.example.demo.entity;

import lombok.Data;

import java.util.List;

@Data
public class Teacher {
    private Integer id;
    private String name;
    private List<Student> students;   //注意此处 在mybatis.xml文件里面会有区别  此处为集合实体类
}
Dao 接口搭建
package com.example.demo.dao;

import com.example.demo.entity.Student;
import com.example.demo.entity.Teacher;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
public interface TestDao {
//多对一
    List<Student> manyToOne();

//    一对多
    Teacher oneToMany(@Param("id") Integer id);
}
关键部分多对一mybatis.xml编写

DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.dao.TestDao">


    <resultMap id="UsernameAndPassword" type="com.example.demo.entity.Student">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <association property="teacher" javaType="com.example.demo.entity.Teacher">
            <result property="id" column="tid"/>
            <result property="name" column="tname"/>
        association>
    resultMap>
    
    <select id="manyToOne" resultMap="UsernameAndPassword">
        SELECT s.*,t.`id` tid,t.`name` tname FROM student s, teacher t WHERE s.`id` = t.`id`;
    select>
mapper>

多对一association的理解


还记得此处定义的数据类型吗?这里的数据类型是Teacher实体类,所以在.xml编写的是需要注意,而.xml执行的时候需要找到实体类才可以继续下面的 *** 作,javaType的作用就是找到实体类的包,property此处配置的为Student实体类中定义的名称。

结果

关键部分一对多mybatis.xml编写

DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.demo.dao.TestDao">


    <select id="oneToMany" resultMap="OneToMany">
        SELECT s.*,t.`name` tname, t.`id` ttid
        FROM student s, teacher t
        WHERE s.`tid` = t.`id` AND t.`id`=#{id};
    select>

    <resultMap id="OneToMany" type="com.example.demo.entity.Teacher">
        <result property="id" column="ttid"/>
        <result property="name" column="tname"/>
        <collection property="students" ofType="com.example.demo.entity.Student">
            <result property="id" column="id"/>
            <result property="name" column="name"/>
            <result property="tid" column="tid"/>
        collection>
    resultMap>
mapper>
多对一collection理解


此处使用的是List集合,所以使用collection,与association的区别为此处寻找实体类包的方法为ofType

结果


学习链接:https://www.bilibili.com/video/BV1NE411Q7Nx?p=21&spm_id_from=pageDriver

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/736240.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-28
下一篇2022-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存