激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - Mybatis使用@one和@Many實現一對一及一對多關聯查詢

Mybatis使用@one和@Many實現一對一及一對多關聯查詢

2022-01-10 14:04拒絕熬夜啊 Java教程

本文主要介紹了Mybatis使用@one和@Many實現一對一及一對多關聯查詢,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

 

一、準備工作

 

1.創建springboot項目,項目結構如下

Mybatis使用@one和@Many實現一對一及一對多關聯查詢

 

2.添加pom.xml配置信息

<dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.2</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>
    </dependencies>

 

3.配置相關信息

將默認的application.properties文件的后綴修改為“.yml”,即配置文件名稱為:application.yml,并配置以下信息:

spring:
  #DataSource數據源
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis_test?useSSL=false&amp
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

#MyBatis配置
mybatis:
  type-aliases-package: com.mye.hl07mybatis.api.pojo #別名定義
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定 MyBatis 所用日志的具體實現,未指定時將自動查找
    map-underscore-to-camel-case: true #開啟自動駝峰命名規則(camel case)映射
    lazy-loading-enabled: true #開啟延時加載開關
    aggressive-lazy-loading: false #將積極加載改為消極加載(即按需加載),默認值就是false
    lazy-load-trigger-methods: "" #阻擋不相干的操作觸發,實現懶加載
    cache-enabled: true #打開全局緩存開關(二級環境),默認值就是true

 

二、使用@One注解實現一對一關聯查詢

需求:獲取用戶信息,同時獲取一對多關聯的權限列表

1.在MySQL數據庫中創建用戶信息表(tb_user)

-- 判斷數據表是否存在,存在則刪除
DROP TABLE IF EXISTS tb_user;
 
-- 創建“用戶信息”數據表
CREATE TABLE IF NOT EXISTS tb_user
( 
	user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT "用戶編號",
	user_account VARCHAR(50) NOT NULL COMMENT "用戶賬號",
	user_password VARCHAR(50) NOT NULL COMMENT "用戶密碼",
	blog_url VARCHAR(50) NOT NULL COMMENT "博客地址",
	remark VARCHAR(50) COMMENT "備注"
) COMMENT = "用戶信息表";
 
-- 添加數據
INSERT INTO tb_user(user_account,user_password,blog_url,remark) VALUES("拒絕熬夜啊的博客","123456","https://blog.csdn.net/weixin_43296313/","您好,歡迎訪問拒絕熬夜啊的博客");

2.在MySQL數據庫中創建身份證信息表(tb_idcard)

-- 判斷數據表是否存在,存在則刪除
DROP TABLE IF EXISTS tb_idcard;
 
-- 創建“身份證信息”數據表
CREATE TABLE IF NOT EXISTS tb_idcard
( 
	id INT AUTO_INCREMENT PRIMARY KEY COMMENT "身份證ID",
	user_id INT NOT NULL COMMENT "用戶編號",
	idCard_code VARCHAR(45) COMMENT "身份證號碼"
) COMMENT = "身份證信息表";
 
-- 添加數據
INSERT INTO tb_idcard(user_id,idCard_code) VALUE(1,"123456789");

3.創建用戶信息持久化類(UserInfo.java)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserInfo {
    private int userId; //用戶編號
    private String userAccount; //用戶賬號
    private String userPassword; //用戶密碼
    private String blogUrl; //博客地址
    private String remark; //備注
    private IdcardInfo idcardInfo; //身份證信息
}

4.創建身份證信息持久化類(IdcardInfo.java)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class IdcardInfo {
    public int id; //身份證ID
    public int userId; //用戶編號
    public String idCardCode; //身份證號碼
}

5.創建UserMapper接口(用戶信息Mapper動態代理接口)

