ssh应用3
JavaEE应用无非就是java操作数据库,现在hibernate替我们完成了数据库的映射,我们要考虑如何访问数据库了。在传统的JDBC中,访问数据库要使用connection,同样,在hibernate中访问数据库需要session,而session是由sessionFactory产生的,因此我们需要为sessionFactory配置数据源,同时告诉sessionFactory,它产生的session要能访问到那些数据库,因此配置文件中有了这样的一段配置,
<beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close">
<propertyname="driverClass"value="com.mysql.jdbc.Driver"/>
<propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/atm"/>
<propertyname="user"value="root"/>
<propertyname="password"value="123456"/>
<propertyname="maxPoolSize"value="40"/>
<propertyname="minPoolSize"value="1"/>
<propertyname="initialPoolSize"value="1"/>
<propertyname="maxIdleTime"value="20"/>
</bean>
<beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<propertyname="dataSource">
<refbean="dataSource"/>
</property>
<propertyname="mappingResources">
<list>
<value>org/atm/po/Customer.hbm.xml</value>
<value>org/atm/po/Card.hbm.xml</value>
<value>org/atm/po/CardType.hbm.xml</value>
<value>org/atm/po/CardLog.hbm.xml</value>
<value>org/atm/po/Bank.hbm.xml</value>
<value>org/atm/po/Atm.hbm.xml</value>
<value>org/atm/po/AtmLog.hbm.xml</value>
</list>
</property>
<propertyname="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>
</bean>
有了sessionFactory我们就有了session,有了session我们就可以操作数据库了,下面我们来看DAO层,此层的代码放到dao文件夹中,在PO层有多少类,在DAO就有多少dao对象,每个dao负责访问一个po类,通常我们使用面向接口变成,在dao文件夹中写要实现的数据库访问方法,在dao的子目录impl中写实现。由于每个dao类都需要一个session类,因此早就有人写了一个类,这个类有一个参数sessionFactory,实现了一些常用的方法,因此我们可以看到真实的dao层是这样的:
packageorg.atm.dao;
importjava.util.*;
importorg.atm.po.*;
publicinterfaceAtmDao
{
Atmget(Integerid);
Integersave(Atmatm);
voidupdate(Atmatm);
voiddelete(Atmatm);
voiddelete(Integerid);
List<Atm>findAll();
List<Atm>findByAddress(Stringaddress);
List<Atm>findByHaveNoMoney();
}
packageorg.atm.dao.impl;
importjava.util.*;
importorg.atm.po.*;
importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;
importorg.atm.dao.*;
publicclassAtmDaoImplextendsHibernateDaoSupportimplementsAtmDao
{
publicAtmget(Integerid)
{
returngetHibernateTemplate().get(Atm.class,id);
}
publicIntegersave(Atmatm)
{
return(Integer)getHibernateTemplate().save(atm);
}
publicvoidupdate(Atmatm)
{
getHibernateTemplate().update(atm);
}
publicvoiddelete(Atmatm)
{
getHibernateTemplate().delete(atm);
}
publicvoiddelete(Integerid)
{
getHibernateTemplate().delete(get(id));
}
publicList<Atm>findAll()
{
return(List<Atm>)getHibernateTemplate().find("fromAtm");
}
publicList<Atm>findByAddress(Stringaddress)
{
return(List<Atm>)getHibernateTemplate().find("fromAtmwhereaddress=?",address);
}
publicList<Atm>findByHaveNoMoney()
{
return(List<Atm>)getHibernateTemplate().find("fromAtmwheremoney<=0");
}
}
将每个pojo对应一个dao后,DAO层就写好了。但是不要忘记,dao层的每个类需要有个参数sessionFactory,因此可以看到在配置文件中:
<beanid="daoTemplate"abstract="true"lazy-init="true">
<propertyname="sessionFactory"ref="sessionFactory"/>
</bean>
<beanid="customerDao"class="org.atm.dao.impl.CustomerDaoImpl"parent="daoTemplate"/>
<beanid="cardDao"class="org.atm.dao.impl.CardDaoImpl"parent="daoTemplate"/>
<beanid="cardtypeDao"class="org.atm.dao.impl.CardTypeDaoImpl"parent="daoTemplate"/>
<beanid="cardlogDao"class="org.atm.dao.impl.CardLogDaoImpl"parent="daoTemplate"/>
<beanid="bankDao"class="org.atm.dao.impl.BankDaoImpl"parent="daoTemplate"/>
<beanid="atmDao"class="org.atm.dao.impl.AtmDaoImpl"parent="daoTemplate"/>
<beanid="bankemployeeDao"class="org.atm.dao.impl.BankEmployeeDaoImpl"parent="daoTemplate"/>
<beanid="atmlogDao"class="org.atm.dao.impl.AtmLogDaoImpl"parent="daoTemplate"/>
自此,dao层结束。