标签: genericdao

单DAO和通用CRUD方法(JPA/Hibernate + Spring)

在我之前的问题,DAO和服务层(JPA/Hibernate + Spring)之后,我决定在使用JPA/Hibernate,Spring和Wicket的应用程序中仅使用一个DAO作为我的数据层(至少在开始时).提出了使用通用CRUD方法,但我不太确定如何使用JPA实现它.你能给我一个例子或分享一个关于这个的链接吗?

java dao jpa crud genericdao

45
推荐指数
3
解决办法
9万
查看次数

如何使用JDBC和连接池实现DAO管理器?

我的问题如下.我需要一个类作为Web系统中数据库连接的单点,因此避免让一个用户有两个打开的连接.我需要尽可能优化它,它应该管理系统中的每个事务.换句话说,只有该类应该能够实例化DAO.为了使它更好,它还应该使用连接池!我该怎么办?

java dao connection-pooling jdbc genericdao

23
推荐指数
2
解决办法
6万
查看次数

如何在GenericDao中检索公共值(IpAddress,TenantId)?

我们正在使用Play!HTTP会话的框架.

tenantId并且ipAddress是多个表中共有的列.

当用户登录时,我们都存储tenantId在HttpContextSession

每当我们需要用户的IP地址时,我们Http.Context.current().request().remoteAddress()用来存储IP地址.

我们编写了大量的查询,现在我们想以通用的方式保存或查询tenantId.

所有查询都通过GenericDao进行

我们可以在GenericDao中使用以下内容来获取租户ID,以便我们可以在所有查询中附加吗?

Http.Context.session().get("tenantId");
Run Code Online (Sandbox Code Playgroud)

保存或检索这些细节的最佳方法是什么?

谢谢.

java genericdao playframework playframework-2.0

12
推荐指数
1
解决办法
325
查看次数

摘要DAO模式和Spring的"代理无法转换为......"问题!

我知道这经常被问到,但我找不到一个有效的解决方案:

这是我的AbstractDAO:

public interface AbstractDao<T>
{
  public T get(Serializable id);
  //other CRUD operations
}
Run Code Online (Sandbox Code Playgroud)

这是我的JPA实现:

public abstract class AbstractDaoJpaImpl<T> implements AbstractDao<T> , Serializable
{
  protected EntityManager em;

  protected Class<T> clazz;

  @SuppressWarnings("unchecked")
  public AbstractDaoJpaImpl()
  {
    ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
    this.clazz = (Class<T>) genericSuperclass.getActualTypeArguments()[0];
  }

  public abstract void setEntityManager(EntityManager em);  
  //implementations skipped
}
Run Code Online (Sandbox Code Playgroud)

这是一个实体的道:

public interface PersonDao extends AbstractDao<Person>
{
  //empty
}
Run Code Online (Sandbox Code Playgroud)

这是它的实现:

