Java 您所在的位置:网站首页 mybatis一对一关系映射 Java

Java

#Java| 来源: 网络整理| 查看: 265

使用Mybatis框架,在业务需要对数据库进行关联查询的时候需使用关联映射 而关联映射分为关联单个对象与关联多个对象,即一对一、一对多的情况,且每种关联方式都可以有两种处理情况,即使用1条sql进行处理与使用2条sql进行处理

已有表关系如下(表的字段名与实体类中的属性名一致): user表:主键为user_Id book表:主键为book_id

Java实体类对象如下: 1、domain.User.java

package domain; import java.util.List; public class User { private String user_id;//用户id,主键 private String user_name;//用户姓名 private String user_password;//用户密码 private List books;//用户拥有的书籍信息,用户与书籍是一对多的关系 public List getBooks() { return books; } public void setBooks(List books) { this.books = books; } public String getUser_id() { return user_id; } public void setUser_id(String user_id) { this.user_id = user_id; } public String getUser_name() { return user_name; } public void setUser_name(String user_name) { this.user_name = user_name; } public String getUser_password() { return user_password; } public void setUser_password(String user_password) { this.user_password = user_password; } @Override public String toString() { return "User [user_id=" + user_id + ", user_name=" + user_name + ", user_password=" + user_password + ", books=" + books + "]"; } }

2、domain.Book.java

package domain; public class Book { private String book_id;//书籍id,主键 private String user_id;//所属用户id,外键参照于用户表的主键 private String book_name;//书籍名称 private User user;//书籍所属用户关系,书籍与用户为一对一 public String getBook_id() { return book_id; } public void setBook_id(String book_id) { this.book_id = book_id; } public String getUser_id() { return user_id; } public void setUser_id(String user_id) { this.user_id = user_id; } public String getBook_name() { return book_name; } public void setBook_name(String book_name) { this.book_name = book_name; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } @Override public String toString() { return "Book [book_id=" + book_id + ", user_id=" + user_id + ", book_name=" + book_name + ", user=" + user + "]"; } }

3、mapper.BookAndUserMapper(Mapper映射器) 

package mapper; import java.util.List; import domain.Book; public interface UserMapper { //关联单个对象 public List findBookAndUser1();//一条语句执行sql public List findBookAndUser2();//两条语句执行sql //关联多个对象 public User findUserById1(String userId);//一条语句执行sql public User findUserById2(String userId);//两条语句执行sql }

4、UserMapper.xml 

一、一对一,标签 SELECT * FROM book LEFT JOIN user ON book.user_id = user.user_id select *from book select *from user where user_id = #{userId} 二、一对多,标签 select * from user u left join book b on (u.user_id = b.user_id) where u.user_id = #{userId} select * from user where user_id = #{userId} select * from book where user_id = #{userId}

《阿里巴巴JAVA开发手册》里面写超过三张表禁止join,原文如下:

此规范是针对MySQL系数据库的,模拟一些场景多造些数据去查询对比不难发现:每增加1张表的JOIN,查询性能就会显著下降

因此我们还是要根据业务场景去灵活运用 

针对阿里为何这样规定,以及如何解决,可参考文章

《阿里巴巴JAVA开发手册》超过三张表禁止join



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有