欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis中多個(gè)對(duì)象包含同一個(gè)對(duì)象的處理操作

 更新時(shí)間:2021年06月21日 09:35:59   作者:_板藍(lán)根_  
這篇文章主要介紹了Mybatis中多個(gè)對(duì)象包含同一個(gè)對(duì)象的處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

多個(gè)對(duì)象對(duì)應(yīng)一個(gè)對(duì)象時(shí),應(yīng)該如何進(jìn)行查詢?

例如

關(guān)鍵字:association : 聯(lián)系 ,關(guān)聯(lián) 多個(gè)人可以關(guān)聯(lián)一個(gè)人。

首先做一些準(zhǔn)備,如:實(shí)體類,工具類和Mybatis核心文件

實(shí)體類:

//老師實(shí)體類
package com.MLXH.pojo;
public class Teacher {
    private int id;
    private String name;
    public Teacher() {
    }
    public Teacher(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "Teacher{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
//學(xué)生實(shí)體類
package com.MLXH.pojo;
public class Student  {
    private int id;
    private String name;
    private Teacher teacher;
    public Student() {
    }
    public Student(int id, String name, Teacher teacher) {
        this.id = id;
        this.name = name;
        this.teacher = teacher;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Teacher getTeacher() {
        return teacher;
    }
    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", teacher=" + teacher +
                '}';
    }
}

database.properties配置文件數(shù)據(jù)庫(kù)需要的數(shù)據(jù)

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8
username = root
password = 123456

Mybatis工具類: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">
<configuration>
    <!--配置文件修改-->
    <properties resource="database.properties"/>
    <!--Mybatis設(shè)置-->
    <settings>
        <!--默認(rèn)日志實(shí)現(xiàn)-->
        <!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->
        <!--Log4j實(shí)現(xiàn)-->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!--配置別名-->
    <typeAliases>
        <package name="com.MLXH.pojo"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--class對(duì)應(yīng)的是一個(gè)接口類-->
        <!--resource對(duì)應(yīng)的是一個(gè)接口類的映射文件-->
        <mapper resource="com/MLXH/dao/StudentMapper.xml"/>
    </mappers>
</configuration>

工具類:主要是為了使獲得sqlsession更為簡(jiǎn)單方便

package com.MLXH.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.IOException;
import java.io.InputStream;
//mybatis的工具類,重復(fù)的代碼的提純
public class MyBatisUtils {
    //類變量不需要設(shè)置默認(rèn)值;
    private static SqlSessionFactory sqlSessionFactory;
    static {
        //在maven中,所有的資源文件一般都放在resources目錄下,我們可以直接拿到。
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //設(shè)置SqlSessionFactory公共的方法
    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
    //獲得一個(gè)帶事務(wù)自動(dòng)提交功能的SqlSession公共的方法
    public static SqlSession getSqlSession(){
        //自動(dòng)提交事務(wù)
        return sqlSessionFactory.openSession(true);
    }
}

StudentDao接口

package com.MLXH.dao;
import com.MLXH.pojo.Student;
import java.util.List;
public interface StudentDao {
    //獲得全部學(xué)生的信息以及對(duì)應(yīng)的老師
    List<Student> getStudents();
    //獲得全部學(xué)生的信息以及對(duì)應(yīng)的老師
    List<Student> getStudentsTwo();
}

針對(duì)于StudentDao接口的實(shí)現(xiàn)mapper文件:我們使用如下的方式來(lái)進(jìn)行查詢

1.模擬數(shù)據(jù)庫(kù)思想:連表查詢

StudentMapper.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">
<!--namespace不能寫別名-->
<mapper namespace="com.MLXH.dao.StudentDao">
    <!--遇到問(wèn)題:學(xué)生類中關(guān)聯(lián)老師: 多個(gè)學(xué)生對(duì)應(yīng)一個(gè)老師 -->
    
    <!--解決問(wèn)題方式一:按查詢結(jié)果嵌套處理,模擬數(shù)據(jù)庫(kù)思想;-->
    <select id="getStudents" resultMap="StudentTeacher">
        select * from mybatis.student
    </select>
    <resultMap id="StudentTeacher" type="Student">
        <id column="id" property="id"/>
        <result column="name" property="name"/>
        <!--屬性和字段對(duì)應(yīng)  , 類和表對(duì)應(yīng)  , 對(duì)象和記錄
        關(guān)聯(lián)一個(gè)字段
        需求:拿到老師這個(gè)類的屬性
        association : 關(guān)聯(lián),多對(duì)一
            column : 數(shù)據(jù)庫(kù)對(duì)應(yīng)的列名
            property : 對(duì)應(yīng)屬性名
            javaType : 多對(duì)一字段對(duì)應(yīng)的Java類型
            select : 關(guān)聯(lián)一個(gè)語(yǔ)句
        -->
        <association column="tid" property="teacher" javaType="Teacher" select="getTeacher"/>
    </resultMap>
    <select id="getTeacher" resultType="Teacher">
        select * from mybatis.teacher where id = #{id}
    </select>
</mapper>

測(cè)試類

    @Test
    public void getStudents(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        StudentDao mapper = sqlSession.getMapper(StudentDao.class);
        List<Student> students = mapper.getStudents();
        for (Student student : students) {
            System.out.println("學(xué)生姓名:"+student.getName()+"\t老師姓名:"+student.getTeacher().getName());
        }
    }

2.模擬面向?qū)ο蟮乃枷?/h3>
<?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">
<!--namespace不能寫別名!!!!!-->
<mapper namespace="com.MLXH.dao.StudentDao">
    <!-- 解決方式二:一個(gè)resultMap解決 , 模擬面向?qū)ο蟮乃枷?->
    <select id="getStudentsTwo" resultMap="StudentTeacher2">
        select s.id,s.name,t.id as tid,t.name as tname
        from mybatis.student as s, mybatis.teacher as t
        where s.tid = t.id
    </select>
    <!--設(shè)置結(jié)果集映射ResultMap -->
    <resultMap id="StudentTeacher2" type="Student">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <!--直接關(guān)聯(lián)一個(gè)老師-->
        <association property="teacher" javaType="Teacher">
            <id property="id" column="tid"/>
            <result property="name" column="tname"/>
        </association>
    </resultMap>
</mapper>

測(cè)試

@Test
public void getStudentsTwo(){
    SqlSession sqlSession = MyBatisUtils.getSqlSession();
    StudentDao mapper = sqlSession.getMapper(StudentDao.class);
    List<Student> students = mapper.getStudentsTwo();
    for (Student student : students) {
        System.out.println("學(xué)生姓名:"+student.getName()+"\t老師姓名:"+student.getTeacher().getName());
    }
}

在這里插入圖片描述

總結(jié):

mybatis中遇到多對(duì)一的情況,要使用關(guān)聯(lián)映射處理:使用association

兩種處理思路:

