MyBatis多表查詢的操作方法注解和XML實(shí)現(xiàn)SQL語(yǔ)句
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í)體類
創(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í)體類的屬性名與表中的字段名??對(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í)體類
上?建了?張??表, 我們?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í)體類的屬性名與表中的字段名??對(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.xml2.多表查詢
2.1 需求: 根據(jù)uid查詢書的作者等相關(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 類補(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é)果:

如果名稱不?致的, 采?Results, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關(guān)系和實(shí)體類
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 類補(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é)果:

如果名稱不?致的, 采?ResultMap, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關(guān)系和實(shí)體類
2.2 需求: 根據(jù)user_in的id查詢作者創(chuàng)作的書相關(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 類補(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é)果:

如果名稱不?致的, 采?Results, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關(guān)系和實(shí)體類
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 類補(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é)果:

如果名稱不?致的, 采?ResultMap, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關(guān)系和實(shí)體類
到此這篇關(guān)于MyBatis多表查詢的操作方法注解和XML實(shí)現(xiàn)SQL語(yǔ)句的文章就介紹到這了,更多相關(guān)MyBatis多表查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MybatisPlus多表查詢及分頁(yè)查詢完整代碼
- mybatis-plus多表查詢操作方法
- mybatis于xml方式和注解方式實(shí)現(xiàn)多表查詢的操作方法
- MybatisPlus使用Mybatis的XML的動(dòng)態(tài)SQL的功能實(shí)現(xiàn)多表查詢
- mybatis多表查詢的實(shí)現(xiàn)(xml方式)
- springboot整合mybatis實(shí)現(xiàn)多表查詢的實(shí)戰(zhàn)記錄
- Mybatis如何開(kāi)啟控制臺(tái)打印sql語(yǔ)句
- 一文詳解如何配置MyBatis實(shí)現(xiàn)打印可執(zhí)行的SQL語(yǔ)句
相關(guān)文章
使用MultipartFile來(lái)上傳單個(gè)及多個(gè)文件代碼示例
這篇文章主要介紹了使用MultipartFile來(lái)上傳單個(gè)及多個(gè)文件代碼示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
IntelliJ?IDEA運(yùn)行SpringBoot項(xiàng)目的詳細(xì)步驟
這篇文章主要介紹了IntelliJ?IDEA如何運(yùn)行SpringBoot項(xiàng)目,步驟一配置maven,步驟二配置JDK環(huán)境,緊接著通過(guò)步驟三檢查數(shù)據(jù)庫(kù)的配置,最后一步數(shù)據(jù)庫(kù)連接,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
詳解SpringBoot簡(jiǎn)化配置分析總結(jié)
這篇文章主要介紹了詳解SpringBoot簡(jiǎn)化配置分析總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
SpringBoot中shiro過(guò)濾器的重寫與配置詳解
在前后端分離跨域訪問(wèn)的項(xiàng)目中shiro進(jìn)行權(quán)限攔截失效 (即使有正確權(quán)限的訪問(wèn)也會(huì)被攔截) 時(shí)造成302重定向錯(cuò)誤等問(wèn)題,為解決這個(gè)問(wèn)題,就需要進(jìn)行shiro過(guò)濾器的重寫以及配置。本文詳細(xì)介紹了解決方法,需要的可以參考一下2022-04-04
springboot+camunda實(shí)現(xiàn)工作流的流程分析
Camunda是基于Java語(yǔ)言,支持BPMN標(biāo)準(zhǔn)的工作流和流程自動(dòng)化框架,并且還支持CMMN規(guī)范,DMN規(guī)范,本文給大家介紹springboot+camunda實(shí)現(xiàn)工作流的流程分析,感興趣的朋友一起看看吧2021-12-12
java實(shí)現(xiàn)的n*n矩陣求值及求逆矩陣算法示例
這篇文章主要介紹了java實(shí)現(xiàn)的n*n矩陣求值及求逆矩陣算法,結(jié)合具體實(shí)例形式分析了java基于數(shù)組的矩陣定義、遍歷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
Spring框架開(kāi)發(fā)IOC兩種創(chuàng)建工廠方法詳解
這篇文章主要介紹了Spring框架IOC兩種創(chuàng)建工廠方法詳解,文中附含詳細(xì)的代碼示例分別對(duì)靜態(tài)方法和實(shí)例方法創(chuàng)建工廠作了簡(jiǎn)要的分析2021-09-09
JAVA SpringBoot統(tǒng)一日志處理原理詳解
這篇文章主要介紹了SpringBoot的統(tǒng)一日志處理原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-09-09
解決Maven項(xiàng)目報(bào)錯(cuò):failed?to?execute?goal?org.apache.maven.plug
這篇文章主要介紹了解決Maven項(xiàng)目報(bào)錯(cuò):failed?to?execute?goal?org.apache.maven.plugins:maven-compiler-plugin:3.13.0的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05