@Repository
@Mapper
public interface UserMapper {
    /**
     * 獲取用戶信息和身份證信息
     * 一對一關聯查詢
     */
    @Select("SELECT * FROM tb_user WHERE user_id = #{userId}")
    @Results(id = "userAndIdcardResultMap", value = {
            @Result(property = "userId", column = "user_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER, id = true),
            @Result(property = "userAccount", column = "user_account",javaType = String.class, jdbcType = JdbcType.VARCHAR),
            @Result(property = "userPassword", column = "user_password",javaType = String.class, jdbcType = JdbcType.VARCHAR),
            @Result(property = "blogUrl", column = "blog_url",javaType = String.class, jdbcType = JdbcType.VARCHAR),
            @Result(property = "remark", column = "remark",javaType = String.class, jdbcType = JdbcType.VARCHAR),
            @Result(property = "idcardInfo",column = "user_id",
                    one = @One(select = "com.mye.hl07mybatis.api.mapper.UserMapper.getIdcardInfo", fetchType = FetchType.LAZY))
    })
    UserInfo getUserAndIdcardInfo(@Param("userId")int userId);
 
    /**
     * 根據用戶ID,獲取身份證信息
     */
    @Select("SELECT * FROM tb_idcard WHERE user_id = #{userId}")
    @Results(id = "idcardInfoResultMap", value = {
            @Result(property = "id", column = "id"),
            @Result(property = "userId", column = "user_id"),
            @Result(property = "idCardCode", column = "idCard_code")})
    IdcardInfo getIdcardInfo(@Param("userId")int userId);
}

6.實現實體類和數據表的映射關系

在SpringBoot啟動類中加 @MapperScan(basePackages = “com.mye.hl07mybatis.api.mapper”) 注解。

@SpringBootApplication
@MapperScan(basePackages = "com.mye.hl07mybatis.api.mapper")
public class Hl07MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(Hl07MybatisApplication.class, args);
    }
}

7.編寫執行方法,獲取用戶信息和身份證信息(一對一關聯查詢)

@SpringBootTest(classes = Hl07MybatisApplication.class)
@RunWith(SpringRunner.class)
public class Hl07MybatisApplicationTests {

    @Autowired
    private UserMapper userMapper;

    /**
     * 獲取用戶信息和身份證信息
     * 一對一關聯查詢
     * @author pan_junbiao
     */
    @Test
    public void getUserAndIdcardInfo() {
        //執行Mapper代理對象的查詢方法
        UserInfo userInfo = userMapper.getUserAndIdcardInfo(1);
        //打印結果
        if(userInfo!=null) {
            System.out.println("用戶編號:" + userInfo.getUserId());
            System.out.println("用戶賬號:" + userInfo.getUserAccount());
            System.out.println("用戶密碼:" + userInfo.getUserPassword());
            System.out.println("博客地址:" + userInfo.getBlogUrl());
            System.out.println("備注信息:" + userInfo.getRemark());
            System.out.println("-----------------------------------------");

            //獲取身份證信息
            IdcardInfo idcardInfo = userInfo.getIdcardInfo();
            if(idcardInfo!=null) {
                System.out.println("身份證ID:" + idcardInfo.getId());
                System.out.println("用戶編號:" + idcardInfo.getUserId());
                System.out.println("身份證號碼:" + idcardInfo.getIdCardCode());
            }
        }
    }
}

執行結果:

Mybatis使用@one和@Many實現一對一及一對多關聯查詢

 

三、使用@Many注解實現一對多關聯查詢

需求:獲取用戶信息,同時獲取一對多關聯的權限列表

1.在MySQL數據庫創建權限信息表(tb_role)

-- 判斷數據表是否存在,存在則刪除
DROP TABLE IF EXISTS tb_role;
 
-- 創建“權限信息”數據表
CREATE TABLE IF NOT EXISTS tb_role
( 
	id INT AUTO_INCREMENT PRIMARY KEY COMMENT "權限ID",
	user_id INT NOT NULL COMMENT "用戶編號",
	role_name VARCHAR(50) NOT NULL COMMENT "權限名稱"
) COMMENT = "權限信息表";
 
INSERT INTO tb_role(user_id,role_name) VALUES(1,"系統管理員"),(1,"新聞管理員"),(1,"廣告管理員");

2.創建權限信息持久化類(RoleInfo.java)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class RoleInfo {
    private int id; //權限ID
    private int userId; //用戶編號
    private String roleName; //權限名稱
}

3.修改用戶信息持久化類(UserInfo.java),添加權限列表的屬性字段

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserInfo {
    private int userId; //用戶編號
    private String userAccount; //用戶賬號
    private String userPassword; //用戶密碼
    private String blogUrl; //博客地址
    private String remark; //備注
    private IdcardInfo idcardInfo; //身份證信息
    private List<RoleInfo> roleInfoList; //權限列表
}

4.編寫用戶信息Mapper動態代理接口(UserMapper.java)

/**
 * 獲取用戶信息和權限列表
 * 一對多關聯查詢
 * @author pan_junbiao
 */