  • 數(shù)據(jù)庫(kù)思想 : 聯(lián)表查詢
  • OOP思想 :關(guān)聯(lián)對(duì)象

Mybatis同時(shí)傳入多個(gè)對(duì)象及普通參數(shù)

當(dāng)傳入多個(gè)文件時(shí),mapper接口文件的方法參數(shù)要使用@param(“xx”)注釋。

例子:

mapper:

//Student是對(duì)象,age是String類型。
int getPojo(@param("student") Student student, @param("age") String age );

xml:

<select id="getStudent" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from student
    where 1 = 1
    <!-- 使用參數(shù)一(是個(gè)自己的對(duì)象) -->
    <if test="student.id != null">
        and id = #{student.id}
    </if>
    <!-- 使用參數(shù)二 String類型 -->
    <if test="age!= null">
        and age = #{age}
    </if>
</select>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中異常打印輸出的常見(jiàn)方法總結(jié)

    Java中異常打印輸出的常見(jiàn)方法總結(jié)

    Java異常是在Java應(yīng)用中的警報(bào)器,下面這篇文章主要給大家介紹了關(guān)于Java中異常打印輸出的常見(jiàn)方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-07-07
  • SpringBoot實(shí)現(xiàn)mysql與clickhouse多數(shù)據(jù)源的項(xiàng)目實(shí)踐

