框架学习之JPA(四)

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

学习视频:尚硅谷框架jpa学习(有兴趣的同学留言邮箱)

使用软件:eclipse

Java版本:jdk8

本节目录

四、JPA_映射关联关系

1.映射单向多对一的关联关系

2.映射单向一对多的关联关系

3.映射双向多对一的关联关系

4.映射双向一对一的关联关系

5.映射双向多对多的关联关系

四、JPA_映射关联关系

1.映射单向多对一的关联关系

创建Order类

  1. package hue.edu.xiong.jpa;
  2.  
  3. import javax.persistence.Column;
  4.  
  5. import javax.persistence.Entity;
  6.  
  7. import javax.persistence.GeneratedValue;
  8.  
  9. import javax.persistence.GenerationType;
  10.  
  11. import javax.persistence.Id;
  12.  
  13. import javax.persistence.JoinColumn;
  14.  
  15. import javax.persistence.ManyToOne;
  16.  
  17. import javax.persistence.Table;
  18.  
  19. @Entity
  20.  
  21. @Table(name="JPA_ORDERS")
  22.  
  23. public class Order {
  24.  
  25. @Id
  26.  
  27. @GeneratedValue(strategy=GenerationType.AUTO)
  28.  
  29. private Integer id;
  30.  
  31. @Column(name="ORDER_NAME")
  32.  
  33. private String orderName;
  34.  
  35. //映射单向n-1的关联关系
  36.  
  37. //使用@ManyToIne来映射多对一的关联关系
  38.  
  39. //使用@JoinColumn来映射外键
  40.  
  41. //上课学到的原则,对方永远是一,即多个我对应一个对方,即多对一
  42.  
  43. @ManyToOne
  44.  
  45. @JoinColumn(name="CUSTOMER_ID")
  46.  
  47. private Customer customer;
  48.  
  49. //get,set略,请自行补充
  50.  
  51. }

  

保存测试:

  1. @Test
  2.  
  3. public void testManyToOnePersist() {
  4.  
  5. Customer customer = new Customer();
  6.  
  7. customer.setAge(12);
  8.  
  9. customer.setEmail("937724308@qq.com");
  10.  
  11. customer.setLastName("xiong");
  12.  
  13. customer.setBirth(new Date());
  14.  
  15. customer.setCreatedTime(new Date());
  16.  
  17. Order order1 = new Order();
  18.  
  19. order1.setOrderName("O-FF-1");
  20.  
  21. Order order2 = new Order();
  22.  
  23. order2.setOrderName("O-FF-2");
  24.  
  25. //设置关联关系
  26.  
  27. order1.setCustomer(customer);
  28.  
  29. order2.setCustomer(customer);
  30.  
  31. //执行保存操作
  32.  
  33. entityManager.persist(customer);
  34.  
  35. entityManager.persist(order1);
  36.  
  37. entityManager.persist(order2);
  38.  
  39. }

  

  1. //修改保存顺序
  2.  
  3. entityManager.persist(order1);
  4.  
  5. entityManager.persist(order2);
  6.  
  7. entityManager.persist(customer);

  

l 第一个测试会发现数据库中是三个insert操作

l 第二个测试修改顺序之后发现是三个insert操作,再是两个update操作

l 保存多对一时,建议先保存1的一端,然后保存n的一端这样不会有额外的update语句

获取测试:

  1. //默认情况下使用左外连接方式来获取N的一端的对象和其关联的1的一端的对象
  2.  
  3. //可使用@ManyToOne的fetch属性来修改默认的关联属性的加载策略
  4.  
  5. @Test
  6.  
  7. public void testManyToOneFind() {
  8.  
  9. Order order = entityManager.find(Order.class, 1);
  10.  
  11. System.out.println(order.getOrderName());
  12.  
  13. System.out.println(order.getCustomer().getLastName());
  14.  
  15. }
  16. ------------------------------------------------------
  17. //懒加载模式
  18.  
  19. //映射单向n-1的关联关系
  20.  
  21. //使用@ManyToIne来映射多对一的关联关系
  22.  
  23. //使用@JoinColumn来映射外键
  24.  
  25. //可使用@ManyToOne的fetch属性来修改默认的关联属性的加载策略
  26.  
  27. @ManyToOne(fetch=FetchType.LAZY)
  28.  
  29. @JoinColumn(name="CUSTOMER_ID")
  30.  
  31. private Customer customer;

  

