有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何创建BaseDAO+JDBC并像@Autowired变量一样使用它?

我以前在Hibernate ORM中使用过DAO,它工作得很好。但现在我需要在JDBC中使用DAO,我不知道如何创建单个连接点

我是这样使用的:

public interface BaseDao<E> {
    public E persist(E e);

    public E get(Long id);

    E get(Integer id);

    public List<E> getAll();

    E merge(E e);

}

与实现

@Repository
@Transactional(propagation = Propagation.REQUIRED)

public abstract class BaseJpaDao<E> implements BaseDao<E> {

    protected Class<?> entityClass;

    @PersistenceContext(unitName = "mainDataBase")
    protected EntityManager entityManager;

    public BaseJpaDao(Class<?> entityClass) {
        this.entityClass = entityClass;
    }

    @Override
    public E persist(E e) {       
        entityManager.persist(e);
        return e;
    }

    @Override
    public E get(Long id) {
        return (E) entityManager.find(entityClass, id);
    }

    @Override
    public E get(Integer id) {
        return (E) entityManager.find(entityClass, id);
    }

    @Override
    public List<E> getAll(){
        return getSession().createCriteria(entityClass).list();
    }

    @Override
    public E merge(E e){
        checkFieldsForNull(e);
        return entityManager.merge(e);
    }

但是现在我需要使用JDBC,我使用这个:

  public class BaseDao {
        private DataSource dataSource;
        private JdbcTemplate jdbcTemplate;

        public BaseDao(String serviceName) throws NamingException {
            Context envContext = new InitialContext();
            String jndiUrl = MessageFormat.format("osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/{0})", serviceName);
            dataSource = (DataSource) envContext.lookup(jndiUrl);
        }

    public BaseDao(DataSource dataSource) {
        this.dataSource = dataSource;
    }
}

和实现:

@Repository
public class SubscriberDaoImpl extends BaseDao implements SubscriberDao {

    public SubscriberDaoImpl(String serviceName) throws NamingException {
        super(serviceName);
    }

    @Override
    public List<SubsDetail> getSubsDetils(Long subsId, Date startDate, Date endDate) {
        return null;
    }
}

在这之后,我想使用我的DAO类,比如:

public class SubscriberProcessorImpl implements SubscriberProcessor {

    @Autowired
    SubscriberDao subscriberDao;


    @Override
    public String getSubscriberDetail(Long id, Date startDate, Date endDate) {
        List<SubsDetail> subsDetils = subscriberDao.getSubsDetils(id, startDate, endDate);

        return DataFormatUtil.me().prepareResponseJson(subsDetils, ResultCode.SUCCESS, "");
    }
}

但我需要将参数传递给DAO,我不知道如何传递


共 (0) 个答案