    SpringBoot實(shí)現(xiàn)mysql與clickhouse多數(shù)據(jù)源的項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot實(shí)現(xiàn)mysql與clickhouse多數(shù)據(jù)源的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • SpringBoot 過(guò)濾器、攔截器、監(jiān)聽器對(duì)比及使用場(chǎng)景分析

    SpringBoot 過(guò)濾器、攔截器、監(jiān)聽器對(duì)比及使用場(chǎng)景分析

    過(guò)濾器是處于客戶端和服務(wù)器資源文件之間的一道過(guò)濾網(wǎng),這篇文章主要介紹了SpringBoot 過(guò)濾器、攔截器、監(jiān)聽器對(duì)比及使用場(chǎng)景分析,需要的朋友可以參考下
    2021-05-05
  • Java 超詳細(xì)講解hashCode方法

    Java 超詳細(xì)講解hashCode方法

    在 Java 應(yīng)用程序執(zhí)行期間,在同一對(duì)象上多次調(diào)用 hashCode 方法時(shí),必須一致地返回相同的整數(shù),前提是對(duì)象上 equals 比較中所用的信息沒(méi)有被修改。從某一應(yīng)用程序的一次執(zhí)行到同一應(yīng)用程序的另一次執(zhí)行,該整數(shù)無(wú)需保持一致
    2022-04-04
  • SpringBoot3使用?自定義注解+Jackson實(shí)現(xiàn)接口數(shù)據(jù)脫敏的步驟

    SpringBoot3使用?自定義注解+Jackson實(shí)現(xiàn)接口數(shù)據(jù)脫敏的步驟

    本文介紹了一種以優(yōu)雅的方式實(shí)現(xiàn)對(duì)接口返回的敏感數(shù)據(jù),如手機(jī)號(hào)、郵箱、身份證等信息的脫敏處理,這種方法也是企業(yè)常用方法,話不多說(shuō)我們一起來(lái)看一下吧
    2024-03-03
  • ZooKeeper命令及JavaAPI操作代碼

    ZooKeeper命令及JavaAPI操作代碼

    ZooKeeper是一個(gè)樹形目錄服務(wù),其數(shù)據(jù)模型和Uiix的文件目錄樹很類似,擁有一個(gè)層次化結(jié)構(gòu),這篇文章主要介紹了ZooKeeper命令及JavaAPI操作代碼,需要的朋友可以參考下
    2023-03-03
  • Mybatis傳遞多個(gè)參數(shù)的三種實(shí)現(xiàn)方法

    Mybatis傳遞多個(gè)參數(shù)的三種實(shí)現(xiàn)方法

    這篇文章主要介紹了Mybatis傳遞多個(gè)參數(shù)的三種實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 將字符串?dāng)?shù)字格式化為樣式1,000,000,000的方法

    將字符串?dāng)?shù)字格式化為樣式1,000,000,000的方法

    這篇文章主要介紹了將字符串?dāng)?shù)字格式化為樣式1,000,000,000的方法,有需要的朋友可以參考一下
    2014-01-01
  • 詳解Spring中接口的bean是如何注入的

    詳解Spring中接口的bean是如何注入的

    這篇文章主要介紹了詳解Spring中接口的bean是如何注入的的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 淺談Redis的key和value大小限制

    淺談Redis的key和value大小限制

    這篇文章主要介紹了淺談Redis的key和value大小限制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11

最新評(píng)論