删除测试:

  1. //不能直接删除 1 的一端, 因为有外键约束.
  2.  
  3. @Test
  4.  
  5. public void testManyToOneRemove(){
  6.  
  7. // Order order = entityManager.find(Order.class, 1);
  8.  
  9. // entityManager.remove(order);
  10.  
  11. Customer customer = entityManager.find(Customer.class, 5);
  12.  
  13. entityManager.remove(customer);
  14.  
  15. }

  

修改测试:

  1. //可以修改外键对应的对象的值将"xiong"->"FFF"
  2.  
  3. @Test
  4.  
  5. public void testManyToOneUpdate(){
  6.  
  7. Order order = entityManager.find(Order.class, 2);
  8.  
  9. order.getCustomer().setLastName("FFF");
  10.  
  11. }

  

2.映射单向一对多的关联关系

修改Order类,把Customer全部注解掉

  1. package hue.edu.xiong.jpa;
  2.  
  3. import javax.persistence.Column;
  4.  
  5. import javax.persistence.Entity;
  6.  
  7. import javax.persistence.GeneratedValue;
  8.  
  9. import javax.persistence.GenerationType;
  10.  
  11. import javax.persistence.Id;
  12.  
  13. import javax.persistence.Table;
  14.  
  15. @Entity
  16.  
  17. @Table(name="JPA_ORDERS")
  18.  
  19. public class Order {
  20.  
  21. @Id
  22.  
  23. @GeneratedValue(strategy=GenerationType.AUTO)
  24.  
  25. private Integer id;
  26.  
  27. @Column(name="ORDER_NAME")
  28.  
  29. private String orderName;
  30.  
  31. // //映射单向n-1的关联关系
  32.  
  33. // //使用@ManyToIne来映射多对一的关联关系
  34.  
  35. // //使用@JoinColumn来映射外键
  36.  
  37. // //可使用@ManyToOne的fetch属性来修改默认的关联属性的加载策略
  38.  
  39. // @ManyToOne(fetch=FetchType.LAZY)
  40.  
  41. // @JoinColumn(name="CUSTOMER_ID")
  42.  
  43. // private Customer customer;
  44.  
  45. //get,set略,请自行补充
  46.  
  47. }

  

修改Customer类,增加Set<Order> orders,并且设置一对多关系

  1. package hue.edu.xiong.jpa;
  2.  
  3. import java.util.Date;
  4.  
  5. import java.util.Set;
  6.  
  7. import javax.persistence.Column;
  8.  
  9. import javax.persistence.Entity;
  10.  
  11. import javax.persistence.GeneratedValue;
  12.  
  13. import javax.persistence.GenerationType;
  14.  
  15. import javax.persistence.Id;
  16.  
  17. import javax.persistence.JoinColumn;
  18.  
  19. import javax.persistence.OneToMany;
  20.  
  21. import javax.persistence.Table;
  22.  
  23. import javax.persistence.Temporal;
  24.  
  25. import javax.persistence.TemporalType;
  26.  
  27. @Table(name = "JPA_CUSTOMERS")
  28.  
  29. @Entity
  30.  
  31. public class Customer {
  32.  
  33. @Id
  34.  
  35. @GeneratedValue(strategy = GenerationType.AUTO)
  36.  
  37. private Integer id;
  38.  
  39. @Column(name = "LAST_NAME")
  40.  
  41. private String lastName;
  42.  
  43. private String email;
  44.  
  45. private Integer age;
  46.  
  47. @Temporal(TemporalType.DATE)
  48.  
  49. private Date birth;
  50.  
  51. @Temporal(TemporalType.TIMESTAMP)
  52.  
  53. private Date createdTime;
  54.  
  55. //设置单向1-n关联关系
  56.  
  57. @OneToMany
  58.  
  59. @JoinColumn(name="CUSTOMER_ID")
  60.  
  61. private Set<Order> orders;
  62.  
  63. }