@Repository
public class PersonDaoImpl extends AbstractDaoJpaImpl<Person> implements PersonDao , OtherInterface
{
  @PersistenceContext(unitName="company")
  @Override
  public void setEntityManager(EntityManager em)
  { …
Run Code Online (Sandbox Code Playgroud)

java spring cglib genericdao

9
推荐指数
1
解决办法
2万
查看次数

通用DAO模式实现设计

我正在开发一个GWT + Hibernate项目.它由各种模块组成,其中我将命名为两个 - 公司和登录.对于每个模块,我已经创建了一个RPC服务,这样项目就不会有一个像神一样的服务来完成所有事情.

为了与数据库进行交互,我使用了Hibernate API - 具体来说,是POJO中的EntityManager和Annotations.

另外,我创建了一个Generic DAO类来处理基本的CRUD操作.GenericDAO类也将处理EntityManager.每个模块服务类都将扩展此GenericDAO,以便它可以添加自己的查询方法.

以下是GenericDAO类的存根 -

public class GenericDataAccessService<EntityType, PrimaryKeyType extends Serializable> {

    // Constructor

    @Override
    public void save(EntityType newEntity) {
        // TODO Auto-generated method stub
    }

    @Override
    public void update(EntityType entity) {
        // TODO Auto-generated method stub

    }

    @Override
    public EntityType find(PrimaryKeyType primaryKey) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public List<EntityType> findByProperty(String property) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public List<EntityType> findAll() {
        // …
Run Code Online (Sandbox Code Playgroud)

gwt design-patterns hibernate genericdao

7
推荐指数
1
解决办法
6765
查看次数

Spring MVC:通用DAO和服务类

我正在Spring MVC中编写Web.我使用Generic DAO编写了所有DAO.现在我想重写我的服务类.我怎么写"通用服务"?

有我的DAO:

/* ################################# DAO ################################ */
package net.example.com.dao;

import java.util.List;

public interface GenericDao<T> {       
        public T findById(int id);     
        public List<T> findAll();      
        public void update(T entity);  
        public void save(T entity);    
        public void delete(T entity);
}

/* ------------------------------------------------------ */

package net.example.com.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;

@Scope("prototype")
public abstract class GenericHibernateDaoImpl<T extends Serializable> implements GenericDao<T> {

        private Class<T> clazz;

        @Autowired
        private SessionFactory sessionFactory;

        public final void setClazz(Class<T> clazzToSet) {
                this.clazz = clazzToSet; …
Run Code Online (Sandbox Code Playgroud)

java generics spring dao genericdao

7
推荐指数
1
解决办法
1万
查看次数

java中的泛型DAO

我正在尝试在java中开发通用DAO.我尝试了以下内容.这是实现通用DAO的好方法吗?我不想使用hibernate.我试图使它尽可能通用,这样我就不必一遍又一遍地重复相同的代码.

public abstract class  AbstractDAO<T> {

    protected ResultSet findbyId(String tablename, Integer id){
        ResultSet rs= null;
        try {
           // the following lines are not working
            pStmt = cn.prepareStatement("SELECT * FROM "+ tablename+ "WHERE id = ?");
            pStmt.setInt(1, id);
            rs = pStmt.executeQuery();


        } catch (SQLException ex) {
            System.out.println("ERROR in findbyid " +ex.getMessage() +ex.getCause());
            ex.printStackTrace();
        }finally{
            return rs;
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

我现在有:

public class UserDAO extends AbstractDAO<User>{

  public List<User> findbyid(int id){
   Resultset rs =findbyid("USERS",id) // "USERS" is table name in DB
   List<Users> users …
Run Code Online (Sandbox Code Playgroud)

java dao genericdao

7
推荐指数
3
解决办法
1万
查看次数

用CDI/Weld注入通用豆类

我刚刚来自我的小型JavaSE/Guice世界,目前正在发现"由容器携带"-EE6的路径.在使用Glassfish3.1遇到麻烦之后,我刚刚切换到JBoss,现在面临的问题不应该是一个问题.

作为基础结构辅助类,我试图为任何类型的实体创建通用存储库/ DAO.以一种非常简单的方式,这可能看起来像这样.

public class Repository<E, K extends Serializable & Comparable<K>> {

    private final Instance<EntityManager> entityManagerInstance;

    protected final Class<E> getDomainObjectClass() {
        return domainObjectClass;
    }

    private final Class<E> domainObjectClass;

    protected final EntityManager getEntityManager() {
            return entityManagerInstance.get();
    }

    @Inject
    public Repository(Instance<EntityManager> entityManageryProvider, Provider<E> domainObjectProvider) {
            //This is a dirty hack, sadly :(
            domainObjectClass = (Class<E>)domainObjectProvider.get().getClass();
            this.entityManagerInstance = entityManageryProvider;
    }

    public final void persist(E domainObject) {
        final EntityManager em = getEntityManager();
        em.persist(domainObject);
    }

    public final Collection<E> getAllEntities() {
            final EntityManager em = getEntityManager(); …
Run Code Online (Sandbox Code Playgroud)

genericdao cdi java-ee-6 jboss-weld

7
推荐指数
1
解决办法
5597
查看次数

service-dao 模式的最佳实践是什么?

让我们考虑一个简单的用户插入操作。我用来完成这项工作的 Spring 相关类是UserController, UserService, UserServiceImpl, UserDAO, UserDAOImpl。

在控制器端我调用userService.insert(new User())并在userService.insert()方法中调用userDAO.insert(user)。我认为这种模式存在方法重复。

有没有办法避免方法重复?可能是我的编码有问题。我等你的回复,经验...

预先感谢...

service spring duplication genericdao

5
推荐指数
1
解决办法
1957
查看次数

Spring Generic Dao类名

我已经为我的spring/hibernate项目配置了一个自定义通用服务DAO - 这个想法是我可以从我的控制器中轻松地重用它.

它基本上是这样的:

public class DefaultService<T> {

private Class<T> e;

public String className(Class<T> e) {
    String clip = e.getName();
    clip = clip.substring(clip.lastIndexOf('.') + 1, clip.length());
    return clip;
}
public List<T> getAll(Integer status) {
    Session session = sessionFactory.getCurrentSession();
    Query query = session.createQuery("FROM " + className(e) + " WHERE status = " + status);
    return query.list();
}
...
Run Code Online (Sandbox Code Playgroud)

哪个被引用:

@Autowired
public DefaultService<Address> addressService;
addressService.get(1);
Run Code Online (Sandbox Code Playgroud)

但是该String clip = e.getName()行会抛出Null指针异常.如果我将类移动到属性部分,addressService.get(Address.class, 1)我可以使用它(所以但我觉得这有些不整齐,特别是当有多个不同的类被调用时.

有没有办法让类正确生成一个值而不必重复添加到我的所有函数中?

提前致谢.

java spring genericdao

2
推荐指数
1
解决办法
7812
查看次数