轻量化后的EJB3之二:EntityBean介绍

接上一篇,《轻量化以后的EJB之一:目录》http://saharabear.iteye.com/blog/602438

这一篇,主要介绍EntityBean,又叫做实体Bean.熟悉J2EE1.4的同学可能一听到实体Bean就会想到这个被无数人骂过的落后,过时,不方便的东西应该滚蛋去球的。我也经历过那种日子。我的选择是使用当时并不成熟的IBatis来替代实体Bean。但是,现在不一样了,因为,我们可以说,EntityBean就是普通Java对象,或者叫POJO,并且是映射到数据库表的。这就是POJO,可以被实例化,序列化。

由于这个系列的文章,没有从JavaEE概览开始编写,但EJB只有三种,除了EntityBean,还有Session Bean和MDB,所以不难理解它们的区别。而针对EntityBean,可以这样考虑:EntityBean是用于描述业务中那些比较适合使用名词表达的概念,比如会员,订单。当然,这些概念基本上,都会在数据库或者其他地方,有持久化记录。

在轻量化以后的EJB3里面,EntityBean的概念与JPA是分不开的,关于什么是JPA,可以很容易在网络中查到。而这一篇文章,只打算介绍EntityBean,不打算涉及JPA或者EntityManager的概念。

在轻量化以后的EJB3里面,既有我们熟悉的XML配置文件,又有JDK1.5包括的注解。从使用上来说,我的确受够了曾经使用Spring的配置文件,所以我一直使用注解的方式。其实XML的方式也不复杂,我倾向于,在开发及部署过程中,尽量使用注解的方式,而在部署过程中,如果需要有什么变化,可以使用XML覆盖一下注解。就是说,应用服务器会认为XML的优先级,高于注解。

那么,下面来介绍一个EntityBean需要有那些内容。

再强调一次,EntityBean就是一个普通的POJO,只是添加了一些注解,你甚至不需要实现Serializable接口。

为了让一个类成为EntityBean,你需要使用@Entity @ID这两个注解。只要添加了@Entity的注解,就说明这个类是EntityBean了,而EntityBean最好有一个ID,所以使用@ID这个注解。

下面就来创建一个EntityBean。代码地址是http://code.google.com/p/haulynjasonsample/source/browse/lightejb3/1_0_EntityBeanSample/src/java/net/haulynjason/samplecode/simpleejb/entitybean/User.java

package net.haulynjason.samplecode.simpleejb.entitybean;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 *
 * @author haulyn
 */
@Entity
public class User implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column
    private String username;

    @Column
    private String password;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof User)) {
            return false;
        }
        User other = (User) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "net.haulynjason.samplecode.simpleejb.entitybean.Member[id=" + id + "]";
    }
}
 




上面就是一个完整的EntityBean,包括了主建id,两个基本属性username和password,重写了hashCode(), toString(), equals()三个方法,实现了Serializable接口(非必须)。

通过阅读java doc可以知道,通过@Column可以描述数据表的字段名,而这里一切从简,就不需要了。

这样,就是一个完整的EntityBean了,你可以随意在里面添加方法,比去validate()等等。在例子代码中,还包括了一个单元测试,用于描述在EntityBean中也可以包括业务方法。

单元测试的主要代码如下:

    @Test
    public void testIsValidated() {
        System.out.println("isValidated");
        String username = "";
        String password = "";
        User instance = new User();
        boolean expResult = true;
        boolean result = instance.isValidated(username, password);
        assertEquals(expResult, result);
    }
 


下一章将会专门介绍EntityManager.

你可能感兴趣的:(bean,ibatis,单元测试,ejb,jpa)