保存测试:

  1. //单向 1-n 关联关系执行保存时, 一定会多出 UPDATE 语句.
  2.  
  3. //因为 n 的一端在插入时不会同时插入外键列.
  4.  
  5. @Test
  6.  
  7. public void testOneToManyPersist(){
  8.  
  9. Customer customer = new Customer();
  10.  
  11. customer.setAge(18);
  12.  
  13. customer.setBirth(new Date());
  14.  
  15. customer.setCreatedTime(new Date());
  16.  
  17. customer.setEmail("mm@163.com");
  18.  
  19. customer.setLastName("MM");
  20.  
  21. Order order1 = new Order();
  22.  
  23. order1.setOrderName("O-MM-1");
  24.  
  25. Order order2 = new Order();
  26.  
  27. order2.setOrderName("O-MM-2");
  28.  
  29. //建立关联关系
  30.  
  31. customer.getOrders().add(order1);
  32.  
  33. customer.getOrders().add(order2);
  34.  
  35. //执行保存操作
  36.  
  37. entityManager.persist(customer);
  38.  
  39. entityManager.persist(order1);
  40.  
  41. entityManager.persist(order2);
  42.  
  43. }
  • 单向 1-n 关联关系执行保存时, 一定会多出 UPDATE 语句.
  • 因为 n 的一端在插入时不会同时插入外键列.

查找测试:

  1. //默认对关联的多的一方使用懒加载的加载策略.
  2.  
  3. //可以使用 @OneToMany 的 fetch 属性来修改默认的加载策略
  4.  
  5. @Test
  6.  
  7. public void testOneToManyFind(){
  8.  
  9. Customer customer = entityManager.find(Customer.class, 9);
  10.  
  11. System.out.println(customer.getLastName());
  12.  
  13. System.out.println(customer.getOrders().size());
  14.  
  15. }
  • 默认是使用懒加载模式,可以修改为其他策略模式,怎样修改看下面的删除测试第二个表格内容

删除测试:

  1. //默认情况下, 若删除 1 的一端, 则会先把关联的 n 的一端的外键置空, 然后进行删除.
  2.  
  3. //可以通过 @OneToMany 的 cascade 属性来修改默认的删除策略.
  4.  
  5. @Test
  6.  
  7. public void testOneToManyRemove(){
  8.  
  9. Customer customer = entityManager.find(Customer.class, 8);
  10.  
  11. entityManager.remove(customer);
  12.  
  13. }

  

  1. //设置单向1-n关联关系
  2.  
  3. //使用 @OneToMany 来映射 1-n 的关联关系
  4.  
  5. //使用 @JoinColumn 来映射外键列的名称
  6.  
  7. //可以使用 @OneToMany 的 fetch 属性来修改默认的加载策略
  8.  
  9. //可以通过 @OneToMany 的 cascade 属性来修改默认的删除策略.
  10.  
  11. @OneToMany(fetch=FetchType.LAZY,cascade={CascadeType.REMOVE})
  12.  
  13. @JoinColumn(name="CUSTOMER_ID")
  14.  
  15. private Set<Order> orders;
  • 将外键修改为空之后再删除
  • 将外键全部删除之后再删除

修改测试:

  1. @Test
  2.  
  3. public void testUpdate(){
  4.  
  5. Customer customer = entityManager.find(Customer.class, 10);
  6.  
  7. customer.getOrders().iterator().next().setOrderName("O-XXX-10");
  8.  
  9. }

  

