Tag: dao

两个类内部几乎重复的代码

这时,我有两个类: UserHibernateDao和TicketHibernateDao : import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import model.dao.Dao; import model.entity.User; public class UserDaoHibernate extends HibernateDaoSupport implements Dao { public User get(long id) { return getHibernateTemplate().get(User.class, id); } public void save(User user) { getHibernateTemplate().save(user); } public void remove(long id) { getHibernateTemplate().delete( getHibernateTemplate().get(User.class, id)); } } 第二个: import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import model.dao.Dao; import model.entity.Ticket; public […]

DAO架构的必要性是什么?

用Java编程时,总是需要根据DAO架构进行编码吗? 如果是这样,使用它有什么好处? 我正在做一个有下面类图的项目。 这有什么缺点? 实体类: private void fillSONumber() { try { ZnAlSalesOrder o = new ZnAlSalesOrder(); ArrayList a = o.getPendingSalesOrderIDs(); for (int i = 0; i < a.size(); i++) { cmbSoNo.addItem(a.get(i)); } o.close(); } catch (Terminated ex) { } } EntityTable类示例: public ResultSet select(String fields, String selection) { db = new Database(); db.select(“SELECT ” + […]

Spring Java中许多DAO的策略

我们在现有项目中有许多DAO(目前没有接口,但可以改变)。 我们有一个DAO“工厂”,它不是为每个DAO类连接一个Spring管理的bean,而是将它们注入服务层,如下所示: public class DAOFactory { private static DAOFactory daoFac; static{ daoFac = new DAOFactory(); } private DAOFactory(){} public static DAOFactory getInstance(){ return daoFac; } public MyDAO1 getMyDAO1(){ return new MyDAO1(); } public MyDAO2 getMyDAO2(){ return new MyDAO2(); } … (注意MyDAO1和MyDAO2是具体类) 这允许我们在服务层内轻松添加/调用DAO方法,而不必1.)将DAO接口作为属性添加到服务类2.)通过配置将DAO实现连接到服务方法。 (我们有时在一个服务类中使用多个DAO)。 DAOFactory.getInstance().getMyDAO1().doSomething(); 到目前为止,这个策略对我们有用(我们不太需要切换实现),但是我想知道如果我们能够启动新的更好的方法吗? 我考虑将DAO自动assembly为bean,但我仍然需要在每个服务类中创建属性来表示正在使用的DAO。 在一个大型项目中,我仍然犹豫是否开始自动布线bean – 我们需要为所有开发人员提供可见性。 感觉就像我在一个实现紧密耦合的情况下翻转,但是代码/配置开销较少,而b。)松散地耦合到接口,但需要大量的代码/配置开销。 有没有更好的方法我错过了? 介于两者之间? 意见表示欢迎。

EntityManager注入 – NullPointerException

在我的Spring + JPA / Hibernate + Wicket应用程序中,我有一个QueryBuilder bean,我想在我的一个DAO中使用它,它在Criteria API的帮助下生成一个类型化查询: @Service(value=”inboxQueryBuilder”) public class InboxQueryBuilder { @PersistenceContext EntityManager em; CriteriaBuilder cb; public InboxQueryBuilder() { cb = em.getCriteriaBuilder(); } public TypedQuery getQueryForApps(AppSearchObject aso) { … } … } 但是,当我运行应用程序时,我得到一行空指针exception: cb = em.getCriteriaBuilder(); 即EntityManager不会被注入。 你知道为什么吗? 此外,这是正确的和线程安全的,还是我应该为每个查询实例化我的InboxQueryBuilder? 在这种情况下,我是否应该注入EntityManager或者我应该将它作为构造函数参数传递(InboxQueryBuilder将为DAO中的每个查询实例化,其中有一个注入的EntityManager实例)?

Java EE DAO / DTO(数据传输对象)设计模式

