zoukankan      html  css  js  c++  java
  • Hibernate_day03--Hibernate多对多操作

    Hibernate多对多操作

    多对多映射配置

    以用户和角色为例演示

    第一步 创建实体类,用户和角色

    第二步 让两个实体类之间互相表示

    (1)一个用户里面表示所有角色,使用set集合

    具体:

    User.java

    public class User {
          private Integer user_id;//用户id
          private String user_name;//用户名称
          private String user_password;//用户密码
          //一个用户可以有多个角色
          private Set<Role> setRole = new HashSet<Role>();
        public Set<Role> getSetRole() {
            return setRole;
        }
        public void setSetRole(Set<Role> setRole) {
            this.setRole = setRole;
        }
        public Integer getUser_id() {
            return user_id;
        }
        public void setUser_id(Integer 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;
        }
    }

    (2)一个角色有多个用户,使用set集合

    具体:

    Role.java

    public class Role {
          private Integer role_id;//角色id
          private String role_name;//角色名称
          private String role_memo;//角色描述
          // 一个角色有多个用户
          private Set<User> setUser = new HashSet<User>();
        public Set<User> getSetUser() {
            return setUser;
        }
        public void setSetUser(Set<User> setUser) {
            this.setUser = setUser;
        }
        public Integer getRole_id() {
            return role_id;
        }
        public void setRole_id(Integer role_id) {
            this.role_id = role_id;
        }
        public String getRole_name() {
            return role_name;
        }
        public void setRole_name(String role_name) {
            this.role_name = role_name;
        }
        public String getRole_memo() {
            return role_memo;
        }
        public void setRole_memo(String role_memo) {
            this.role_memo = role_memo;
        }
    }

    第三步 配置映射关系

    (1)基本配置

    User.hbm.xml

    <hibernate-mapping>
        <!-- 1 配置类和表对应 
            class标签
            name属性:实体类全路径
            table属性:数据库表名称
        -->
        <class name="cn.itcast.manytomany.User" table="t_user">
            <id name="user_id" column="user_id">
                <generator class="native"></generator>
            </id>
            <property name="user_name" column="user_name"></property>
            <property name="user_password" column="user_password"></property>
        </class>
    </hibernate-mapping>

    Role.hbm,xml

    <hibernate-mapping>
        <!-- 1 配置类和表对应 
            class标签
            name属性:实体类全路径
            table属性:数据库表名称
        -->
        <class name="cn.itcast.manytomany.Role" table="t_role">
            <id name="role_id" column="role_id">
                <generator class="native"></generator>
            </id>
            <property name="role_name" column="role_name"></property>
            <property name="role_memo" column="role_memo"></property>
        </class>
    </hibernate-mapping>


    (2)配置多对多关系

    - 在用户里面表示所有角色,使用set标签

    User,hbm.xml

    - 在角色里面表示所有用户,使用set标签

    Role.hbm.xml

    第四步 在核心配置文件中引入映射文件

    测试:

    运行测试类

    public class HibernateUtils {
        static Configuration cfg = null;
        static SessionFactory sessionFactory = null;
        //静态代码块实现
        static {
            //加载核心配置文件
            cfg = new Configuration().configure();
            sessionFactory = cfg.buildSessionFactory();
        }
        //提供返回与本地线程绑定的session方法
        public static Session getSessionObject() {
            return sessionFactory.getCurrentSession();
        }
        // 提供方法返回sessionFactory
        public static SessionFactory getSessionFactory() {
            return sessionFactory;
        }
        public static void main(String[] args) {
        }
    }

    多对多级联保存

    根据用户保存角色

    第一步 在用户配置文件中set标签进行配置,cascade值save-update,就不用另外保存角色了

    第二步 写代码实现

    (1)创建用户和角色对象,把角色放到用户里面,最终保存用户就可以了

    public class HibernateManytoMany {
        //演示多对多级联保存
        @Test
        public void testSave() {
            SessionFactory sessionFactory = null;
            Session session = null;
            Transaction tx = null;
            try{
                sessionFactory = HibernateUtils.getSessionFactory();
                //与本地线程绑定的session
                session = sessionFactory.openSession();
                //开启事务
                tx = session.beginTransaction();
                //1 添加两个用户,为每个用户添加两个角色
                User user1 = new User();
                user1.setUser_name("mary");
                user1.setUser_password("123");
                User user2 = new User();
                user2.setUser_name("lucy");
                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.getSetRole().add(r1);
                user1.getSetRole().add(r2);
                user2.getSetRole().add(r2);
                user2.getSetRole().add(r3);
                //3 保存用户
                session.save(user1);
                session.save(user2);
                //提交事务
                tx.commit();
            }catch(Exception e) {
                e.printStackTrace();
                tx.rollback();
            }finally {
                session.close();
                sessionFactory.close();
            }
        }
    }

    多对多级联删除(了解)

    第一步 在set标签进行配置,cascade值delete

    第二步 删除用户

    维护第三张表关系

    1 用户和角色多对多关系,维护关系通过第三张表维护

    2 让某个用户有某个角色

    第一步 根据id查询用户和角色

    第二步 把角色放到用户里面

    (1)把角色对象放到用户set集合

    3 让某个用户没有某个角色

    第一步 根据id查询用户和角色

    第二步 从用户里面把角色去掉

    (1)从set集合里面把角色移除

  • 相关阅读:
    算法竞赛入门经典习题2-3 韩信点兵
    ios入门之c语言篇——基本函数——5——素数判断
    ios入门之c语言篇——基本函数——4——数值交换函数
    144. Binary Tree Preorder Traversal
    143. Reorder List
    142. Linked List Cycle II
    139. Word Break
    138. Copy List with Random Pointer
    137. Single Number II
    135. Candy
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7856700.html
Copyright © 2011-2022 走看看