`
确实比较男
  • 浏览: 112385 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

J2EE开发框架搭建(4) - 实体类编写

阅读更多

本节主要说明框架中实体类的关系,已经编写实体类的方式

1. 框架中实体类的目录结构

2. 打开AbstractEntity查看代码:

 

package com.hqhop.framework.common.entity;

import java.io.Serializable;

/**
 * 抽象实体基类,如果主键是数据库端自动生成
 */
public abstract class AbstractEntity<ID extends Serializable> implements Serializable {
	public abstract ID getId();
	public abstract void setId(final ID id);
	public boolean isNew() {
		return null == getId();
	}
	@Override
	public boolean equals(Object obj) {
		if (null == obj) {
			return false;
		}
		if (this == obj) {
			return true;
		}
		if (!getClass().equals(obj.getClass())) {
			return false;
		}
		AbstractEntity<?> that = (AbstractEntity<?>) obj;
		return null == this.getId() ? false : this.getId().equals(that.getId());
	}

	@Override
	public int hashCode() {
		int hashCode = 17;
		hashCode += null == getId() ? 0 : getId().hashCode() * 31;
		return hashCode;
	}
}

这类重写了equals,hashCode方法,通过实体类的id值来判断两个实体是否相等;AbstractEntity有一个泛型ID, 这个ID表示实体类id的类型;接下来看下AbstractEntity的实现类:

 

 

<pre name="code" class="java">@MappedSuperclass
public abstract class BaseEntity extends AbstractEntity<String> {

	@Id
	@GeneratedValue(generator = "uuidGen")
	@GenericGenerator(name = "uuidGen", strategy = "uuid")
	private String id;

	@Override
	public String getId() {
		return id;
	}

	@Override
	public void setId(String id) {
		this.id = id;
	}
}

在BaseEntity中配置了Id的生成策略,我这里使用的是uuid,所以在类声明的时候指定了AbstractEntity的ID为String , 这里的@MappedSuperclass也是必须的 ,否则在hibernate自动建表的时候会有问题

3. 接下来再看下实现逻辑删除的接口LogicDeleteable(也就是说我们不从数据库中删除数据,只是把数据标示为删除),类似的还提供了Movable(调整数据排序的接口),Stateable(状态接口),Treeable(树行结构,如:菜单)

 

package com.hqhop.framework.common.entity;

/**
 * 实体实现该接口表示想要逻辑删除 为了简化开发 约定删除标识列名为deleted
 */
public interface LogicDeleteable {
	public Boolean getDeleted();
	public void setDeleted(Boolean deleted);
	/**
	 * 标识为已删除
	 */
	public void markDeleted();
}

4. 如何使用这些基本的接口、实体类,建立User实体类:

package com.hqhop.framework.shiro.entity;

// import ....

@Entity
@DynamicUpdate(true)
@DynamicInsert(true)
@Table(name = "t_base_user")
public class User <span style="color:#ff0000;">extends BaseEntity implements LogicDeleteable</span> {
	private String name;
	private String password;
	private int age;
	private int sex;
	private String identityCard;
	private String phoneNum;
	/**
	 * 职工号
	 */
	private String empNum;
	<span style="color:#ff0000;">/**
	 * 逻辑删除flag
	 */
	private Boolean deleted = Boolean.FALSE;</span>
	/**
	 * 系统用户的状态
	 */
	@Enumerated(EnumType.STRING)
	private UserStatus status = UserStatus.normal;

	@Column(name = "department_id")
	private String departmentId;

	<span style="color:#ff0000;">@Override
	public Boolean getDeleted() {
		return this.deleted;
	}
	@Override
	public void setDeleted(Boolean deleted) {
		this.deleted = deleted;
	}
	@Override
	public void markDeleted() {
		this.deleted = Boolean.TRUE;
	}</span>
	//get set ....

}

这样User 就已经有id的属性了,生成策略为uuid, 具有了逻辑删除的功能(如何实现后面讲解)


 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics