创建一个可以处理所有类型的CRUD操作的类。 每次我需要做CRUD时都不需要创建SessionFactory或Session对象

我想在java中创建一个可以与Hibernate配置交互的方法,并将某些操作识别为ENUM(例如:读取,更新,添加,删除等)

方法参数应该是(枚举操作,类DTO,NamedQuery namedquery,DTOObject Object_to_persist,param(任何额外参数))。

方法应该是方便的,我可以通过传递实际参数(Operation.read,USERDTO.class,namedquery,USERDTO obj_UserDTO,HashMap hmapData)随时调用它。

/* Enum Defined Operation done to the database. */ public enum Operations {READ,UPDATE,ADD,DELETE}; /*Centralized Method Defination for Basic CRUD Operation */ public T DatabaseCRUDOperations((Operation.READ,USERDTO.class , namedquery , USERDTO obj_UserDTO , HashMap hmapid){ switch(Operation opts){ case Operation.Read : //Call Read Method break; case Operation.UPDATE: //call Update Method break; ...... ...... default://call any Error Method or set error } } 

基本上我想定义一个自定义类(一种项目的内部框架),其中所有基本的CRUD操作都应该只通过这个类来完成。 无需创建SessionFactory或Session对象创建我需要的每个地方。 请通过一些code-snipt建议。

Javagenerics来救援! 准备好惊讶。

您的抽象实体(如果您想定义在诸如通用控制器类之类的东西中使用的方法,则非常有用):

 public abstract class AbstractEntity implements Serializable { public abstract ID getPrimaryKey();//I simply put this here as an example } 

创建通用DAO接口:

 public interface IGenericDAO, ID extends Serializable> { T findByPrimaryKey(ID id); T save(T entity); void delete(T entity); List saveAll(List entities); . . . } 

然后,定义您的抽象通用DAO:

 public abstract class AbstractHibernateDAO, ID extends Serializable> implements IGenericDAO { protected Class persistentClass; protected AbstractHibernateDAO(){} @SuppressWarnings({ "unchecked", "rawtypes" }) public AbstractHibernateDAO(Class c) { persistentClass = c; } @Override @SuppressWarnings("unchecked") public T findByPrimaryKey(ID id){ return (T) HibernateUtil.getSession().get(persistentClass, id); } @Override public T save(T entity){ HibernateUtil.getSession().saveOrUpdate(entity); return entity; } @Override public List saveAll(List entities){ for(int i = 0; i < entities.size(); i++){ HibernateUtil.getSession().saveOrUpdate(entities.get(i)); } return entities; } @Override public void delete(T entity){ HibernateUtil.getSession().delete(entity); } . . . } 

实体的DAO接口(对于这个例子,我使用Integer作为主键):

 public interface IMyEntityDAO extends IGenericDAO { } 

现在(鼓滚),你准备好了一些具体的(课)...

DAO:

 public class MyEntityDAO extends AbstractHibernateDAO implements IMyEntityDAO { public MyEntityDAO() { super(MyEntity.class); } } 

myEntity所:

 @Entity @Table(name = "my_entity_table") public class MyEntity extends AbstractEntity{ @Id @Column(name = "index") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; public Integer getPrimaryKey (){ return id; } . . . } 

繁荣。 (麦克风下降)

如果您需要进一步说明,请告诉我!

我没有理所当然地发表这篇文章,而没有赞扬Cameron McKenzie和他在这里出色的书 。 这让我看到了一个全新的世界,实现了仿制药的力量。