• 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集合里面把角色移除

  • 相关阅读:
    mac上python3安装HTMLTestRunner
    双目深度估计传统算法流程及OpenCV的编译注意事项
    深度学习梯度反向传播出现Nan值的原因归类
    1394. Find Lucky Integer in an Array
    1399. Count Largest Group
    1200. Minimum Absolute Difference
    999. Available Captures for Rook
    509. Fibonacci Number
    1160. Find Words That Can Be Formed by Characters
    1122. Relative Sort Array
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7856700.html
Copyright © 2020-2023  润新知