建议做法如下:
第一,写一个符合javaBean标准的实体类,类的属性名称和类型分别与数据库的字段对应,并加上无参构造方法和get、set方法;
第二,使用注解配置映射关系,用@Entity注解该类是一个实体类,用@Table(name = "表名")注解该实体类映射的表名,通过在每一个属性的get方法上添加@Column(name = "列名")注解该属性映射的列;
第三,配置主键,找出表主键映射的那个属性,用@Id在该属性的get方法上注解该属性为Id。(根据具体需要,可能还要做一些更详细的配置)
参考代码如下:
import javax.persistence.Columnimport javax.persistence.Entity
import javax.persistence.Id
import javax.persistence.Table
import org.hibernate.annotations.Parameter
/**
*
* 用户
*/
@Entity //说明该类是实体类
@Table(name = "USER")//说明该类映射的是表USER
public class TUser implements java.io.Serializable {
private String userID // 用户id
private String userName // 用户名称
private String loginName // 登录名称
private String password // 密码
private Integer status // 状态
private java.util.Date lastLoginTime // 上次登录时间
private java.util.Date regTime // 注册时间
@Id//说明该属性映射的是表USER的主键
@Column(name = "UserID", unique = true, nullable = false)
//该属性映射的是表USER的UserId字段,非空且唯一
public String getUserID() {
return this.userID
}
public void setUserID(String userID) {
this.userID = userID
}
@Column(name = "UserName")
public String getUserName() {
return userName
}
public void setUserName(String userName) {
this.userName = userName
}
@Column(name = "LoginName")
public String getLoginName() {
return this.loginName
}
public void setLoginName(String loginName) {
this.loginName = loginName
}
@Column(name = "Password")
public String getPassword() {
return this.password
}
public void setPassword(String password) {
this.password = password
}
@Column(name = "Status")
public Integer getStatus() {
return status
}
public void setStatus(Integer status) {
this.status = status
}
@Column(name = "LastLoginTime")
public java.util.Date getLastLoginTime() {
return lastLoginTime
}
public void setLastLoginTime(java.util.Date lastLoginTime) {
this.lastLoginTime = lastLoginTime
}
@Column(name = "RegTime")
public java.util.Date getRegTime() {
return regTime
}
public void setRegTime(java.util.Date regTime) {
this.regTime = regTime
}
@Override
public int hashCode() {
int prime = 0
prime += this.getUserID().hashCode()
return prime
}
@Override
public boolean equals(Object obj) {
boolean isEquals = false
if (obj != null && this.getClass() == obj.getClass()) {
TUser clazz = (TUser) obj
if (clazz.getUserID().equals(this.getUserID()))
isEquals = true
return isEquals
}
return isEquals
}
}
继承关系的映射策略有三种:① 每个继承结构一张表(table per class hierarchy),不管多少个子类都用一张表。
② 每个子类一张表(table per subclass),公共信息放一张表,特有信息放单独的表。
③ 每个具体类一张表(table per concrete class),有多少个子类就有多少张表。
第一种方式属于单表策略,其优点在于查询子类对象的时候无需表连接,查询速度快,适合多态查询;缺点是可能导致表很大。后两种方式属于多表策略,其优点在于数据存储紧凑,其缺点是需要进行连接查询,不适合多态查询。