目前我正在为我的工作项目使用struts2 Framework,在设计我的DAO类时,我在脑海中有一个问题需要改进设计模式。 在我的搜索function上,我有3种搜索 用一个参数搜索,另一个参数, 搜索多个参数, 搜索没有参数。 我的问题是,DAO方法的最佳方法是什么? 在我的struts2方法中,我有 public String execute() { //assuming these are passed in from JSP if (“searchByAnId”.equals(paramSearch)) { List datalist = this.someDao.implementList(theIdParam); } else if(“searchByAnOtherParam”.equals(paramSearch)) { List datalist = this.someDao.implementAnotherList(param1, param2, param3, param4) // more params } else { List datalist = this.someDao.implementListAll(); } return “success”; } 我正在阅读设计模式,如工厂方法,装饰器方法,观察者方法,但我不确定哪一个是最适合的(或其他没有第三方插件的东西)适合这个?

用于java的DAO生成器

我正在为java搜索免费且简单的DAO生成器(它需要从db表/视图创建实体/ bens并生成基本的CRUD代码)。 目前,我使用的DAO4J缺少视图映射等function。 我知道有像Hibernate这样的框架,但我不需要这样强大的框架。 这个框架应该做的一些事情: 使用标准SQL查询生成CRUD操作,而不是编译时类型安全查询 没有像hibernate这样的会话概念 不会自动关闭连接 可以通过代码配置JDBC连接

数据访问层的设计模式

我有一个使用数据库(MongoDB)来存储信息的应用程序。 在过去,我使用了一个充满静态方法的类来保存和检索数据,但我已经意识到这不是面向对象的,也不是未来的证据。 虽然我不太可能改变数据库,但我宁愿把一些东西与Mongo联系起来。 我还希望能够使用从数据库刷新缓存对象的选项来缓存结果,但这不是必需的,可以在其他地方完成。 我已经查看了数据访问对象,但它们似乎没有很好地定义,我找不到任何好的实现示例(使用Java或类似的语言)。 我还有很多一个关闭案例,例如找到用于完成制表符的用户名,这些用户名似乎不太适合,并且会使DAO变大和膨胀。 是否有任何设计模式可以帮助获取和保存对象而不会过于特定于数据库? 良好的实现示例将是有帮助的(最好是在Java中)。

如何使用Mockito测试DAO方法?

我已经开始发现Mockito图书馆了,有一个问题,我找不到合适的答案。 如果我在我的UserDAO类中有这样的方法,可以将用户保存在数据库中: public class UserDAO{ … public void create(User user) { Connection connection = null; PreparedStatement pstmt = null; ResultSet generatedKeys = null; try { connection = getConnection(); pstmt = connection.prepareStatement(INSERT_USER, PreparedStatement.RETURN_GENERATED_KEYS); int counter = 1; pstmt.setString(counter++, user.getFirstName()); pstmt.setString(counter++, user.getLastName()); pstmt.setString(counter++, user.getEmail()); pstmt.setString(counter++, user.getPassword()); pstmt.setString(counter++, user.getRole()); pstmt.setString(counter, user.getLang()); pstmt.execute(); connection.commit(); generatedKeys = pstmt.getGeneratedKeys(); if (generatedKeys.next()) […]

使用带有DAO模式的Guice进行dependency injection

对于我正在研究的小型项目,我一直在努力为我与DB的交互实现一些DAO模式,并且已经开始使用Guice(我第一次)为我处理DI。 现在我有这个类层次结构: DAOImpl引用类类型,因此我的数据库客户端(mongo / morphia)可以执行一些初始化工作并实例化BasicDAO提供的BasicDAO。 以下是相关课程的片段: public class DAOImpl implements DAO { private static final Logger LOG = LoggerFactory.getLogger(DAOImpl.class); private static final String ID_KEY = “id”; private final org.mongodb.morphia.dao.DAO morphiaDAO; @Inject public DAOImpl(Datastore ds, Class resourceClass) { morphiaDAO = new BasicDAO(resourceClass, ds); LOG.info(“ensuring mongodb indexes for {}”, resourceClass); morphiaDAO.getDatastore().ensureIndexes(resourceClass); } } public class UserDAO extends […]

DAO设计模式和Servlet

我正在阅读Oracle网站上的DAO设计模式,我试图在使用JSP,Servlet,普通java对象和MVC模式的上下文中理解下面的图像。 在我的例子中,BusinessObject是我的servlet,TransferObject是我的java类,只有属性,mutators和访问器(DTO)? 例如,如果我在servlet(控制器)中有这个代码 DTO.setFirstName(request.getParameter(“firstName”)); DTO.setLastName(request.getParameter(“lastName”)); DAO.save(DTO); http://sofzh.miximages.com/java/index.html