3.映射双向多对一的关联关系

  • 若是双向 1-n 的关联关系, 执行保存时
  • 若先保存 n 的一端, 再保存 1 的一端, 默认情况下, 会多出 n 条 UPDATE 语句.
  • 若先保存 1 的一端, 则会多出 n 条 UPDATE 语句
  • 在进行双向 1-n 关联关系时, 建议使用 n 的一方来维护关联关系, 而 1 的一方不维护关联系, 这样会有效的减少 SQL 语句.
  • 注意: 若在 1 的一端的 @OneToMany 中使用 mappedBy 属性, 则 @OneToMany 端就不能再使用 @JoinColumn属性了.
  • 放弃维护关联关系,不使用JoinColumn标签,在@OneToMany 中使用 mappedBy 属性
  1. // @JoinColumn(name="CUSTOMER_ID")
  2.  
  3. @OneToMany(fetch=FetchType.LAZY,cascade={CascadeType.REMOVE},mappedBy="customer")

自我理解,就是把上面两个关系组合起来,尽量使用多对一的关系,其他都一样

4.映射双向一对一的关联关系

创建两个类Manager,Department

  1. package hue.edu.xiong.jpa;
  2.  
  3. import javax.persistence.Column;
  4.  
  5. import javax.persistence.Entity;
  6.  
  7. import javax.persistence.FetchType;
  8.  
  9. import javax.persistence.GeneratedValue;
  10.  
  11. import javax.persistence.Id;
  12.  
  13. import javax.persistence.OneToOne;
  14.  
  15. import javax.persistence.Table;
  16.  
  17. @Table(name = "JPA_MANAGERS")
  18.  
  19. @Entity
  20.  
  21. public class Manager {
  22.  
  23. @Id
  24.  
  25. @GeneratedValue
  26.  
  27. private Integer id;
  28.  
  29. @Column(name = "MGR_NAME")
  30.  
  31. private String mgrName;
  32.  
  33. // 对于不维护关联关系, 没有外键的一方, 使用 @OneToOne 来进行映射, 建议设置 mappedBy=true
  34.  
  35. @OneToOne(mappedBy = "mgr")
  36.  
  37. private Department dept;
  38.  
  39. //get,set略,请自行补充
  40.  
  41. }

  

  1. package hue.edu.xiong.jpa;
  2.  
  3. import javax.persistence.Column;
  4.  
  5. import javax.persistence.Entity;
  6.  
  7. import javax.persistence.FetchType;
  8.  
  9. import javax.persistence.GeneratedValue;
  10.  
  11. import javax.persistence.Id;
  12.  
  13. import javax.persistence.JoinColumn;
  14.  
  15. import javax.persistence.OneToOne;
  16.  
  17. import javax.persistence.Table;
  18.  
  19. @Table(name = "JPA_DEPARTMENTS")
  20.  
  21. @Entity
  22.  
  23. public class Department {
  24.  
  25. @Id
  26.  
  27. @GeneratedValue
  28.  
  29. private Integer id;
  30.  
  31. @Column(name = "DEPT_NAME")
  32.  
  33. private String deptName;
  34.  
  35. // 使用 @OneToOne 来映射 1-1 关联关系。
  36.  
  37. // 若需要在当前数据表中添加主键则需要使用 @JoinColumn 来进行映射. 注意, 1-1 关联关系, 所以需要添加 unique=true
  38.  
  39. @JoinColumn(name = "MGR_ID", unique = true)
  40.  
  41. @OneToOne(fetch = FetchType.LAZY)
  42.  
  43. private Manager mgr;
  44.  
  45. //get,set略,请自行补充
  46.  
  47. }

  

