实体层
包是main.java.com.domain
父类
-- BaseDomain.java
import java.io.Serializable;
import org.apache.commons.lang3.builder.ToStringBuilder;
// 实现Serializable接口,以便JVM序列化实体对象
public class BaseDomain implements Serializable
{
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
具体的子类(注意Hibernate JPA注解):
-- Board.java
package main.java.com.domain;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name = "t_board")
public class Board extends BaseDomain {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "board_id")
private int boardId;
@Column(name = "board_name")
private String boardName;
@Column(name = "board_desc")
private String boardDesc;
// 包含的话题的数目
@Column(name = "topic_num")
private int topicNum ;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "manBoards", fetch = FetchType.LAZY)
private Set<User> users = new HashSet<User>();
// get set
}
问:是否需要对应的 .hbm.xml?自动生成的也不准。
持久层dao
在main.java.com.dao包下。
父类 BaseDao.java提供一些通用性的方法。
翻页 Page.java
例: BoardDao.java
import java.util.Iterator;
import org.springframework.stereotype.Repository;
import main.java.com.domain.Board;
@Repository
public class BoardDao extends BaseDao<Board>{
protected final String GET_BOARD_NUM = "select count(f.boardId) from Board f";
public long getBoardNum() {
Iterator iter = getHibernateTemplate().iterate(GET_BOARD_NUM);
return ((Long)iter.next());
}
}
对dao层的配置文件 baobaotao-dao.xml
服务层
写了两个UserService 和ForumService