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

Mybatis?Lombok使用方法與復雜查詢介紹

 更新時間:2022年10月10日 14:04:09   作者:Decade0712  
Lombok是一種Java實用工具,可用來幫助開發(fā)人員消除Java的冗長,尤其是對于簡單的Java對象(POJO),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧

基本要點

1、Lombok

作用:在我們的實體類中,我們再也不需要聲明get、set、有參無參等方法,統(tǒng)統(tǒng)可以通過Lombok注解來實現(xiàn)同樣的功能

使用步驟:

  • 安裝插件:setting—>plugin中搜索Lombok進行安裝
  • 引入依賴:
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.18.22</version>
   <scope>provided</scope>
</dependency>

使用注解,下面介紹一點常用的

@Data:get/set 無參構(gòu)造 tostring hascode equals

@AllArgsConstructor:有參構(gòu)造,使用之后,無參構(gòu)造需要顯示定義

@NoArgsConstructor:無參構(gòu)造

局限性:

  • 只支持所有參數(shù)類型的有參構(gòu)造
  • 降低了源碼的可讀性和完整性

2、多對一處理

假設(shè)我和我的朋友們都喜歡高代課,我們四個的老師叫趙哥

對于趙哥來說,他是一個教我們四個,一對多稱為集合

對于我們來說,我們四個都是趙哥小弟,多對一稱為關(guān)聯(lián)

1)需求

現(xiàn)在,我們的家長想知道,為什么我們四個人的高代成績?yōu)槭裁从械娜诉^了有的人沒過

到底是不是一個老師教的,所以需要從我們?nèi)胧?,查出我們各自的高代老?/p>

2)實現(xiàn)

首先我們先在數(shù)據(jù)庫中創(chuàng)建學生表和教師表,插入一下我們和趙哥的信息

create table t_decade_teacher
(
`id` INT(10) NOT NUll,
`name` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB CHARACTER SET = utf8;
insert into t_decade_teacher(`id`,`name`)values(1,'趙哥');
create table t_decade_student
(
`id` INT(10) NOT NULL,
`name` VARCHAR(50) DEFAULT null,
`tid` INT(10) DEFAULT null,
PRIMARY KEY (`id`),
FOREIGN key (`tid`) REFERENCES `t_decade_teacher` (`id`)
) ENGINE=INNODB CHARACTER SET = utf8;
insert into t_decade_student(`id`,`name`,`tid`)VALUES(1,'十年',1);
insert into t_decade_student(`id`,`name`,`tid`)VALUES(2,'石少爺',1);
insert into t_decade_student(`id`,`name`,`tid`)VALUES(3,'天宇',1);
insert into t_decade_student(`id`,`name`,`tid`)VALUES(4,'明哥',1);

然后我們新建對應的實體類

package com.decade.pojo;
import lombok.Data;
@Data
public class Teacher {
    private int id;
    private String name;
}
package com.decade.pojo;
import lombok.Data;
@Data
public class Student {
    private int id;
    private String name;
    private Teacher teacher;
}

新建我們學生的接口類

// 學生接口類
package com.decade.mapper;
public interface StudentMapper {
    List<Student> getStudentInfo();
    List<Student> getStudentInfo2();
}

然后是對應的SQL映射文件(我放在了resource文件夾下,注意映射文件所在的包路徑需要和Java文件夾下的接口類的路徑保持一致,因為我用了2種映射器的注冊方式)

StudentMapper.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.decade.mapper.StudentMapper">
    <resultMap id="studentInfoMap" type="student">
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <!-- 對于實體類中復雜的屬性,我們需要進行單獨處理
         字段對應實體類中的屬性是對象時,使用association,javaType是指定屬性的類型,這里就是Teacher類
         -->
        <association column="tid" property="teacher" javaType="teacher" select="selectTeacherInfo"/>
    </resultMap>
    <!-- 我們查詢多對一的方式時,有2種思路
     第一種:按查詢嵌套處理,類似子查詢
     -->
    <select id="getStudentInfo" resultMap="studentInfoMap">
        select * from t_decade_student
    </select>
    <!-- 子查詢語句,需要使用外鍵作為查詢條件
    比如這里學生和老師就是用tid關(guān)聯(lián)起來的
     -->
    <select id="selectTeacherInfo" resultType="teacher">
        select * from t_decade_teacher where id = #{id}
    </select>
    <resultMap id="studentInfoMap2" type="student">
        <result column="sid" property="id"/>
        <result column="sname" property="name"/>
        <!-- 
    	這里我們直接把Teacher類和查詢語句中輸出的字段關(guān)聯(lián)起來
     	-->
        <association property="teacher" javaType="teacher">
            <result column="tid" property="id"/>
            <result column="tname" property="name"/>
        </association>
    </resultMap>
    <!--
     第二種:按結(jié)果嵌套處理,類似聯(lián)表查詢
     -->
    <select id="getStudentInfo2" resultMap="studentInfoMap2">
        select s.id as sid, s.name as sname,t.id as tid, t.name as tname
        from t_decade_student s left join t_decade_teacher t
        on s.tid = t.id
    </select>
</mapper>

并在核心配置文件中進行注冊

我這里使用映射器接口和相對于類路徑的資源引用兩種方式進行注冊

<?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="db.properties">
        <property name="username" value="decade"/>
        <property name="password" value="11111"/>
    </properties>
    <settings>
        <!-- 標準的日志工廠 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <typeAliases>
        <package name="com.decade.pojo"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--驅(qū)動配置,com.mysql.jdbc.driver -->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--每一個mapper.xml文件都需要在核心配置文件中注冊-->
    <mappers>
        <mapper resource="com/decade/mapper/TeacherMapper.xml"/>
        <mapper class="com.decade.mapper.StudentMapper"/>
        <!--        <package name="com.decade.mapper"/>-->
    </mappers>
</configuration>

最后我們寫一個測試類進行測試

import com.decade.mapper.StudentMapper;
import com.decade.pojo.Student;
import com.decade.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class MyTest {
    @Test
    public void test2() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
            List<Student> student = mapper.getStudentInfo();
            student.forEach(System.out::println);
            System.out.println("=========================");
            List<Student> studentInfo = mapper.getStudentInfo2();
            studentInfo.forEach(System.out::println);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
    }
}