保存测试:

  1. //双向 1-1 的关联关系, 建议先保存不维护关联关系的一方, 即没有外键的一方, 这样不会多出 UPDATE 语句.
  2.  
  3. @Test
  4.  
  5. public void testOneToOnePersistence(){
  6.  
  7. Manager mgr = new Manager();
  8.  
  9. mgr.setMgrName("M-BB");
  10.  
  11. Department dept = new Department();
  12.  
  13. dept.setDeptName("D-BB");
  14.  
  15. //设置关联关系
  16.  
  17. mgr.setDept(dept);
  18.  
  19. dept.setMgr(mgr);
  20.  
  21. //执行保存操作
  22.  
  23. entityManager.persist(mgr);
  24.  
  25. entityManager.persist(dept);
  26.  
  27. }

  

  • l双向 1-1 的关联关系, 建议先保存不维护关联关系的一方, 即没有外键的一方, 这样不会多出 UPDATE 语句.

查找测试:

  1. //1.默认情况下, 若获取维护关联关系的一方, 则会通过左外连接获取其关联的对象.
  2.  
  3. //但可以通过 @OntToOne 的 fetch 属性来修改加载策略.
  4.  
  5. @Test
  6.  
  7. public void testOneToOneFind(){
  8.  
  9. Department dept = entityManager.find(Department.class, 1);
  10.  
  11. System.out.println(dept.getDeptName());
  12.  
  13. System.out.println(dept.getMgr().getClass().getName());
  14.  
  15. }

  

  1. //1. 默认情况下, 若获取不维护关联关系的一方, 则也会通过左外连接获取其关联的对象.
  2.  
  3. //可以通过 @OneToOne 的 fetch 属性来修改加载策略. 但依然会再发送 SQL 语句来初始化其关联的对象
  4.  
  5. //这说明在不维护关联关系的一方, 不建议修改 fetch 属性.
  6.  
  7. @Test
  8.  
  9. public void testOneToOneFind2(){
  10.  
  11. Manager mgr = entityManager.find(Manager.class, 1);
  12.  
  13. System.out.println(mgr.getMgrName());
  14.  
  15. System.out.println(mgr.getDept().getClass().getName());
  16.  
  17. }

 

5.映射双向多对多的关联关系

创建两个类item和Category

  1. package hue.edu.xiong.jpa;
  2.  
  3. import java.util.HashSet;
  4.  
  5. import java.util.Set;
  6.  
  7. import javax.persistence.Column;
  8.  
  9. import javax.persistence.Entity;
  10.  
  11. import javax.persistence.GeneratedValue;
  12.  
  13. import javax.persistence.Id;
  14.  
  15. import javax.persistence.JoinColumn;
  16.  
  17. import javax.persistence.JoinTable;
  18.  
  19. import javax.persistence.ManyToMany;
  20.  
  21. import javax.persistence.Table;
  22.  
  23. @Table(name="JPA_ITEMS")
  24.  
  25. @Entity
  26.  
  27. public class Item {
  28.  
  29. @Id
  30.  
  31. @GeneratedValue
  32.  
  33. private Integer id;
  34.  
  35. @Column(name="ITEM_NAME")
  36.  
  37. private String itemName;
  38.  
  39. //使用 @ManyToMany 注解来映射多对多关联关系
  40.  
  41. //使用 @JoinTable 来映射中间表
  42.  
  43. //1. name 指向中间表的名字
  44.  
  45. //2. joinColumns 映射当前类所在的表在中间表中的外键
  46.  
  47. //2.1 name 指定外键列的列名
  48.  
  49. //2.2 referencedColumnName 指定外键列关联当前表的哪一列
  50.  
  51. //3. inverseJoinColumns 映射关联的类所在中间表的外键
  52.  
  53. @JoinTable(name="ITEM_CATEGORY",
  54.  
  55. joinColumns={@JoinColumn(name="ITEM_ID", referencedColumnName="ID")},
  56.  
  57. inverseJoinColumns={@JoinColumn(name="CATEGORY_ID", referencedColumnName="ID")})
  58.  
  59. @ManyToMany
  60.  
  61. private Set<Category> categories = new HashSet<>();
  62.  
  63. //get,set略,请自行补充
  64.  
  65. }

  

  1. package hue.edu.xiong.jpa;
  2.  
  3. import java.util.HashSet;
  4.  
  5. import java.util.Set;
  6.  
  7. import javax.persistence.Column;
  8.  
  9. import javax.persistence.Entity;
  10.  
  11. import javax.persistence.GeneratedValue;
  12.  
  13. import javax.persistence.Id;
  14.  
  15. import javax.persistence.ManyToMany;
  16.  
  17. import javax.persistence.Table;
  18.  
  19. @Table(name = "JPA_CATEGORIES")
  20.  
  21. @Entity
  22.  
  23. public class Category {
  24.  
  25. @Id
  26.  
  27. @GeneratedValue
  28.  
  29. private Integer id;
  30.  
  31. @Column(name = "CATEGORY_NAME")
  32.  
  33. private String categoryName;
  34.  
  35. @ManyToMany(mappedBy = "categories")
  36.  
  37. private Set<Item> items = new HashSet<>();
  38.  
  39. //get,set略,请自行补充,过分了啊,这个颜色一直调整不好
  40.  
  41. }

  

