DAO层是否还有必要?
小弟今天初次发帖,还望各位大虾不吝赐教!
这几天一直在思考一个问题:就是DAO层是还需要?大家都知道传统的DAO就是对一个对象的增删查改,然而我觉得这些工作完全可以放在这个对象去做,如在这个对象中的除了我们常见的一些属性和setter和getter方法,还可以增加save,find,update,delete方法来完成DAO操作,我结合spring+hibernate做了个简单的save的操作,觉得这完全是可行的。
//所有要保存对象的基类
public class BaseModel extends HibernateDaoSupport{
public String id;//对应中的ID
//定义对象的保存操作
public void save(){
getHibernateTemplate().save(this);
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
//具体的要保存的对象
public class Model1 extends BaseModel implements Cloneable {
private String name;
//无参构造函数
public Model1() {
}
//全参构造函数
public Model1(String anName) {
this.name = anName==null?anName:anName.trim();
}
/**
* 静态构造方法
*/
public static Model1 getInstance() throws Exception {
try{
Model1 model = (Model1)new XmlBeanFactory(
new ClassPathResource("xx/xx/xx/applicationContext.xml")).getBeanFactory().getBean("model1Proxy");
return model;
}catch(Exception e) {
e.printStackTrace();
}
}
}
//hibernate配置
<hibernate-mapping package="xxx.xxx.xxx.Model1">
<class name="model1" table="TableName">
<id name="id" type="string">
<column name="T_ID" length="128" />
<generator class="uuid.hex" />
</id>
<property name="name" type="string">
<column name="T_NAME" length="128" />
</property>
</class>
</hibernate-mapping>
//spring配置
<beans>
<bean id="_sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" singleton="true">
<property name="configLocation">
<value>xx/xx/xx/xx/hibernate.cfg.xml</value>
</property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="_sessionFactory" />
</property>
</bean>
<bean id="model1" class="xxx.xxx.xxx.xxx.Model1">
<property name="sessionFactory">
<ref local="_sessionFactory"></ref>
</property>
</bean>
<bean id="model1Proxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="target">
<ref local="model1" />
</property>
<property name="proxyTargetClass">//强制Spring采用CGLIB进行代理
<value>true</value>
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
</beans>
//test
Model1 testModel = (Model1)Model1.getInstance();
Model1.setName("test");
testModel.save();//保存数据
通过我的测试这个save方法是成功的,那我就想如果把所有的增删查改放到对象中应该是完成可行的,这样做的就可以避免了DAO层的编写,而对于DAO层解耦的作用,这里也可以通过不同的BaseModel来实现,可以抽象出一个接口,包括save,find,update,delete方法,通过不同的实现来达到解耦目的!
对于这个想法还处于萌芽状态,希望得到各位的指点,是否具有可行性?