2019年9月18日 星期三

以Hibernate設計進行DAO處理資料(未實做設計模式)


先前做過了JDBC的DAO(Data Access Object),現在要改以Hibernate實作DAO,該如何更改呢?



以建築物當例子,思考邏輯如下:

1. 先產生建構子,給定Session初始化。

2. 再寫getSession方法獲得session。

3. 後寫CRUD,注意CRUD方法的傳回型別是bean或是boolean。

eg.
public class BuildingDAO {

private Session session;

public BuildingDAO(Session session) {
this.session = session;
}

public Session getSession() {
return session;
}

// 新增
public BuildingBean insert(BuildingBean bean) {
// 以getSession().get取得傳入bean中的id並查詢(get方法)
BuildingBean building = getSession().get(BuildingBean.class, bean.getBuildingid());
// 如果結果為空值則新增並回傳
if (building == null) {
getSession().save(bean);
return bean;
}
// 如果已有資料則不新增
return null;
}

// 查詢單筆
public BuildingBean select(int buildingId) {
// 以getSession().get取得傳入bean中的id並查詢(get方法)
return getSession().get(BuildingBean.class, buildingId);
}

// 查詢全部
@SuppressWarnings("unchecked")
public List<BuildingBean> selectAll() {
// Query query = session.createQuery("from BuildingBean");
// return (List<BuildingBean>) query.list();
//以createQuery()取得多筆資料的動態陣列並強制轉型
return (List<BuildingBean>) session.createQuery("from BuildingBean").list();
}

// 修改
public BuildingBean update(int buildingId, String buildingName) {
// 以getSession().get取得傳入bean中的id並查詢(get方法)
BuildingBean building = getSession().get(BuildingBean.class, buildingId);
//如果結果有資料則更新名稱並回傳
if(building!=null) {
building.setBuildingname(buildingName);
return building;
}
//如果結果為空值則回傳null
return null;
}

//刪除
public boolean delete(int buildingId) {
// 以getSession().get取得傳入bean中的id並查詢(get方法)
BuildingBean building = getSession().get(BuildingBean.class, buildingId);
//如果結果有資料則刪除並回傳成功
if(building!=null) {
getSession().delete(building);
return true;
}
//如果沒資料則回傳失敗
return false;
}
}


以上,同行見笑,
如有任何指教請不吝留言告知,謝謝。

沒有留言:

張貼留言

無暇的程式碼(Clean code)金句

The only valid measurement of code quality: WTFs/minute.