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

MyBatis注解開發(fā)之實(shí)現(xiàn)自定義映射關(guān)系和關(guān)聯(lián)查詢

 更新時(shí)間:2023年04月12日 14:28:18   作者:會(huì)洗碗的CV工程師  
本文主要詳細(xì)介紹了MyBatis注解開發(fā)中,實(shí)現(xiàn)自定義映射關(guān)系和關(guān)聯(lián)查詢,文中有詳細(xì)的代碼示例,對(duì)學(xué)習(xí)MyBatis有一定的參考價(jià)值,需要的朋友可以參考閱讀

一、使用注解實(shí)現(xiàn)自定義映射關(guān)系

當(dāng)POJO屬性名與數(shù)據(jù)庫(kù)列名不一致時(shí),需要自定義實(shí)體類和結(jié)果集的映射關(guān)系,在MyBatis注解開發(fā)中,使用 @Results 定義并使用自定義映射,使用 @ResultMap 使用自定義映射,用法如下:

  前戲:為了體驗(yàn)這個(gè)效果,我們可以修改一下User實(shí)體類代碼,如下

package com.example.pojo;
 
import java.io.Serializable;
 
public class User implements Serializable {
    private int id;
    private String username1;
    private String sex1;
    private String address1;
 
    public User(String programmer, String man, String shangHai) {
        this.username1 = programmer;
        this.sex1 = man;
        this.address1 = shangHai;
    }
 
    public User(int i, String programmer_1, String woman, String shenzhen) {
        this.id = i;
        this.username1 = programmer_1;
        this.sex1 = woman;
        this.address1 = shenzhen;
    }
 
    public User() {
 
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getUsername1() {
        return username1;
    }
 
    public void setUsername1(String username1) {
        this.username1 = username1;
    }
 
    public String getSex1() {
        return sex1;
    }
 
    public void setSex1(String sex1) {
        this.sex1 = sex1;
    }
 
    public String getAddress1() {
        return address1;
    }
 
    public void setAddress1(String address1) {
        this.address1 = address1;
    }
 
    @Override
    public String toString() {
        return "User[ " +
                "id=" + id +
                ", username1='" + username1 + '\'' +
                ", sex1='" + sex1 + '\'' +
                ", address1='" + address1 + '\'' +
                " ]";
    }
}

1. 編寫注解方法

    // 查詢所有用戶
    @Results(id="userDiyMapper",value = {
            @Result(id = true,property = "id",column = "id"),
            @Result(property = "username1",column = "username"),
            @Result(property = "sex1",column = "sex"),
            @Result(property = "address1",column = "address")
    })
    @Select("select * from user")
    List<User> findAll1();
 
    // 根據(jù)id查詢
    @ResultMap("userDiyMapper")
    @Select("select * from user where id = #{id}")
    User findById(int id);

注意?。哼@里property對(duì)應(yīng)的是實(shí)體類屬性名,column對(duì)應(yīng)的就是數(shù)據(jù)庫(kù)表的列名 

2. 編寫測(cè)試方法

    @Test
    public void testFindAll1(){
        List<User> all = userMapper.findAll1();
        all.forEach(System.out::println);
        System.out.println("---------------------");
        System.out.println(userMapper.findById(5));
    }

 看看能否查詢出所有用戶和id為5的用戶,并且留意對(duì)應(yīng)的屬性名 

3. 查看運(yùn)行結(jié)果

 OK,看來(lái)都是符合我們的預(yù)期的。

 二、使用注解實(shí)現(xiàn)一對(duì)一關(guān)聯(lián)查詢

在MyBatis的注解開發(fā)中對(duì)于多表查詢只支持分解查詢,不支持連接查詢。

這里我們采用學(xué)生表和班級(jí)表做對(duì)比,所以我們先新建Student實(shí)體類和Classes實(shí)體類

 Classes實(shí)體類 

package com.example.pojo;
 
import java.util.List;
 
public class Classes {
    private int cid;
    private String className;
    private List<Student> studentList;
 
    public int getCid() {
        return cid;
    }
 
    public void setCid(int cid) {
        this.cid = cid;
    }
 
    public String getClassName() {
        return className;
    }
 
    public void setClassName(String className) {
        this.className = className;
    }
 
    public List<Student> getStudentList() {
        return studentList;
    }
 
    public void setStudentList(List<Student> studentList) {
        this.studentList = studentList;
    }
 
    @Override
    public String toString() {
        return "Classes[ " +
                "cid=" + cid +
                ", className='" + className + '\'' +
                ", studentList=" + studentList + 
                " ]";
    }
}

Student實(shí)體類

package com.example.pojo;
 
public class Student {
    private int sid;
    private String name;
    private int age;
    private String sex;
    private Classes classes;
 
    public int getSid() {
        return sid;
    }
 