必须指定中间表

  • 使用 @ManyToMany 注解来映射多对多关联关系
  • 使用 @JoinTable 来映射中间表
    • name 指向中间表的名字
    • joinColumns 映射当前类所在的表在中间表中的外键
      • name 指定外键列的列名
      • referencedColumnName 指定外键列关联当前表的哪一列
    • inverseJoinColumns 映射关联的类所在中间表的外键

典型多对多,一个学生对应多门课程,一门课程对应多个学生,学生加课程决定成绩

保存案例:

  1. //多对多的保存
  2.  
  3. @Test
  4.  
  5. public void testManyToManyPersist(){
  6.  
  7. Item i1 = new Item();
  8.  
  9. i1.setItemName("i-1");
  10.  
  11. Item i2 = new Item();
  12.  
  13. i2.setItemName("i-2");
  14.  
  15. Category c1 = new Category();
  16.  
  17. c1.setCategoryName("C-1");
  18.  
  19. Category c2 = new Category();
  20.  
  21. c2.setCategoryName("C-2");
  22.  
  23. //设置关联关系
  24.  
  25. i1.getCategories().add(c1);
  26.  
  27. i1.getCategories().add(c2);
  28.  
  29. i2.getCategories().add(c1);
  30.  
  31. i2.getCategories().add(c2);
  32.  
  33. c1.getItems().add(i1);
  34.  
  35. c1.getItems().add(i2);
  36.  
  37. c2.getItems().add(i1);
  38.  
  39. c2.getItems().add(i2);
  40.  
  41. //执行保存
  42.  
  43. entityManager.persist(i1);
  44.  
  45. entityManager.persist(i2);
  46.  
  47. entityManager.persist(c1);
  48.  
  49. entityManager.persist(c2);
  50.  
  51. }

查找案例:

  1. //对于关联的集合对象, 默认使用懒加载的策略.
  2.  
  3. //使用维护关联关系的一方获取, 还是使用不维护关联关系的一方获取, SQL 语句相同.
  4.  
  5. @Test
  6.  
  7. public void testManyToManyFind(){
  8.  
  9. // Item item = entityManager.find(Item.class, 5);
  10.  
  11. // System.out.println(item.getItemName());
  12.  
  13. //
  14.  
  15. // System.out.println(item.getCategories().size());
  16.  
  17. Category category = entityManager.find(Category.class, 3);
  18.  
  19. System.out.println(category.getCategoryName());
  20.  
  21. System.out.println(category.getItems().size());
  22.  
  23. }

  

