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

MyBatis多表查詢的操作方法注解和XML實現SQL語句

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

1.準備工作

1.1創(chuàng)建數據庫

(1)創(chuàng)建數據庫:

CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4;

(2)使用數據庫

-- 使?數據數據
USE mybatis_test;

1.2 創(chuàng)建用戶表和實體類

創(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-默認',
 `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' );

實體類的屬性名與表中的字段名??對應

@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)建文章表和實體類

上?建了?張??表, 我們再來建?張?章表, 進?多表關聯(lián)查詢.
?章表的uid, 對應??表的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';

插入數據

-- 插?測試數據
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
);

實體類的屬性名與表中的字段名??對應

@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文件中配置:

# 數據庫連接配置
spring:
  datasource:
    # MySQL在遠程服務器上
    url: jdbc:mysql://x.x.x.x:3306/mybatis_test?characterEncoding=utf8&useSSL=false
    username: root  #MySQL賬號
    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 #配置駝峰?動轉換
  # 配置 mybatis xml 的?件路徑,在 resources/mapper 創(chuàng)建所有表的 xml ?件
  mapper-locations: classpath:mapper/**Mapper.xml

2.多表查詢

2.1 需求: 根據uid查詢書的作者等相關信息

2.1.1 注解實現

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;

根據查詢的結果在ArticleInfo 類補充相關的屬性:

@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;
	// 補充??相關信息
	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);
}

測試代碼:

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

運行結果:

如果名稱不?致的, 采?Results, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關系和實體類

2.1.2 XML實現

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;

根據查詢的結果在ArticleInfo 類補充相關的屬性:

@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;
	// 補充??相關信息
	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>

測試代碼:

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

運行結果:

如果名稱不?致的, 采?ResultMap, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關系和實體類

2.2 需求: 根據user_in的id查詢作者創(chuàng)作的書相關信息

2.1.1 注解實現

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;

根據查詢的結果在ArticleInfo 類補充相關的屬性:

@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;
	// 補充??相關信息
	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);
}

測試代碼:

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

運行結果:

如果名稱不?致的, 采?Results, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關系和實體類

2.1.2 XML實現

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;

根據查詢的結果在ArticleInfo 類補充相關的屬性:

@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;
	// 補充??相關信息
	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>

測試代碼:

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

運行結果:

如果名稱不?致的, 采?ResultMap, 或者別名的?式解決, 和單表查詢?樣 Mybatis 不分單表還是多表, 主要就是三部分: SQL, 映射關系和實體類

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

相關文章

  • 使用MultipartFile來上傳單個及多個文件代碼示例

    使用MultipartFile來上傳單個及多個文件代碼示例

    這篇文章主要介紹了使用MultipartFile來上傳單個及多個文件代碼示例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • IntelliJ?IDEA運行SpringBoot項目的詳細步驟

    IntelliJ?IDEA運行SpringBoot項目的詳細步驟

    這篇文章主要介紹了IntelliJ?IDEA如何運行SpringBoot項目,步驟一配置maven,步驟二配置JDK環(huán)境,緊接著通過步驟三檢查數據庫的配置,最后一步數據庫連接,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 詳解SpringBoot簡化配置分析總結

    詳解SpringBoot簡化配置分析總結

    這篇文章主要介紹了詳解SpringBoot簡化配置分析總結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • SpringBoot中shiro過濾器的重寫與配置詳解

    SpringBoot中shiro過濾器的重寫與配置詳解

    在前后端分離跨域訪問的項目中shiro進行權限攔截失效 (即使有正確權限的訪問也會被攔截) 時造成302重定向錯誤等問題,為解決這個問題,就需要進行shiro過濾器的重寫以及配置。本文詳細介紹了解決方法,需要的可以參考一下
    2022-04-04
  • springboot+camunda實現工作流的流程分析

    springboot+camunda實現工作流的流程分析

    Camunda是基于Java語言,支持BPMN標準的工作流和流程自動化框架,并且還支持CMMN規(guī)范,DMN規(guī)范,本文給大家介紹springboot+camunda實現工作流的流程分析,感興趣的朋友一起看看吧
    2021-12-12
  • java實現的n*n矩陣求值及求逆矩陣算法示例

    java實現的n*n矩陣求值及求逆矩陣算法示例

    這篇文章主要介紹了java實現的n*n矩陣求值及求逆矩陣算法,結合具體實例形式分析了java基于數組的矩陣定義、遍歷、運算等相關操作技巧,需要的朋友可以參考下
    2017-09-09
  • 解決RocketMQ的冪等性問題

    解決RocketMQ的冪等性問題

    重復消費因調用鏈路長、消息發(fā)送超時或消費者故障導致,通過生產者消息查詢、Redis緩存及消費者唯一主鍵可以確保冪等性,避免重復處理,本文主要介紹了解決RocketMQ的冪等性問題,感興趣的可以了解一下
    2025-07-07
  • Spring框架開發(fā)IOC兩種創(chuàng)建工廠方法詳解

    Spring框架開發(fā)IOC兩種創(chuàng)建工廠方法詳解

    這篇文章主要介紹了Spring框架IOC兩種創(chuàng)建工廠方法詳解,文中附含詳細的代碼示例分別對靜態(tài)方法和實例方法創(chuàng)建工廠作了簡要的分析
    2021-09-09
  • JAVA SpringBoot統(tǒng)一日志處理原理詳解

    JAVA SpringBoot統(tǒng)一日志處理原理詳解

    這篇文章主要介紹了SpringBoot的統(tǒng)一日志處理原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-09-09
  • 解決Maven項目報錯:failed?to?execute?goal?org.apache.maven.plugins:maven-compiler-plugin:3.13.0的問題

    解決Maven項目報錯:failed?to?execute?goal?org.apache.maven.plug

    這篇文章主要介紹了解決Maven項目報錯:failed?to?execute?goal?org.apache.maven.plugins:maven-compiler-plugin:3.13.0的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05

最新評論

邵东县| 金川县| 乌恰县| 友谊县| 吕梁市| 延安市| 沈丘县| 白山市| 永德县| 庆云县| 青川县| 黄骅市| 远安县| 丹巴县| 收藏| 泰州市| 镇坪县| 五大连池市| 通许县| 宕昌县| 双江| 博湖县| 健康| 河西区| 高雄市| 扬中市| 孙吴县| 长宁区| 肃北| 萨迦县| 镇安县| 剑河县| 洪江市| 湖北省| 桦南县| 扎鲁特旗| 林甸县| 岐山县| 招远市| 高淳县| 三都|