@Select("SELECT * FROM tb_user WHERE user_id = #{userId}")
@Results(id = "userAndRolesResultMap", value = {
        @Result(property = "userId", column = "user_id", javaType = Integer.class, jdbcType = JdbcType.INTEGER, id = true),
        @Result(property = "userAccount", column = "user_account",javaType = String.class, jdbcType = JdbcType.VARCHAR),
        @Result(property = "userPassword", column = "user_password",javaType = String.class, jdbcType = JdbcType.VARCHAR),
        @Result(property = "blogUrl", column = "blog_url",javaType = String.class, jdbcType = JdbcType.VARCHAR),
        @Result(property = "remark", column = "remark",javaType = String.class, jdbcType = JdbcType.VARCHAR),
        @Result(property = "roleInfoList",column = "user_id", many = @Many(select = "com.pjb.mapper.UserMapper.getRoleList", fetchType = FetchType.LAZY))
})
public UserInfo getUserAndRolesInfo(@Param("userId")int userId);
 
/**
 * 根據用戶ID,獲取權限列表
 * @author pan_junbiao
 */
@Select("SELECT * FROM tb_role WHERE user_id = #{userId}")
@Results(id = "roleInfoResultMap", value = {
        @Result(property = "id", column = "id"),
        @Result(property = "userId", column = "user_id"),
        @Result(property = "roleName", column = "role_name")})
public List<RoleInfo> getRoleList(@Param("userId")int userId);

5.編寫執行方法,獲取用戶信息和權限列表(一對多關聯查詢)

/**
     * 獲取用戶信息和權限列表
     * 一對多關聯查詢
     * @author pan_junbiao
     */
    @Test
    public void getUserAndRolesInfo() {
        //執行Mapper代理對象的查詢方法
        UserInfo userInfo = userMapper.getUserAndRolesInfo(1);
        //打印結果
        if(userInfo!=null) {
            System.out.println("用戶編號:" + userInfo.getUserId());
            System.out.println("用戶賬號:" + userInfo.getUserAccount());
            System.out.println("用戶密碼:" + userInfo.getUserPassword());
            System.out.println("博客地址:" + userInfo.getBlogUrl());
            System.out.println("備注信息:" + userInfo.getRemark());
            System.out.println("-----------------------------------------");

            //獲取權限列表
            List<RoleInfo> roleInfoList = userInfo.getRoleInfoList();
            if(roleInfoList!=null && roleInfoList.size()>0) {
                System.out.println("用戶擁有的權限:");
                for (RoleInfo roleInfo : roleInfoList) {
                    System.out.println(roleInfo.getRoleName());
                }
            }
        }
    }

執行結果:

Mybatis使用@one和@Many實現一對一及一對多關聯查詢

 

四、FetchType.LAZY 和 FetchType.EAGER的區別

FetchType.LAZY:懶加載,加載一個實體時,定義懶加載的屬性不會馬上從數據庫中加載。

FetchType.EAGER:急加載,加載一個實體時,定義急加載的屬性會立即從數據庫中加載。

到此這篇關于Mybatis使用@one和@Many實現一對一及一對多關聯查詢的文章就介紹到這了,更多相關Mybatis 一對一及一對多關聯查詢內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_43296313/article/details/120366372

延伸 · 閱讀

精彩推薦
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
537
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 国产精品成人久久久久a级 av电影在线免费 | 精品国产一区二区三区四区阿崩 | 日本在线观看一区二区 | 天天操天天干天天操 | 91精品影视 | 99影视电影电视剧在线播放 | 成人黄色短视频在线观看 | 成人在线视频一区 | 欧美人一级淫片a免费播放 久久久久久久久91 国产99久久久久久免费看 | 激情久久精品 | 成人毛片免费看 | 日韩黄色免费观看 | 国产高潮国产高潮久久久91 | 国产精品99久久久久久大便 | 久久国产精品区 | 男男啪羞羞视频网站 | 成人不卡| 91九色精品国产 | 九色p| 欧美精品网址 | 免费毛片儿 | 在线观看国产免费视频 | 99久久精品免费看国产小宝寻花 | 激情小说激情图片激情电影 | 国产精品久久久久久久久久久久久久久 | 欧美 亚洲 视频 | 国产91久久久久久 | 欧美a视频在线观看 | 高清中文字幕在线 | 偷偷草网站 | 国产亚洲精品成人a | 日本看片一区二区三区高清 | 99视频有精品视频高清 | 亚洲精品一区中文字幕 | 爽毛片| 色播视频网站 | 欧美成人午夜精品久久久 | 亚洲无毛av| 精品国产91久久久久久浪潮蜜月 | 青青草成人免费视频在线 | 91九色丨porny丨国产jk |