Java+HibernateでDAOパターンを実装してみる - その1
2008/10/22 16:36Update
データベースなどの永続性データへのアクセスを行う際、Data Access Object(DAO)パターンを利用すると便利です。本文はサンプルからJava言語でその実装方法について学びます。
Data Access Object(DAO)パターンについて、こちらの記事 を参照してください。
コアJ2EEパターン - Data Access Objectパターン
テーブル:USER(ID, NAME)
エンティティ:User.java
マッピングファイル:User.hbm.xml(略)
DAOインタフェース:IUserDao.java
DAO実装:UserDao.java
■ファイルリスト:
■ソースコード
コアJ2EEパターン - Data Access Objectパターン
サンプル
テーブル:USER(ID, NAME)
エンティティ:User.java
マッピングファイル:User.hbm.xml(略)
DAOインタフェース:IUserDao.java
DAO実装:UserDao.java
■ファイルリスト:
| ファイルリスト | 説明 |
|---|---|
| User.java | エンティティクラス。テーブル<USER>に対応。 |
| User.hbm.xml | Hibernateマッピング設定ファイル。省略。 |
| IUserDao.java | DAOインタフェース。テーブル<USER>をアクセスするためのインタフェース。 |
| UserDao.java | DAO実装クラス。テーブル<USER>をアクセスするためのクラス。 |
| Test.java | テストクラス。 |
| DaoUtils.java | DAOユーティリティクラス。get/update/deleteなど基本的な処理はここで記述する |
■ソースコード
User.java(抜粋)
//persist entity
public class User {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//... setter/getter HERE
}
IUserDao.java(抜粋)
//User Dao interface
public interface IUserDao {
public User get(String pk);
public List getAll();
public String save(User entity);
public void update(User entity);
public void saveOrUpdate(User entity);
public void delete(User entity);
}
UserDao.java
//UserDao Implementation
public class UserDao implements IUserDao {
public User get(String pk) {
return (User)DaoUtils.get(User.class, pk);
}
public List getAll() {
return DaoUtils.getAll(User.class);
}
public String save(User entity) {
return (String)DaoUtils.save(entity);
}
public void update(User entity) {
DaoUtils.update(entity);
}
public void saveOrUpdate(User entity) {
DaoUtils.saveOrUpdate(entity);
}
public void delete(User entity) {
DaoUtils.delete(entity);
}
}
Test.java
public class Test {
public static void main(String[] args) {
IUserDao userDao = new UserDao();
User user = userDao.get("1");
if (user != null) {
System.out.println(user.getName());
}
List<User> userList = userDao.getAll();
for (User u:userList) {
System.out.println(user.getName());
}
}
}
DaoUtils.java
public class DaoUtils {
public static Object get(Class clz, Serializable pk) {
return getSession().get(clz, pk);
}
public static List getAll(Class clz) {
return getSession().createCriteria(clz).list();
}
public static Serializable save(Object entity) {
return getSession().save(entity);
}
public static void update(Object entity) {
getSession().update(entity);
}
public static void saveOrUpdate(Object entity) {
getSession().saveOrUpdate(entity);
}
public static void delete(Object entity) {
getSession().delete(entity);
}
private static Session session;
protected static Session getSession() {
//wrap session in a class such as HibernateUtils, then you can use HibernateUtils.getCurrentSession() for getting a session.
//参考:ThreadLocal でHibernate Session を効率的に管理する
return session;
}
}
Sponsored Link
Comments
- Relative Articles
- Hibernate設定ファイルその1 - hibernate.cfg.xml - (2008/07/09 14:08)
- Hibernate c3p0 - よく利用されているコネクションプーリング - (2008/07/09 15:00)
- Hibernate 方言(Dialect)一覧 - (2008/07/09 15:10)
- Hibernate のSessionとSessionFactory - (2008/07/09 15:51)
- ThreadLocal でHibernate Session を効率的に管理する - (2008/07/09 18:43)
- Hibernateで複数のDBに接続するには? - (2008/07/09 18:47)
- Hibernateとは - (2008/07/11 14:23)
- Hibernate のインストール - (2008/07/24 11:01)
- Hibernate の開発手順 - (2008/07/24 12:44)
- Hibernate SQLをログに出力方法 - (2008/07/30 16:06)