细粒度对象模型

在Hibernate的世界中,术语"fine-grained object model",大致意思就是"适当的细粒度对象模型",这句是抄来的..英文不好..见谅啊..
所谓的"细粒度对象模型"是指在业务模型的对象上加以细分,得到更多的业务模型对象,说白了就是就把一个对象分成几个对象
对hibernate而言,主要是针对实体类设计的对象细分,对象的细分主要出于两种目的
1.面向设计的粒度细分
         通过对象的细化,实现更加清晰的系统逻辑
2.面向性能的粒度细分
         针对业务逻辑,通过合理的细粒度对象,提高系统的能耗比(性能/资源消耗)
我们还是来看代码比较亲切
首先我们有张Person的表
CREATE TABLE person
(
    id int not null primary key ,
    firstname varchar(20) not null ,
    lastname varchar(20) not null ,
    address varchar(20) not null ,
    zipcode varchar(6) not null ,
    tel varchar(20)
) ;
commit;
从上面看..我们是不是可以把person表分成3块:id,name,contact;
Name --> firstname,lastname
Contact --> address,zipcode,tel
那么我们首先得有个Name的POJO类,他下面有firstname,lastname这两个属性,
private String firstname;
private String lastname;
然后我们再创建Contact的POJO类,他下面有 address,zipcode,tel这三个属性
private String address;
private String zipcode;
private String tel;
然后就是我们的Person类了,他有id,Name,Contact这三个属性
private int id;
private Name name;
private Contact contact;



要对对象的细分..在hibernate可以借助Component来完成

Component在hibernate的语义中是,是将某个逻辑对象中的一个逻辑组成称为一个Component
Component与实体对象的根本差别,就在于Component没有标识(identity),他做为一个逻辑组成,完全从属于实体对象

Person.hbm.xml
<class name="org.luna.hibernate.demo.Person" table="PERSON"
    schema="SCOTT">
    <id name="id" type="int">
     <column name="ID" precision="22" scale="0" />
     <generator class="assigned" />
    </id>

<!--    这里是Name-->
    <component name="name" class="org.luna.hibernate.demo.Name">
     <property name="firstname" type="java.lang.String">
      <column name="FIRSTNAME" length="20" not-null="true" />
     </property>
     <property name="lastname" type="java.lang.String">
      <column name="LASTNAME" length="20" not-null="true" />
     </property>
    </component>


    <!--    这里是contact-->
    <component name="contact"
     class="org.luna.hibernate.demo.Contact">
     <property name="address" type="java.lang.String">
      <column name="ADDRESS" length="20" not-null="true" />
     </property>
     <property name="zipcode" type="java.lang.String">
      <column name="ZIPCODE" length="20" not-null="true" />
     </property>
     <property name="tel" type="java.lang.String">
      <column name="TEL" length="20" />
     </property>
    </component>
  
</class>


然后我们写一个类

PersonOperate.java

public class PersonOperate {
private Session session = null;
public PersonOperate(){
    session = new Configuration().configure().buildSessionFactory().openSession();
}

public void insert(Person p){
    session.save(p);
    session.beginTransaction().commit();
}

public List queryAll(){
    List l = null;
    String hql = "FROM Person as p";
    l = session.createQuery(hql).list();
    return l;
}
}


在上面我们有插入和查询全部,然后我们通过一个Test类测试一下吧
public class Test {
public static void main(String[] args) {
//    这里是插入的代码
//    PersonOperate po = new PersonOperate();
//    Person person = new Person();
//    Name name = new Name();
//    Contact contact = new Contact();
//  
//    name.setFirstname("Stone");
//    name.setLastname("Luna");
//  
//    contact.setAddress("Luna_Kiss_Moon");
//    contact.setZipcode("100000");
//    contact.setTel("123123");
//  
//    person.setName(name);
//    person.setContact(contact);
//    person.setId(1);
//  
//    po.insert(person);

//查询所以数据并打印到控制台
    PersonOperate po = new PersonOperate();
    List l = po.queryAll();
    Iterator iterator = l.iterator();
    while(iterator.hasNext()){
     Person p = (Person)iterator.next();
     System.out.println("ID -->" + p.getId());
     System.out.println("FIRSTNAME -->" + p.getName().getFirstname());
     System.out.println("LASTNAME -->" + p.getName().getLastname());
     System.out.println("ADDRESS -->" + p.getContact().getAddress());
     System.out.println("ZIPCODE -->" + p.getContact().getZipcode());
     System.out.println("TEL -->" + p.getContact().getTel());
    }

}


从上面的代码中可以看出,我们在hibernate中完成了对表的对象的细分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值