JPA学习(四、JPA_映射关联关系)的更多相关文章

  1. JPA_映射关联关系

    一:单项多对一的关联关系 例如:订单和客户 1.新创建订单类 package com.atguigu.jpa.helloworld; import javax.persistence.Column; ...

  2. Mybatis基础学习(四)—关系映射

    一.模型分析 user和orders user---->orders 一个用户可以创建多个订单,一对多. orders--->user 一个订单只由一个用户创建,一对一.   orders ...

  3. JPA学习笔记(8)——映射一对多关联关系

    一对多关联关系 本文有很多和多对一是一样的,因此不会写得非常具体. 有看不懂的.能够參考JPA学习笔记(7)--映射多对一关联关系 Order实体类 package com.jpa.helloworl ...

  4. JPA学习(五、JPA_二级缓存)

    框架学习之JPA(五) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 ...

  5. JPA学习(二、JPA_基本注解)

    框架学习之JPA(二) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 ...

  6. [原创]java WEB学习笔记82:Hibernate学习之路---映射 一对多关联关系,配置,CRUD方法测试及注意点

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. 9、JPA_映射双向一对一的关联关系

    双向一对一的关联关系 举例说明:经理Manager和部门Department是双向一对一关联关系.则Manager实体类中有Department实体对象的引用,反之亦然. 其实体属性定义如下: Lis ...

  8. JPA(六):映射关联关系------映射单向一对多的关联关系

    映射单向一对多的关联关系 新建项目项目请参考<JPA(二):HellWord工程>,基于上一章讲解的<JPA(五):映射关联关系------映射单向多对一的关联关系>中的例子进 ...

  9. Scala学习四——映射和数组

    一.本章要点 Scala有十分易用的语言来创建,查询和遍历映射 你需要从可变和不可变的映射中做出选择 默认情况下,你得到的是一个哈希映射,不过你也可以指明要树形映射 你可以很容易地在Scala映射和J ...

随机推荐

  1. 简述前后端分离的情况下,Vue实现点击图片下载到本地(并实现IE11浏览器的兼容)

    1.简述 在前后端分离的项目中涉及跨域问题,通常都会使用token进行验证.最近在前后端分离的项目中在一个问题上搞了很久,就是以前下载附件或者导出数据为文件的时候,在以前的那些项目前端可以直接用 wi ...

  2. JS ----- 底层原理

    什么是JS JavaScript是一种基于对象的动态.弱类型脚本语言(简称JS),是一种解释型语言,和其他的编程语言不同,如java/C++等编译型语言,这些语言在代码执行前会进行通篇编译,先编译成字 ...

  3. Maven从入门到精通(二)

    上一篇我们讲解了Maven项目的基本目录结构,也已经安装了Maven的开发环境,接下来我们要重点讲解一下Maven最核心的灵魂pom.xml文件 POM:Project Object Model 项目 ...

  4. show slave status参数详解

    root@localhost (none)>show slave status\G *************************** 1. row ******************** ...

  5. Java Web - 笔记(1)

    1.web.xml Attribute "xmlns:xsi" must be declared for element type "web-app"相关报错解 ...

  6. Integer类的常量池

  7. C++继承中的同名覆盖

    1,父子间的冲突是由继承带来的,两个类之间存在了继承的关系,必然的会带来一 些问题,本文要讨论的是父子之间成员变量或成员函数的命名问题: 2,思考: 1,子类中是否可以定义父类中的同名成员? 1,可以 ...

  8. AtCoder Beginner Contest 077

    A - Rotation Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement You are g ...

  9. Java学习:通过Scanner读取文件

    Scanner不仅能够读取用户的键盘输入,还可以读取文件输入. 需要在创建Scanner对象的时候传入一个File对象作为参数.代码如下: import java.util.Scanner; impo ...

  10. mybatis一对一关联关系映射

    mybatis一对一关联关系映射 在关联关系中,有一对一,一对多,多对多三种关联关系. 一对一关系:在操作上,任意一方引入对方的主键作为外键. 一对多关系:在"多"的一方添加&qu ...