運行結(jié)果如下,我靠,居然都是趙哥教的,看來他針對我!

3、一對多

現(xiàn)在,我們換一個角度,我們想從趙哥下手,查出他所有學生的信息

我們在上面例子的基礎(chǔ)上調(diào)整一下學生和老師的實體類

package com.decade.pojo;
import lombok.Data;
@Data
public class Student2 {
    private int id;
    private String name;
    private int tid;
}
package com.decade.pojo;
import lombok.Data;
import java.util.List;
@Data
public class Teacher2 {
    private int id;
    private String name;
    // 一個老師有多名學生
    private List<Student2> studentList;
}

新建趙哥他們老師的接口類和對應的SQL映射文件

// 教師接口類
package com.decade.mapper;
import com.decade.pojo.Teacher2;
import org.apache.ibatis.annotations.Param;
public interface TeacherMapper {
    Teacher2 selectTeacherInfo(@Param("id") int id);
    Teacher2 selectTeacherInfo2(@Param("id") int id);
}

TeacherMapper.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.decade.mapper.TeacherMapper">
    <resultMap id="teacherInfoMap" type="com.decade.pojo.Teacher2">
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <!-- 因為我們這里需要用到teacher的id作為嵌套查詢的條件,所以我們這里的column字段使用id -->
        <collection property="studentList" javaType="ArrayList"
            ofType="student2" select="selectStudentByTeacher" column="id"/>
    </resultMap>
    <!--
     第一種:按查詢嵌套處理,類似子查詢
     -->
    <select id="selectTeacherInfo" resultMap="teacherInfoMap">
        select * from t_decade_teacher where id = #{id}
    </select>
    <select id="selectStudentByTeacher" resultType="student2">
        select * from t_decade_student where tid = #{id}
    </select>
    <resultMap id="teacherInfoMap2" type="teacher2">
        <result column="tid" property="id"/>
        <result column="tname" property="name"/>
        <collection property="studentList" ofType="student2">
            <result column="sid" property="id"/>
            <result column="sname" property="name"/>
            <result column="stid" property="tid"/>
        </collection>
    </resultMap>
    <!--
     第二種:按結(jié)果嵌套處理,類似關(guān)聯(lián)查詢
     -->
    <select id="selectTeacherInfo2" resultMap="teacherInfoMap2">
        select t.id as tid, t.name as tname, s.id as sid, s.name as sname, s.tid as stid
        from t_decade_teacher t left join t_decade_student s
        on t.id = s.tid
        where t.id = #{id}
    </select>
</mapper>

最后我們寫一個測試方法進行測試

import com.decade.mapper.TeacherMapper;
import com.decade.pojo.Teacher2;
import com.decade.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
public class MyTest {
    @Test
    public void test() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
            Teacher2 teacherInfo = mapper.selectTeacherInfo(1);
            System.out.println(teacherInfo);
            System.out.println("=================================");
            Teacher2 teacherInfo2 = mapper.selectTeacherInfo2(1);
            System.out.println(teacherInfo2);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
    }
}

運行結(jié)果如下

