最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis實(shí)現(xiàn)一對(duì)一、一對(duì)多關(guān)聯(lián)查詢的方法(示例詳解)

 更新時(shí)間:2023年04月01日 10:51:02   作者:請(qǐng)你喝杯Java  
這篇文章主要介紹了Mybatis實(shí)現(xiàn)一對(duì)一、一對(duì)多關(guān)聯(lián)查詢的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Mybatis實(shí)現(xiàn)一對(duì)一、一對(duì)多關(guān)聯(lián)查詢,關(guān)聯(lián)查詢:多個(gè)表聯(lián)合查詢,只查詢一次,通過resultMap里面的<association><collection>標(biāo)簽配置一對(duì)一、一對(duì)多。

涉及的sql文件、idea工程文件:Mybatis實(shí)現(xiàn)一對(duì)一、一對(duì)多關(guān)聯(lián)查詢資源

本篇文章涉及的一對(duì)一、一對(duì)多關(guān)系

  • 班級(jí)classes、班主任teacher是一對(duì)一的關(guān)系
  • 班級(jí)classes、學(xué)生student是一對(duì)多的關(guān)系

image-20230326141952875

使用IDEA快速構(gòu)建一個(gè)MyBatis工程

image-20230331151146829

pom.xml

<?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>

    <groupId>com</groupId>
    <artifactId>sun</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>mybatisTest</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
        <junit.version>5.8.2</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.3</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <resources>
            <resource>
                <!-- directory:指定資源文件的位置 -->
                <directory>src/main/java</directory>
                <includes>
                    <!-- “**” 表示任意級(jí)目錄    “*”表示任意任意文件 -->
                    <!-- mvn resources:resources?。簩?duì)資源做出處理,先于compile階段  -->
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <!--  filtering:開啟過濾,用指定的參數(shù)替換directory下的文件中的參數(shù)(eg. ${name}) -->
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
            </resource>
        </resources>
    </build>
</project>

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- 通過這個(gè)配置文件完成mybatis與數(shù)據(jù)庫的連接 -->
<configuration>
    <!-- 引入 database.properties 文件-->
    <properties resource="database.properties"/>

    <!-- 配置mybatis的log實(shí)現(xiàn)為L(zhǎng)OG4J -->
    <settings>
        <setting name="logImpl" value="LOG4J" />
    </settings>

    <environments default="development">
        <environment id="development">
            <!--配置事務(wù)管理,采用JDBC的事務(wù)管理  -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- POOLED:mybatis自帶的數(shù)據(jù)源,JNDI:基于tomcat的數(shù)據(jù)源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 將mapper文件加入到配置文件中 -->
    <mappers>
        <mapper resource="com/sun/mapper/ClassesMapper.xml"/>
    </mappers>
</configuration>

database.properties

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
user=root
password=root

MybatisUtil.java

package com.sun.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

/**
 * @author JumperSun
 * @date 2023-03-26-14:46
 */
public class MyBatisUtil {
    private static SqlSessionFactory factory;

    static {
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(is);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static SqlSession createSqlSession(){
        return factory.openSession(false); // true為自動(dòng)提交事務(wù)
    }

    public static void closeSqlSession(SqlSession sqlSession){
        if(null != sqlSession)
            sqlSession.close();
    }
}

Teacher.java

package com.sun.pojo;

import lombok.Data;

/**
 * @author JumperSun
 * @date 2023-03-26-14:51
 */
@Data
public class Teacher {
    private int id;
    private String name;
}

Student.java

package com.sun.pojo;

import lombok.Data;

/**
 * @author JumperSun
 * @date 2023-03-26-14:53
 */
@Data
public class Student {
    private int id;
    private String name;
}

Classes.java

package com.sun.pojo;

import lombok.Data;

import java.util.List;

/**
 * @author JumperSun
 * @date 2023-03-26-14:52
 */
@Data
public class Classes {
    private int id;
    private String name;
    private Teacher teacher;
    private List<Student> studentList;
}

classMapper.java

package com.sun.mapper;

import com.sun.pojo.Classes;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author JumperSun
 * @date 2023-03-26-14:54
 */
public interface ClassesMapper {
    List<Classes> getClassesTeacher(@Param("id") int id);

    List<Classes> getClassesTeacherStudentList(@Param("id") int id);
}

classMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sun.mapper.ClassesMapper">

    <!-- 一對(duì)一關(guān)聯(lián)查詢 -->
    <select id="getClassesTeacher" parameterType="int" resultMap="ClassesResultMap">
        select * from classes c,teacher t where c.teacher_id=t.t_id and c.c_id=#{id}
    </select>

    <resultMap type="com.sun.pojo.Classes" id="ClassesResultMap">
        <!-- 實(shí)體類的字段名和數(shù)據(jù)表的字段名映射 -->
        <id property="id" column="c_id"/>
        <result property="name" column="c_name"/>
        <association property="teacher" javaType="com.sun.pojo.Teacher">
            <id property="id" column="t_id"/>
            <result property="name" column="t_name"/>
        </association>
    </resultMap>

    <!-- 一對(duì)多關(guān)聯(lián)查詢 -->
    <select id="getClassesTeacherStudentList" parameterType="int" resultMap="ClassesResultMap2">
        select * from classes c,teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=#{id}
    </select>