    public void setSid(int sid) {
        this.sid = sid;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public String getSex() {
        return sex;
    }
 
    public void setSex(String sex) {
        this.sex = sex;
    }
 
    public Classes getClasses() {
        return classes;
    }
 
    public void setClasses(Classes classes) {
        this.classes = classes;
    }
 
    @Override
    public String toString() {
        return "Student[ " +
                "sid=" + sid +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", classes=" + classes +
                " ]";
    }
}

1. 編寫注解方法

StudentMapper添加查詢所有用戶

package com.example.mapper;
 
import com.example.pojo.Student;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;
 
import java.util.List;
 
public interface StudentMapper {
    @Select("select * from student")
    // 自定義映射關(guān)系
    @Results(id = "studentMapper",value = {
            @Result(id = true,property = "sid",column = "sid"),
            @Result(property = "name",column = "name"),
            @Result(property = "age",column = "age"),
            @Result(property = "sex",column = "sex"),
            /**
             * property:屬性名
             * column:調(diào)用從表方法時(shí)傳入的參數(shù)列
             * one:表示該屬性是一個(gè)對(duì)象
             * select:調(diào)用的是從表方法
             * fetchType:加載方式
             */
            @Result(property = "classes",column = "classId",
                one = @One(select = "com.example.mapper.ClassesMapper.findByCid",
                        fetchType = FetchType.EAGER)
                )
    })
    List<Student> findAll();
}

ClassesMapper添加根據(jù)id查詢班級(jí)

package com.example.mapper;
 
import com.example.pojo.Classes;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;
 
import java.util.List;
 
public interface ClassesMapper {
    // 根據(jù)id查詢班級(jí)
    @Select("select * from classes where cid = #{cid}")
    Classes findByCid(Integer id);
}

2. 編寫測(cè)試方法

// 測(cè)試一對(duì)一查詢
    @Test
    public void testFindAllStudent(){
        StudentMapper studentMapper = session.getMapper(StudentMapper.class);
        List<Student> all = studentMapper.findAll();
        all.forEach(System.out::println);
    }

看看能否查詢出學(xué)生對(duì)應(yīng)的班級(jí),如果可以則查詢成功 

 3. 查看運(yùn)行結(jié)果

OK,看圖我們是已經(jīng)成功查詢出每個(gè)學(xué)生對(duì)應(yīng)的班級(jí)的

三、使用注解實(shí)現(xiàn)一對(duì)多關(guān)聯(lián)查詢

在這里我們主要實(shí)現(xiàn)查詢所有班級(jí)的時(shí)候把對(duì)應(yīng)的學(xué)生列表也查詢出來(lái)。

1. 編寫注解方法

StudentMapper添加根據(jù)班級(jí)id查詢學(xué)生

// 根據(jù)班級(jí)Id查詢學(xué)生
    @Select("select * from student where ClassId = #{classId}")
    List<Student> findByClassId(int classId);

Classes添加查詢所有班級(jí)

// 查詢所有班級(jí)
    @Select("select * from classes")
    @Results(id = "classMapper",value = {
            @Result(id = true,property = "cid",column = "cid"),
            @Result(property = "className",column = "className"),
            // many:表示該屬性是一個(gè)集合
            @Result(property = "studentList",column = "cid",
            many = @Many(select = "com.example.mapper.StudentMapper.findByClassId",
                        fetchType = FetchType.LAZY))
    })
    List<Classes> findAll();

2. 編寫測(cè)試方法

// 測(cè)試一對(duì)多查詢
    @Test
    public void findAllClasses(){
        ClassesMapper classesMapper = session.getMapper(ClassesMapper.class);
        List<Classes> all = classesMapper.findAll();
        all.forEach(System.out::println);
    }

觀察能否查詢出班級(jí)對(duì)應(yīng)的學(xué)生列表

 3. 查看運(yùn)行結(jié)果

OK,確實(shí)也是可以查詢出來(lái)了的。 

四、注解文件和映射文件開發(fā)對(duì)比

注解開發(fā)更快,映射文件更方便。

MyBatis中更推薦使用映射文件開發(fā),Spring、SpringBoot更推薦注解方式。具體使用要視項(xiàng)目情況而定。它們的優(yōu)點(diǎn)對(duì)比如下:

映射文件:

  • 代碼與Sql語(yǔ)句是解耦的,修改時(shí)只需修改配置文件,無(wú)需修改源碼。
  • Sql語(yǔ)句集中,利于快速了解和維護(hù)項(xiàng)目。
  • 級(jí)聯(lián)查詢支持連接查詢和分解查詢兩種方式,注解開發(fā)只支持分解查詢。

注解:

  • 配置簡(jiǎn)單,開發(fā)效率高。
  • 類型安全,在編譯期即可進(jìn)行校驗(yàn),不用等到運(yùn)行時(shí)才發(fā)現(xiàn)錯(cuò)誤。

我個(gè)人也是比較喜歡映射文件開發(fā),主要更喜歡方便維護(hù)和了解。

到此這篇關(guān)于MyBatis注解開發(fā)之實(shí)現(xiàn)自定義映射關(guān)系和關(guān)聯(lián)查詢的文章就介紹到這了,更多相關(guān)MyBatis自定義映射和關(guān)聯(lián)查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot如何使用Spring Security進(jìn)行安全控制

