本节主要说明框架中实体类的关系,已经编写实体类的方式
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, 具有了逻辑删除的功能(如何实现后面讲解)
相关推荐
MLDN_J2EE框架_笔记--精华---(包括jsp struts hibernate spring).rar
j2ee-1_4-api
J2EE框架技术Struts-spring-hibernate-JSF全套详细课件.zip
中文版EXPERT-ONE-ON-ONE-J2EE-DEVELOPMENT-WITHOUT-EJB.part2.rar
轻量级J2EE企业应用实战--Struts+Spring+Hibernate整合开发笔记
seasar2\lib\geronimo-j2ee_1.4_spec-1.0.jar 主框架中lib下面的一个文件,由于上传能力太小,只好分开传了
从J2EE的概念说起,到它的优势,到J2EE典型的四层模型,和它的框架结构,最后是J2EE十三 种核心技术的一个简介。本文分门别类的对J2EE中的服务,组件,层次,容器,API都做了比较详细的介绍,相信看完此文,读者会...
J2EE企业级项目开发-1期 03 搭建SSH2开发框架技巧总结.doc 学习资料 复习资料 教学资源
J2EE-1_4-API.chm
J2EE开发环境搭建——安装JDK、Tomcat、Eclipse
深入掌握J2EE技术----多个教程,够你用的。
JAVA编程有很多重复机械代码, 生成器可以帮助解决50%的重复工作...JEECG智能框架可以有效解决信息孤岛问题,生成统一代码、统一规范、统一设计思路,使你能在这个平台上,快速开发出高效高质量代码,缩短项目开发周期。
轻量级J2EE企业应用实战--Struts+Spring+Hibernate整合开发 part2
J2EE-8-2-第8章 JSTL.ppt
资源名称:Java-J2se、J2ee开发全程视频教程和源码(87集)资源目录:【】Java-J2se-J2ee全程教程(01-10)【】Java-J2se-J2ee全程教程(11-20)【】Java-J2se-J2ee全程教程(21-30)【】Java-J2se-J2ee全程教程(31...
一个简单的j2ee开发框架,提供了基本的开发框架,以及一些工具类
中文版EXPERT-ONE-ON-ONE-J2EE-DEVELOPMENT-WITHOUT-EJB.pdf
《轻量级J2EE企业应用实战--Struts+Spring+Hibernate整合开发》图书配套源码part1
j2ee 1.4 doc tutorial
《轻量级J2EE 企业应用实战--Struts+Spring+Hibernate 整合开发》源代码