美文网首页
12.hibernate组件映射(component映射)

12.hibernate组件映射(component映射)

作者: arkulo | 来源:发表于2017-07-23 21:42 被阅读28次

    导读

    • 什么是组件映射
    • 代码

    什么是组件映射

    多个实体类有可能会有共同的一些属性,如果把这些属性单独的拿出来,形成一个类,所有需要的实体类直接包含它就可以,这样能简化代码。

    1. 组件类不会形成单独的数据表结构
    2. 组件类的属性,会在调用它的实体类表结构中被创建
    image.png

    代码

    User.java

        package entity;
        
        public class User {
            private int id;
            private String name;
            private String phone;
            private UserExtra user_extra;
            public UserExtra getUser_extra() {
                return user_extra;
            }
            public void setUser_extra(UserExtra user_extra) {
                this.user_extra = user_extra;
            }
            public int getId() {
                return id;
            }
            public void setId(int id) {
                this.id = id;
            }
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public String getPhone() {
                return phone;
            }
            public void setPhone(String phone) {
                this.phone = phone;
            }
            
            
        }
    

    UserExtra.java

        package entity;
        
        public class UserExtra {
            private int sex;
            private String address;
            public int getSex() {
                return sex;
            }
            public void setSex(int sex) {
                this.sex = sex;
            }
            public String getAddress() {
                return address;
            }
            public void setAddress(String address) {
                this.address = address;
            }   
        }
    

    User.hbm.xml

        <?xml version="1.0"?>
        <!DOCTYPE hibernate-mapping PUBLIC 
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
        <hibernate-mapping package="entity">
            <class name="entity.User">
                <id name="id">
                    <generator class="native"/>
                </id>
                <property name="name"></property>
                <property name="phone"></property>
                <!-- 组件是实体类的一部分,但是不会生成独立的数据表 -->
                <!-- 组件的属性会进入到User数据表中 -->
                <component name="user_extra">
                    <property name="sex"></property>
                    <property name="address"></property>
                </component>
            </class>    
        </hibernate-mapping>
    

    单元测试

        package entity;
        
        import org.hibernate.classic.Session;
        
        import junit.framework.TestCase;
        import util.hibernateUtil;
        
        /**
         * 目标:测试组件映射方式
         * 注意:组件是一个实体类,其中包含了一些公共的属性,在做映射关系的时候,组件是不生成表的。
         *      但是数据表结构中包含组件属性,也就是User表中包含UserExtra类中的属性
         * @author arkulo
         *
         */
        
        public class TestDemo extends TestCase {
        
            //数据添加  
            public void test1(){
                Session session = null;
                try
                {
                    session = hibernateUtil.getSession();
                    session.beginTransaction();
                    
                    User user = new User();
                    user.setName("乐迪");
                    user.setPhone("18500112233");
                    
                    UserExtra extra = new UserExtra();
                    extra.setSex(1);
                    extra.setAddress("大兴区枣园路");
                    
                    user.setUser_extra(extra);
                    
                    session.save(user);
                    session.getTransaction().commit();
                }catch(Exception e)
                {
                    e.printStackTrace();
                    session.getTransaction().rollback();
                }finally
                {
                    hibernateUtil.closeSession(session);
                }
            }
            
            
        //  读数据,
            public void test2()
            {
                Session session = null;
                try {
                    session = hibernateUtil.getSession();
                    session.beginTransaction();
                    
                    User user = (User)session.load(User.class, 1);
                    System.out.println("用户名:"+user.getName());
                    System.out.println("地址:"+user.getUser_extra().getAddress());
                    
                    session.getTransaction().commit();
                }catch(Exception e){
                    e.printStackTrace();
                    session.getTransaction().rollback();
                } finally {
                    hibernateUtil.closeSession(session);
                }
                
            }
            
        }
    

    相关文章

      网友评论

          本文标题:12.hibernate组件映射(component映射)

          本文链接:https://www.haomeiwen.com/subject/itlbqxtx.html