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层结束。

ssh

相关推荐