Hibernate学习笔记(三)


我是从b站视频上学习的hibernate框架,其中有很多和当前版本不符合之处,我在笔记中进行了修改
以下是b站视频地址:
https://www.bilibili.com/video/av14626440

  *表与表之间的关系回顾(一对多) 1)分类与商品,一个分类可以有多个商品,一个商品只能属于一个分类   *表与表之间的关系回顾(多对多) 1)订单与商品,一个订单里面可以有多个商品,一个商品可以属于多个订单   *表与表之间的关系回顾(一对一) 1)在中国,夫妻关系便是一对一的关系     *hibernate一对多的配置 1.映射配置(以客户和联系人为例) 第一步,创建实体类 第二部,让两个实体类之间相互表示 1)在客户实体类里面使用set集合表示多个联系人 2)在联系人是类中表示所属客户 第三步,配置映射文件 一对多 多对一 第四步,配置核心配置文件   2.一对多级联操作 级联操作 1,级联保存 2,级联删除   一对多的级联保存 添加客户,为这个客户添加一个联系人 1)复杂写法 2)简化写法 一般根据客户添加联系人 第一步 在客户的映射文件中配置 在客户映射文件中set标签上进行配置cascade属性   第二步 只需要把联系人添加到客户里面,最终只需要保存客户对象   一对多的级联删除 需求:删除某个客户,把这个客户里面的联系人一并删除 实现: 第一步:在客户的映射文件set标签中进行配置         使用属性cascade属性值delete   第一步:在代码中直接删除客户 1)查询对象,调用session里面的delete方法删除 2)执行过程 1,根据id查询客户 2,根据客户查询联系人 3,将联系人的cid字段设置为null 4,先删除联系人,再删除客户       一对多的修改操作 修改小红所属的客户(持久态自动修改数据库)     inverse属性 因为hibernate双向维护外键,客户和联系人都需要修改外键,修改客户时修改了一次,修改联系人的时候也修改了一次,所以会出现两次update,造成性能问题 解决方式:让其中一方放弃维护外键 一对多里面可以让其中一的那一方放弃外键维护   Hibernate多对多操作 多对多映射配置 以用户和角色为例演示 第一步 创建实体类,用户和角色   第二步 让两个实体类互相表示 1)用户里面表示所有角色,使用set集合 2)一个角色有多个用户,使用set集合   第三步 配置映射关系 1)基本配置 2)配置多对多关系(重点)   发现问题: 第四步 在核心配置文件中引入映射文件   测试:   多对多级联保存 根据用户保存角色 第一步 在用户配置文件中的set标签进行配置,cascade值save-update 第二步 写代码实现 1)创建角色用户对象,把角色放到用户里面,最终保存用户 //添加两个用户,为每个用户添加两个角色        //1,创建对象        User user1 = new User();        user1.setUser_name("lucy");        user1.setUser_password("123");                User user2 = new User();        user2.setUser_name("mary");        user2.setUser_password("456");                        Role r1 = new Role();        r1.setRole_name("总经理");        r1.setRole_memo("总经理");                Role r2 = new Role();        r2.setRole_name("秘书");        r2.setRole_memo("秘书");                Role r3 = new Role();        r3.setRole_name("保安");        r3.setRole_memo("保安");                //2.建立关系,把角色放到用户里面        //user1······r1,r2        //user2······r2,r3        user1.getRoleSet().add(r1);        user1.getRoleSet().add(r2);                user2.getRoleSet().add(r2);        user2.getRoleSet().add(r3);        //3.保存用户        session.save(user1);        session.save(user2);     多对多级联删除(了解) 第一步 在set标签上进行配置,cascade值delete 第二部 删除用户   维护第三张表 1.用户和角色是多对多的关系,维护关系通过维护第三张表 2.让某个用户有某个角色 第一步 现根据id查询出用户和角色 第二部 把角色放到用户里面去 1)把角色对象放到用户的set集合中去 3让某个用户失去某个角色 第一步 现根据id查询出用户和角色 第二步 把角色从set里面去掉