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

  • 相关阅读:
    Oracle Instance
    第03章-VTK系统概述(1)
    二叉查找树BST----java实现
    [Golang] 从零開始写Socket Server(2): 自己定义通讯协议
    linux之SQL语句简明教程---LIKE
    spring mvc 入门示例
    MyBatis与Spring集成
    MyBatis 一对一关联查询
    MyBatis CRUD Java POJO操作
    eclipse xml自动提示
  • 原文地址:https://www.cnblogs.com/justdoitba/p/7856700.html
Copyright © 2011-2022 走看看