    Spring Boot如何使用Spring Security進(jìn)行安全控制

    要實(shí)現(xiàn)訪問(wèn)控制的方法多種多樣,可以通過(guò)Aop、攔截器實(shí)現(xiàn),也可以通過(guò)框架實(shí)現(xiàn),本文將具體介紹在Spring Boot中如何使用Spring Security進(jìn)行安全控制。
    2017-04-04
  • SpringBoot中處理的轉(zhuǎn)發(fā)與重定向方式

    SpringBoot中處理的轉(zhuǎn)發(fā)與重定向方式

    這篇文章主要介紹了SpringBoot中處理的轉(zhuǎn)發(fā)與重定向方式,分別就轉(zhuǎn)發(fā)和重定向做了概念解說(shuō),結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • java基礎(chǔ)開發(fā)泛型類的詳解

    java基礎(chǔ)開發(fā)泛型類的詳解

    這篇文章為大家介紹了java基礎(chǔ)開發(fā)中泛型類的詳解,包括泛型的概念以及應(yīng)用實(shí)例有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 10本Java架構(gòu)師必讀書籍

    10本Java架構(gòu)師必讀書籍

    這篇文章主要介紹了10本Java架構(gòu)師必讀書籍,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Log4j.properties配置及其使用

    Log4j.properties配置及其使用

    本文主要介紹了Log4j.properties配置及其使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 在IDEA中創(chuàng)建Web項(xiàng)目的詳細(xì)過(guò)程

    在IDEA中創(chuàng)建Web項(xiàng)目的詳細(xì)過(guò)程

    這篇文章主要給大家介紹了關(guān)于在IDEA中創(chuàng)建Web項(xiàng)目的詳細(xì)過(guò)程,很多朋友可能在學(xué)習(xí)java基礎(chǔ)的時(shí)候已經(jīng)熟練掌握了IDEA創(chuàng)建java項(xiàng)目的基本步驟,但隨著學(xué)習(xí)技術(shù)的不斷深入,不同的IDEA版本可能在項(xiàng)目的創(chuàng)建頁(yè)面上出現(xiàn)些許的出入,需要的朋友可以參考下
    2023-10-10
  • 關(guān)于SpringCloud灰度發(fā)布的實(shí)現(xiàn)

    關(guān)于SpringCloud灰度發(fā)布的實(shí)現(xiàn)

    這篇文章主要介紹了關(guān)于SpringCloud灰度發(fā)布的實(shí)現(xiàn),灰度發(fā)布又稱金絲雀發(fā)布,是在系統(tǒng)升級(jí)的時(shí)候能夠平滑過(guò)渡的一種發(fā)布方式,灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時(shí)候就可以發(fā)現(xiàn)、調(diào)整問(wèn)題,以保證其影響度,需要的朋友可以參考下
    2023-08-08
  • Java依賴-關(guān)聯(lián)-聚合-組合之間區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java依賴-關(guān)聯(lián)-聚合-組合之間區(qū)別_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java依賴-關(guān)聯(lián)-聚合-組合之間區(qū)別理解,依賴關(guān)系比較好區(qū)分,它是耦合度最弱的一種,下文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2017-08-08
  • java使用淘寶API讀寫json實(shí)現(xiàn)手機(jī)歸屬地查詢功能代碼

    java使用淘寶API讀寫json實(shí)現(xiàn)手機(jī)歸屬地查詢功能代碼

    本文介紹java使用淘寶API讀寫json實(shí)現(xiàn)手機(jī)歸屬地查詢功能,代碼簡(jiǎn)單,大家可以參考使用
    2013-11-11
  • Spring整合redis(jedis)實(shí)現(xiàn)Session共享的過(guò)程

    Spring整合redis(jedis)實(shí)現(xiàn)Session共享的過(guò)程

    這篇文章主要介紹了Spring整合redis(jedis)實(shí)現(xiàn)Session共享,需要的朋友可以參考下
    2018-06-06

最新評(píng)論

布拖县| 阿勒泰市| 景宁| 洞口县| 察哈| 镇宁| 建水县| 上饶县| 宁安市| 津南区| 峨眉山市| 呼和浩特市| 灯塔市| 桓仁| 阿尔山市| 安图县| 哈密市| 县级市| 淅川县| 广灵县| 原阳县| 高雄市| 阳西县| 丰原市| 读书| 广东省| 佛教| 兴隆县| 曲松县| 卓资县| 平顶山市| 托里县| 苏州市| 南雄市| 普安县| 太谷县| 商水县| 崇州市| 比如县| 香港| 邓州市|