| |
generic data access objects
普通数据访问对象,这个是hibernate官方网站上面的一个dao类的设计模式,基于jdk5.0范型支持,文章地址如下:
http://www.hibernate.org/328.html
我下面的代码与hibernate官网上提供的有点不同。
首先定义dao类的接口igenericdao,该接口定义了共同的crud操作:
java 代码
-
-
-
-
- public interface igenericdao 〈t, id extends serializable〉
- {
-
- public t findbyid(id id);
-
-
- t findbyid(id id, boolean lock);
-
-
- list findall();
-
-
- list findbyexample(t exampleinstance);
-
-
- t makepersistent(t entity);
-
-
- void maketransient(t entity);
- }
下面是使用hibernate针对该接口的实现genericdaohibernate:
java 代码
-
-
-
-
-
-
-
- public abstract class genericdaohibernate 〈t,id extends serializable, daoimpl extends igenericdao〈t,id〉〉
- implements igenericdao〈t,id〉
- {
- private class persistentclass;
-
- protected session session;
-
- public genericdaohibernate()
- {
- this.persistentclass = (class) ((parameterizedtype) getclass()
- .getgenericsuperclass()).getactualtypearguments()[0];
- }
-
- @suppresswarnings("unchecked")
- public daoimpl setsession(session s)
- {
- this.session = s;
- return (daoimpl)this;
- }
-
- protected session getsession()
- {
- if (session == null)
- throw new illegalstateexception(
- "session has not been set on dao before usage");
- return session;
- }
-
- public class getpersistentclass()
- {
- return persistentclass;
- }
-
-
- @suppresswarnings("unchecked")
- public t findbyid(id id)
- {
- return (t) getsession().load(getpersistentclass(), id);
- }
-
- @suppresswarnings("unchecked")
- public t findbyid(id id, boolean lock)
- {
- t entity;
- if (lock)
- entity = (t) getsession().load(getpersistentclass(), id, lockmode.upgrade);
- else
- entity = findbyid(id);
-
- return entity;
- }
-
- @suppresswarnings("unchecked")
- public list findall()
- {
- return findbycriteria();
- }
-
- @suppresswarnings("unchecked")
- public list findbyexample(t exampleinstance)
- {
- criteria crit = getsession().createcriteria(getpersistentclass());
- example example = example.create(exampleinstance);
- crit.add(example);
- return crit.list();
- }
-
- @suppresswarnings("unchecked")
- public list findbyexample(t exampleinstance, string[] excludeproperty)
- {
- criteria crit = getsession().createcriteria(getpersistentclass());
- example example = example.create(exampleinstance);
- for (string exclude : excludeproperty)
- {
- example.excludeproperty(exclude);
- }
- crit.add(example);
- return crit.list();
- }
-
- @suppresswarnings("unchecked")
- public t makepersistent(t entity)
- {
- getsession().saveorupdate(entity);
-
- return entity;
- }
-
- public void maketransient(t entity)
- {
- getsession().delete(entity);
- }
-
- @suppresswarnings("unchecked")
- protected list findbycriteria(criterion... criterion)
- {
- criteria crit = getsession().createcriteria(getpersistentclass());
- for (criterion c : criterion)
- {
- crit.add(c);
- }
- return crit.list();
- }
-
- @suppresswarnings("unchecked")
-
-
-
- protected list findbycriteria(order order,criterion... criterion)
- {
- criteria crit = getsession().createcriteria(getpersistentclass());
- for (criterion c : criterion)
- {
- crit.add(c);
- }
- if(order!=null)
- crit.addorder(order);
- return crit.list();
- }
-
- @suppresswarnings("unchecked")
- protected list findbycriteria(int firstresult,int rowcount,order order,criterion... criterion)
- {
- criteria crit = getsession().createcriteria(getpersistentclass());
- for (criterion c : criterion)
- {
- crit.add(c);
- }
- if(order!=null)
- crit.addorder(order);
- crit.setfirstresult(firstresult);
- crit.setmaxresults(rowcount);
- return crit.list();
- }
- }
这样,我们自己所要使用的dao类,就可以直接从这个hibernate的dao类继承:
比如说我们定义一个iuserdao接口,该接口继承igenericdao:
java 代码
- public interface iuserdao extends igenericdao〈user,integer〉
- {
- public user find(string username,string password);
- public user find(string username);
- }
该接口从igenericdao继承,自然也就定义了igenericdao接口所定义的通用crud操作。
再来看一下针对iuserdao 的hibernate实现userdaohibernate:
java 代码
- public class userdaohibernate extends genericdaohibernate〈user,integer,iuserdao〉 implements iuserdao {
-
- public user find(string username, string password) {
-
- }
-
- public user find(string username) {
-
- }
- }
userdaohibernate继承genericdaohibernate并实现iuserdao接口,这样,我们的userdaohibernate既拥有通用的crud操作,也实现了针对用户的特定的业务操作。
说明 :由于范型的符号经过在线编辑器发布后,被过滤掉了,所以上面修改后的几个符号,都是我在中文状态下输入的。 |
|