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

MyBatis多表查詢的操作方法注解和XML實(shí)現(xiàn)SQL語(yǔ)句

 更新時(shí)間:2025年04月23日 08:50:19   作者:Code哈哈笑  
這篇文章主要介紹了MyBatis多表查詢的操作方法注解和XML實(shí)現(xiàn)SQL語(yǔ)句,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

1.準(zhǔn)備工作

1.1創(chuàng)建數(shù)據(jù)庫(kù)

(1)創(chuàng)建數(shù)據(jù)庫(kù):

CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;

(2)使用數(shù)據(jù)庫(kù)

-- 使?數(shù)據(jù)數(shù)據(jù)
USE mybatis_test;

1.2 創(chuàng)建用戶表和實(shí)體類(lèi)

創(chuàng)建用戶表

-- 創(chuàng)建表[??表]
CREATE TABLE `user_info` (
 `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
 `username` VARCHAR ( 127 ) NOT NULL,
 `password` VARCHAR ( 127 ) NOT NULL,
 `age` TINYINT ( 4 ) NOT NULL,
 `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-? 0-默認(rèn)',
 `phone` VARCHAR ( 15 ) DEFAULT NULL,
 `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-刪除',
 `create_time` DATETIME DEFAULT now(),
 `update_time` DATETIME DEFAULT now() ON UPDATE now(),
 PRIMARY KEY ( `id` ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4; 

添加用戶信息

-- 添加??信息
INSERT INTO user_info( username, `password`, age, gender, phone )
VALUES ( 'admin', 'admin', 18, 1, '18612340001' );
INSERT INTO user_info( username, `password`, age, gender, phone )
VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' );
INSERT INTO user_info( username, `password`, age, gender, phone )
VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' );
INSERT INTO user_info( username, `password`, age, gender, phone )
VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );

實(shí)體類(lèi)的屬性名與表中的字段名??對(duì)應(yīng)

@Data
public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private Integer gender;
    private String phone;
    private Integer deleteFlag;
    private Date createTime;
    private Date updateTime;
}

1.3 創(chuàng)建文章表和實(shí)體類(lèi)

上?建了?張??表, 我們?cè)賮?lái)建?張?章表, 進(jìn)?多表關(guān)聯(lián)查詢.
?章表的uid, 對(duì)應(yīng)??表的id.

創(chuàng)建文章表:

-- 創(chuàng)建?章表
DROP TABLE IF EXISTS articleinfo;
CREATE TABLE articleinfo (
id INT PRIMARY KEY auto_increment, title VARCHAR ( 100 ) NOT NULL,
content TEXT NOT NULL, uid INT NOT NULL,
delete_flag TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-刪除',
create_time DATETIME DEFAULT now(), update_time DATETIME DEFAULT now()
) DEFAULT charset 'utf8mb4';

插入數(shù)據(jù)

-- 插?測(cè)試數(shù)據(jù)
INSERT INTO articleinfo ( title, content, uid ) VALUES ( 'Java', 'Java正文', 1
);
INSERT INTO articleinfo ( title, content, uid ) VALUES ( 'MySQL', 'MySQL正文', 1
);
INSERT INTO articleinfo ( title, content, uid ) VALUES ( 'C', 'C正文', 2
);

實(shí)體類(lèi)的屬性名與表中的字段名??對(duì)應(yīng)

@Data
public class ArticleInfo { 
	private Integer id; 
	private String title; 
	private String content; 
	private Integer uid; 
	private Integer deleteFlag; 
	private Date createTime; 
	private Date updateTime;
}

1.4 配置文件

Application.yml文件中配置:

# 數(shù)據(jù)庫(kù)連接配置
spring:
  datasource:
    # MySQL在遠(yuǎn)程服務(wù)器上
    url: jdbc:mysql://x.x.x.x:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root  #MySQL賬號(hào)
    password: root  #MySQL密碼
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  configuration: # 配置打印 MyBatis?志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true #配置駝峰?動(dòng)轉(zhuǎn)換
  # 配置 mybatis xml 的?件路徑,在 resources/mapper 創(chuàng)建所有表的 xml ?件
  mapper-locations: classpath:mapper/**Mapper.xml

2.多表查詢

2.1 需求: 根據(jù)uid查詢書(shū)的作者等相關(guān)信息

2.1.1 注解實(shí)現(xiàn)

SQL命令:

SELECT
	a.id,
	a.title,
	a.content,
	a.uid,
	b.username,
	b.age,
	b.gender
FROM
	articleinfo a
	LEFT JOIN user_info b ON a.uid = b.id
WHERE
	a.id =1;

根據(jù)查詢的結(jié)果在ArticleInfo 類(lèi)補(bǔ)充相關(guān)的屬性:

@Data
public class ArticleInfo {
	private Integer id;
	private String title;
	private String content;
	private Integer uid;
	private Integer deleteFlag;
	private Date createTime;
	private Date updateTime;
	// 補(bǔ)充??相關(guān)信息
	private String username;
	private Integer age;
	private Integer gender;
 }

ArticleInfoMapper接口:

@Mapper
public interface ArticleInfoMapper {
    @Select("select a.id,a.title,a.content,a.uid, b.username, b.age, b.gender " + // 注意最后的空格
            "from articleinfo a left join user_info b on a.uid=b.id " +
            "where a.id = #{id}")
    ArticleInfo queryArticleAndUser(Integer id);
}

測(cè)試代碼:

@Slf4j
@SpringBootTest
class ArticleInfoMapperTest {
    @Autowired
    private ArticleInfoMapper articleInfoMapper;
    @Test
    void queryArticleAndUser() {
        articleInfoMapper.queryArticleAndUser(1);
    }
}

運(yùn)行結(jié)果:

如果名稱(chēng)不?致的, 采?Results, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關(guān)系和實(shí)體類(lèi)

2.1.2 XML實(shí)現(xiàn)

SQL命令:

SELECT
	a.id,
	a.title,
	a.content,
	a.uid,
	b.username,
	b.age,
	b.gender
FROM
	articleinfo a
	LEFT JOIN user_info b ON a.uid = b.id
WHERE
	a.id =1;

根據(jù)查詢的結(jié)果在ArticleInfo 類(lèi)補(bǔ)充相關(guān)的屬性:

@Data
public class ArticleInfo {
	private Integer id;
	private String title;
	private String content;
	private Integer uid;
	private Integer deleteFlag;
	private Date createTime;
	private Date updateTime;
	// 補(bǔ)充??相關(guān)信息
	private String username;
	private Integer age;
	private Integer gender;
 }

ArticleInfoMapper接口:

@Mapper
public interface ArticleInfoXMLMapper {
    ArticleInfo queryArticleAndUser(Integer id);
}

ArticleInfoXMLMapper.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="org.example.mybatis.mapper.ArticleInfoXMLMapper">
    <select id ="queryArticleAndUser" resultType="org.example.mybatis.model.ArticleInfo">
        select a.id,a.title,a.content,a.uid, b.username, b.age, b.gender
            from articleinfo a left join user_info b on a.uid=b.id
            where a.id = #{id}
    </select>
</mapper>

測(cè)試代碼:

@Slf4j
@SpringBootTest
class ArticleInfoXMLMapperTest {
    @Autowired
    private ArticleInfoXMLMapper articleInfoXMLMapper;
    @Test
    void queryArticleAndUser() {
        articleInfoXMLMapper.queryArticleAndUser(1);
    }
}

運(yùn)行結(jié)果:

如果名稱(chēng)不?致的, 采?ResultMap, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關(guān)系和實(shí)體類(lèi)

2.2 需求: 根據(jù)user_in的id查詢作者創(chuàng)作的書(shū)相關(guān)信息

2.1.1 注解實(shí)現(xiàn)

SQL命令:

SELECT
	b.username,
	b.age,
	b.gender,
	a.id,
	a.title,
	a.content,
	a.uid
FROM
	articleinfo a
	RIGTH JOIN user_info  b ON b.uid = a.id
WHERE
	b.id =1;

根據(jù)查詢的結(jié)果在ArticleInfo 類(lèi)補(bǔ)充相關(guān)的屬性:

@Data
public class ArticleInfo {
	private Integer id;
	private String title;
	private String content;
	private Integer uid;
	private Integer deleteFlag;
	private Date createTime;
	private Date updateTime;
	// 補(bǔ)充??相關(guān)信息
	private String username;
	private Integer age;
	private Integer gender;
 }

ArticleInfoMapper接口:

@Mapper
public interface ArticleInfoMapper {
    @Select("select b.username, b.age,b.gender,a.id,a.title,a.content,a.uid " + // 注意最后的空格
            "from articleinfo a right join user_info b on a.uid=b.id " +
            "where b.id = #{id}")
    List<ArticleInfo> queryArticleAndUser(Integer id);
}

測(cè)試代碼:

@Slf4j
@SpringBootTest
class ArticleInfoMapperTest {
    @Autowired
    private ArticleInfoMapper articleInfoMapper;
    @Test
    void queryArticleAndUser() {
        articleInfoMapper.queryArticleAndUser(1);
    }
}

運(yùn)行結(jié)果:

如果名稱(chēng)不?致的, 采?Results, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關(guān)系和實(shí)體類(lèi)

2.1.2 XML實(shí)現(xiàn)

SQL命令:

SELECT
	b.username,
	b.age,
	b.gender,
	a.id,
	a.title,
	a.content,
	a.uid
FROM
	articleinfo a
	RIGHT JOIN user_info b ON a.uid = b.id
WHERE
	a.id =1;

根據(jù)查詢的結(jié)果在ArticleInfo 類(lèi)補(bǔ)充相關(guān)的屬性:

@Data
public class ArticleInfo {
	private Integer id;
	private String title;
	private String content;
	private Integer uid;
	private Integer deleteFlag;
	private Date createTime;
	private Date updateTime;
	// 補(bǔ)充??相關(guān)信息
	private String username;
	private Integer age;
	private Integer gender;
 }

ArticleInfoMapper接口:

@Mapper
public interface ArticleInfoXMLMapper {
    List<ArticleInfo> queryArticleAndUser(Integer id);
}

ArticleInfoXMLMapper.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="org.example.mybatis.mapper.ArticleInfoXMLMapper">
    <select id ="queryArticleAndUser" resultType="org.example.mybatis.model.ArticleInfo">
        select b.username, b.age, b.gender,a.id,a.title,a.content,a.uid
            from articleinfo a right join user_info b on a.uid=b.id
            where b.id = #{id}
    </select>
</mapper>

測(cè)試代碼:

@Slf4j
@SpringBootTest
class ArticleInfoXMLMapperTest {
    @Autowired
    private ArticleInfoXMLMapper articleInfoXMLMapper;
    @Test
    void queryArticleAndUser() {
        articleInfoXMLMapper.queryArticleAndUser(1);
    }
}

運(yùn)行結(jié)果:

如果名稱(chēng)不?致的, 采?ResultMap, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關(guān)系和實(shí)體類(lèi)

到此這篇關(guān)于MyBatis多表查詢的操作方法注解和XML實(shí)現(xiàn)SQL語(yǔ)句的文章就介紹到這了,更多相關(guān)MyBatis多表查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java并發(fā)LinkedBlockingQueue源碼分析

    Java并發(fā)LinkedBlockingQueue源碼分析

    這篇文章主要為大家介紹了Java并發(fā)LinkedBlockingQueue源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java調(diào)用opencv身份證號(hào)識(shí)別詳解

    java調(diào)用opencv身份證號(hào)識(shí)別詳解

    這篇文章主要為大家詳細(xì)介紹了java如何調(diào)用opencv實(shí)現(xiàn)身份證號(hào)的識(shí)別,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 如何基于Autowired對(duì)構(gòu)造函數(shù)進(jìn)行注釋

    如何基于Autowired對(duì)構(gòu)造函數(shù)進(jìn)行注釋

    這篇文章主要介紹了如何基于Autowired對(duì)構(gòu)造函數(shù)進(jìn)行注釋,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Netty學(xué)習(xí)教程之基礎(chǔ)使用篇

    Netty學(xué)習(xí)教程之基礎(chǔ)使用篇

    Netty是由JBOSS提供的一個(gè)Java開(kāi)源框架。Netty提供異步的、事件驅(qū)動(dòng)的網(wǎng)絡(luò)應(yīng)用程序框架和工具,用以快速開(kāi)發(fā)高性能、高可靠性的網(wǎng)絡(luò)服務(wù)器和客戶端程序。下面這篇文章主要給大家介紹了關(guān)于Netty基礎(chǔ)使用的相關(guān)資料,需要的朋友可以參考下。
    2017-05-05
  • 如何把本地jar包導(dǎo)入maven并pom添加依賴(lài)

    如何把本地jar包導(dǎo)入maven并pom添加依賴(lài)

    這篇文章主要介紹了如何把本地jar包導(dǎo)入maven并pom添加依賴(lài),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • springboot整合日志處理Logback的實(shí)現(xiàn)示例

    springboot整合日志處理Logback的實(shí)現(xiàn)示例

    Logback是由log4j創(chuàng)始人設(shè)計(jì)的又一個(gè)開(kāi)源日志組件,本文主要介紹了springboot整合日志處理Logback,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Spring和SpringMVC父子容器關(guān)系初窺(小結(jié))

    Spring和SpringMVC父子容器關(guān)系初窺(小結(jié))

    這篇文章主要介紹了Spring和SpringMVC父子容器關(guān)系初窺(小結(jié)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • MyBatis中Mapper的注入問(wèn)題詳解

    MyBatis中Mapper的注入問(wèn)題詳解

    這篇文章主要介紹了MyBatis中Mapper的注入問(wèn)題,我知道在 SpringBoot 體系中,MyBatis 對(duì) Mapper 的注入常見(jiàn)的方式有 2 種,具體哪兩種方法跟隨小編一起看看吧
    2021-09-09
  • 詳解SpringMVC組件之HandlerMapping(一)

    詳解SpringMVC組件之HandlerMapping(一)

    這篇文章主要介紹了詳解SpringMVC組件之HandlerMapping(一),HandlerMapping組件是Spring?MVC核心組件,用來(lái)根據(jù)請(qǐng)求的request查找對(duì)應(yīng)的Handler,在Spring?MVC中,有各式各樣的Web請(qǐng)求,每個(gè)請(qǐng)求都需要一個(gè)對(duì)應(yīng)的Handler來(lái)處理,需要的朋友可以參考下
    2023-08-08
  • IDEA?報(bào)Plugin'maven-resources-plugin:'not?found?的解決方案

    IDEA?報(bào)Plugin'maven-resources-plugin:'not?found?

    如果在使用?IDEA?時(shí)遇到?"Plugin?'maven-resources-plugin:'?not?found"?錯(cuò)誤,可能是由于?Maven?倉(cāng)庫(kù)中未找到所需的?Maven?插件,近小編給大家分享幾種解決方法,感興趣的朋友跟隨小編一起看看吧
    2023-07-07

最新評(píng)論