結(jié)果集映射resultMap中涉及到一對多就用集合collection,涉及到多對一就用關(guān)聯(lián)association
javaType:用來指定實體類中屬性的類型
ofType:如果屬性是集合,那么用這個來指定泛型的約束類型

到此這篇關(guān)于Mybatis Lombok使用方法與復雜查詢介紹的文章就介紹到這了,更多相關(guān)Mybatis Lombok內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Scala泛型(泛型方法,泛型類,泛型特質(zhì),上下界,協(xié)變、逆變、非變)

    Java Scala泛型(泛型方法,泛型類,泛型特質(zhì),上下界,協(xié)變、逆變、非變)

    泛型的意思是泛指某種具體的數(shù)據(jù)類型, 在Scala中, 泛型用[數(shù)據(jù)類型]表示. 在實際開發(fā)中, 泛型一般是結(jié)合數(shù)組或者集合來使用的,這篇文章主要介紹了Scala泛型(泛型方法,泛型類,泛型特質(zhì),上下界,協(xié)變、逆變、非變),需要的朋友可以參考下
    2023-04-04
  • SpringBoot2學習之springboot與spring區(qū)別分析

    SpringBoot2學習之springboot與spring區(qū)別分析

    這篇文章主要為大家介紹了SpringBoot2學習之springboot與spring區(qū)別分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Java使用poi包讀取Excel文檔代碼分享

    Java使用poi包讀取Excel文檔代碼分享

    這篇文章主要介紹了Java使用poi包讀取Excel文檔代碼分享,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java 根據(jù)網(wǎng)絡URL獲取該網(wǎng)頁上面所有的img標簽并下載圖片

    Java 根據(jù)網(wǎng)絡URL獲取該網(wǎng)頁上面所有的img標簽并下載圖片

    這篇文章主要介紹了Java 根據(jù)網(wǎng)絡URL獲取該網(wǎng)頁上面所有的img標簽并下載圖片,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11
  • Java實戰(zhàn)之用Swing實現(xiàn)通訊錄管理系統(tǒng)

    Java實戰(zhàn)之用Swing實現(xiàn)通訊錄管理系統(tǒng)

    今天給大家?guī)淼氖荍ava實戰(zhàn)的相關(guān)知識,文章圍繞著Swing實現(xiàn)通訊錄管理系統(tǒng)展開,文中有非常詳細的代碼示例,需要的朋友可以參考下
    2021-06-06
  • 詳解Java反射創(chuàng)建對象

    詳解Java反射創(chuàng)建對象

    今天帶大家學習Java的基礎(chǔ)知識,文中對Java反射創(chuàng)建對象作了非常詳細的介紹及代碼示例,對正在學習Java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • idea使用war以及war exploded的區(qū)別說明

    idea使用war以及war exploded的區(qū)別說明

    本文詳細解析了war與warexploded兩種部署方式的差異及步驟,war方式是先打包成war包,再部署到服務器上;warexploded方式是直接把文件夾、class文件等移到Tomcat上部署,支持熱部署,開發(fā)時常用,文章分別列出了warexploded模式和war包形式的具體操作步驟
    2024-10-10
  • Java中List轉(zhuǎn)Array的兩種主要方式

    Java中List轉(zhuǎn)Array的兩種主要方式

    在Java中經(jīng)常遇到需要List與數(shù)組互相轉(zhuǎn)換的場景,這篇文章主要給大家介紹了關(guān)于Java中List轉(zhuǎn)Array的兩種主要方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • Java實現(xiàn)手機號碼歸屬地查詢

    Java實現(xiàn)手機號碼歸屬地查詢

    這篇文章主要為大家詳細介紹了如何利用Java實現(xiàn)手機號碼歸屬地查詢功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • MyBatis流式查詢的三種實現(xiàn)方法

    MyBatis流式查詢的三種實現(xiàn)方法

    流式查詢指的是查詢成功后不是返回一個集合而是返回一個迭代器,應用每次從迭代器取一條查詢結(jié)果,本文介紹了MyBatis流式查詢的實現(xiàn),感興趣的可以了解一下
    2021-05-05

最新評論

射阳县| 得荣县| 和政县| 常州市| 宁夏| 夏津县| 东港市| 岫岩| 昭通市| 民勤县| 沙洋县| 松溪县| 右玉县| 拉萨市| 海南省| 天镇县| 梧州市| 忻州市| 始兴县| 陈巴尔虎旗| 宁化县| 浦县| 宜州市| 上虞市| 娄底市| 宜君县| 隆德县| 阜平县| 和硕县| 吉首市| 赤城县| 富锦市| 克东县| 乌兰浩特市| 惠安县| 铁岭县| 益阳市| 蓬莱市| 敦煌市| 额济纳旗| 浙江省|