專案結構概覽
src/
├─ com.entity.Student # 實體類
├─ com.entity.Student.hbm.xml # 映射文件
├─ hibernate.cfg.xml # 主配置
├─ com.util.Hibernate_Util # Session 工具
├─ com.page.Page # 分頁模型
├─ com.dao / impl # 數據訪問層
├─ com.service / impl # 業務邏輯層
├─ com.servlet.* # 控制器
└─ webapp/*.jsp # 視圖頁面
核心配置片段
hibernate.cfg.xml
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orcl</property>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<mapping resource="com/entity/Student.hbm.xml"/>
Student.hbm.xml
<class name="com.entity.Student" table="STUDENT">
<id name="sid" column="SID">
<generator class="sequence"><param name="sequence">SEQ_STUDENT</param></generator>
</id>
<property name="sname" column="SNAME"/>
<property name="password" column="PASSWORD"/>
<property name="sex" column="SEX"/>
<property name="cid" column="CID"/>
</class>
分頁查詢實現
// DAO
public List findPage(Page page) {
Session s = Hibernate_Util.getSession();
Query q = s.createQuery("from Student");
q.setFirstResult(page.getStartRow());
q.setMaxResults(page.getPageSize());
List list = q.list();
Hibernate_Util.closeSession();
return list;
}
public int getTotalCount() {
Session s = Hibernate_Util.getSession();
Long count = (Long) s.createQuery("select count(*) from Student").uniqueResult();
Hibernate_Util.closeSession();
return count.intValue();
}
Servlet 返回 JSON (Jackson)
ObjectMapper om = new ObjectMapper();
String json = om.writeValueAsString(list);
String pageJson = om.writeValueAsString(page);
out.print("{\"page\":" + pageJson + ",\"list\":" + json + "}");
JSP 分頁標籤
<c:forEach var="stu" items="${list}" varStatus="s">
<tr><td>${stu.sid}</td><td>${stu.sname}</td><td>${stu.sex}</td>
<td><a href="FindByIdSerlvet?sid=${stu.sid}">修改</a> ...</td></tr>
</c:forEach>
<a href="FindAllServlet?pageNo=1">首頁</a>
<c:choose><c:when test="${page.pageno gt 1}"><a href="...pageNo=${page.pageno-1}">上一頁</a></c:when>...</c:choose>