zoukankan      html  css  js  c++  java
  • 《Java从入门到放弃》入门篇:hibernate中的多表对应关系

    hibernate中的对应关系其实就是数据库中表的对应关系,

    就跟某些电影中的某些场景是一样一样滴。

    比如可以是一男一女,还可以是一男多女,

    更可以是多男一女,最后最后最后还可以是多男多女!!!

    j_0040.gif

    有些不纯洁的看官肯定已经开始想歪了吧···,我还是上图吧!请看下图

    wKioL1mWqsDitpk7AAXuWbYevXs133.png

    我说滴是这样滴一群人打群架滴场景,嘿嘿嘿···

    好吧,进入正题!!!j_0029.gif

    数据库中表与表之间的数据映射关系有一对一,一对多,多对一,多对多。例如:

    一个身份证只能对应一个护照,一个护照也只能对应一个身份证,这就是一对一的关系

    一个男人可以有多个孩子,这多个孩子只能对应一个爹,从男人的角度这就是一对多的关系,而从孩子的角度,那就是多对一的关系

    一个用户可以买多件不同的商品,而某个商品也可以被多个用户购买,这就是多对多的关系,一般多对多的关系,我们会再创建一个关系表来保存这种关联,所以最后这三张表的关系就会变成两个一对多的关系。

    如果有不清楚的小伙伴,建议先学习一下数据库再来继续。

    在实际开发中,用得最多的就是一对多和多对一,今天我们就来说说在hibernate中如何还配置这两种关系。

    一、一对多映射关系

    我这儿举的例子是个简化版的博客数据库,里面有三张表,分别是:作者表、博客表、评论表。

    wKiom1mWriGTwozqAABXRkNB7Is272.png

    wKioL1mWrh7S4j5VAACII-K9O2o782.png

    wKiom1mWriKwFnTHAAAd47JNMNE737.png

    因为是入门篇哈,所以表的结构进行了简化,对应关系就是:一个作者可以有多个博客,一个博客可以有多个评论。

    现在我们要实现这个一个需求:查询作者,并且同时查询出他的所有博客。

    1.1) 首先,使用DBBrowser来生成作者表和博客表对应的实体类和映射文件。

    wKiom1mWrzDCjxAzAADVuGaiHHg403.png

        注意勾选下面的a<-b,因为我是在author表上点的右键来生成,勾上这个选项就表示所有引用了author表的外键表都会关联生成。

    生成的author实体类就会多出一个SET集合。

    wKiom1mWsBOzGHAeAABJ5mKGYaw607.png

    我们手工把它改成泛型集合。

    author的映射文件中也会多出一个SET标签。

    wKioL1mWsKvCmbEkAABKTwmu5ss109.png

     

    1.2)这儿我们先不做修改,然后在Test类中编写测试代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class Test {
        public static void main(String[] args) {
     
            Session session = HibernateSessionFactory.getSession();
     
            Author author = (Author)session.get(Author.class1);
            System.out.println("看SQL语句是在我之前还是之后!");
            System.out.println("作者:"+author.getUsername());
            //遍历该作者的所有博客
            for (Blog blog : author.getBlogs()) {
                System.out.println("博客:"+blog.getTitle());
            }
             
            HibernateSessionFactory.closeSession();
        }
    }

    可以看到运行后的结果如下所示:

    wKiom1mWsdPRxrhUAABzDRDxOgw448.png

    从上面可以看到,虽然我们只是get了一个author对象,但在使用它内部的blog对象时,hibernate会自动去查询该作者的所有博客,是不是非常方便,比我们自己写JDBC的代码要简单很多了吧!!!j_0028.gif

    马上要回家了,今天先讲到这儿吧·,看官们自己还有时间的话,可以再试试多对一的映射,如果都没问题的话,后面还有几个属性要简单介绍一下的:lazy、cascade、not-null、inverse。

    好了,今天就到这儿吧!j_0042.gif

  • 相关阅读:
    Ajax基础:3.Json
    Head First Design Patterns State Pattern
    Head First Design Patterns Template Method Pattern
    Articles For CSS Related
    Head First Design Patterns Decorator Pattern
    代码审查工具
    How To Be More Active In A Group
    Head First Design Patterns Factory Method Pattern
    Head First Design Patterns Composite Pattern
    Tech Articles
  • 原文地址:https://www.cnblogs.com/yixueyuan/p/7390929.html
Copyright © 2011-2022 走看看