Java | 您所在的位置:网站首页 › mybatis一对一关系映射 › Java |
使用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 实验室设备网 版权所有 |