    <resultMap type="com.sun.pojo.Classes" id="ClassesResultMap2">
        <id property="id" column="c_id"/>
        <result property="name" column="c_name"/>
        <association property="teacher" javaType="com.sun.pojo.Teacher">
            <id property="id" column="t_id"/>
            <result property="name" column="t_name"/>
        </association>
        <collection property="studentList" ofType="com.sun.pojo.Student">
            <id property="id" column="s_id"/>
            <result property="name" column="s_name"/>
        </collection>
    </resultMap>

</mapper>

MapperTest.java

import com.sun.mapper.ClassesMapper;
import com.sun.pojo.Classes;
import com.sun.utils.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * @author JumperSun
 * @date 2023-03-26-15:10
 */
public class MapperTest {
    /**
     * 測(cè)試班級(jí)與班主任老師一對(duì)一的關(guān)聯(lián)關(guān)系
     */
    @Test
    public void test1() {
        SqlSession sqlSession = MyBatisUtil.createSqlSession();
        ClassesMapper classesMapper = sqlSession.getMapper(ClassesMapper.class);
        List<Classes> classes = classesMapper.getClassesTeacher(1);
        for (Classes Classes : classes) {
            System.out.println(classes);
        }

    }

    /**
     * 測(cè)試班級(jí)與學(xué)生一對(duì)多關(guān)聯(lián)關(guān)系
     */
    @Test
    public void test2() {
        SqlSession sqlSession = MyBatisUtil.createSqlSession();
        ClassesMapper classesMapper = sqlSession.getMapper(ClassesMapper.class);
        List<Classes> classes = classesMapper.getClassesTeacherStudentList(1);
        for (Classes Classes : classes) {
            System.out.println(classes);
        }

    }
}

test1:

image-20230331151047498

test2:

image-20230331151113226

總結(jié):一對(duì)一關(guān)聯(lián)查詢需要在resultMap里面配置association,一對(duì)多關(guān)聯(lián)查詢需要在resultMap里面配置collection;

List classes = classesMapper.getClassesTeacherStudentList(1);
for (Classes Classes : classes) {
System.out.println(classes);
}}

}
test1:
[外鏈圖片轉(zhuǎn)存中...(img-qon5qYiR-1680248446105)]
test2:
[外鏈圖片轉(zhuǎn)存中...(img-DZayGx8q-1680248446107)]
總結(jié):一對(duì)一關(guān)聯(lián)查詢需要在resultMap里面配置association,一對(duì)多關(guān)聯(lián)查詢需要在resultMap里面配置collection;

到此這篇關(guān)于Mybatis實(shí)現(xiàn)一對(duì)一、一對(duì)多關(guān)聯(lián)查詢的方法(示例詳解)的文章就介紹到這了,更多相關(guān)Mybatis關(guān)聯(lián)查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringCloud注冊(cè)中心部署Eureka流程詳解

    SpringCloud注冊(cè)中心部署Eureka流程詳解

    Eureka是Netflix開發(fā)的服務(wù)發(fā)現(xiàn)框架,本身是一個(gè)基于REST的服務(wù),主要用于定位運(yùn)行在AWS域中的中間層服務(wù),以達(dá)到負(fù)載均衡和中間層服務(wù)故障轉(zhuǎn)移的目的
    2022-11-11
  • Java8新特性Stream短路終端操作實(shí)例解析

    Java8新特性Stream短路終端操作實(shí)例解析

    這篇文章主要介紹了Java8新特性Stream短路終端操作實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java中的流式編程問題

    Java中的流式編程問題

    這篇文章主要介紹了Java中的流式編程問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 自己寫的簡(jiǎn)易版Java日志類分享

    自己寫的簡(jiǎn)易版Java日志類分享

    這篇文章主要介紹了自己寫的簡(jiǎn)易版Java日志類分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06
  • Spring Boot中自動(dòng)化配置的利弊以及解決方法

    Spring Boot中自動(dòng)化配置的利弊以及解決方法

    這篇文章主要給大家介紹了關(guān)于Spring Boot中自動(dòng)化配置的利弊以及解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-08-08
  • Java synchronized關(guān)鍵字使用方式及特性解析

    Java synchronized關(guān)鍵字使用方式及特性解析

    這篇文章主要介紹了Java synchronized關(guān)鍵字使用方式及特性解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • idea中Stash與Unstash的使用及說明

    idea中Stash與Unstash的使用及說明

    這篇文章主要介紹了idea中Stash與Unstash的使用及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java全面分析面向?qū)ο笾鄳B(tài)

    Java全面分析面向?qū)ο笾鄳B(tài)

    多態(tài)就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發(fā)出的方法調(diào)用在編程時(shí)并不確定,而是在程序運(yùn)行期間才確定,即一個(gè)引用變量到底會(huì)指向哪個(gè)類的實(shí)例對(duì)象,該引用變量發(fā)出的方法調(diào)用到底是哪個(gè)類中實(shí)現(xiàn)的方法,必須在由程序運(yùn)行期間才能決定
    2022-04-04
  • 解讀Spring配置文件中的property標(biāo)簽中的屬性

    解讀Spring配置文件中的property標(biāo)簽中的屬性

    這篇文章主要介紹了Spring配置文件中的property標(biāo)簽中的屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Spring Boot打包war jar 部署tomcat

    Spring Boot打包war jar 部署tomcat

    這篇文章主要介紹了Spring Boot打包war jar 部署tomcat的相關(guān)資料,需要的朋友可以參考下
    2017-10-10

最新評(píng)論

萝北县| 秦皇岛市| 吉林市| 隆安县| 安丘市| 武定县| 运城市| 攀枝花市| 灵川县| 荥经县| 靖远县| 恩施市| 云梦县| 门源| 清远市| 岫岩| 聂拉木县| 依兰县| 北宁市| 天水市| 辽源市| 遵义市| 五华县| 阜平县| 交口县| 光山县| 阿克| 贺兰县| 大化| 涪陵区| 正蓝旗| 石狮市| 祁连县| 崇文区| 新野县| 哈巴河县| 尚志市| 巴中市| 隆化县| 汉川市| 万安县|