Spring整合hibernate-dataSource、sessionFactory的依赖注入

这些内容都是我自己手写的,其实术语不多,最重要的是配置

我说明下第一注意的是加包与删除包:
需要手动加载的包名(必须加)在lib目录下加:commons-dbcp.jar 和commons-pool.jar包
需要删除的(必须删除)的包在lib目录下删:asm-2.2.3.jar包

第二我们就开始搭建拉!(顺便告诉你下,你可以先把struts和Spring和hibernate导入进来 ,不懂没关系 你看我的)
(ssh包导入进来后)你先按照样子导入如果不知道搭的话也很简单可以学会的那我们就开始写了:
1.写基类时(beasDAo(父类)应该会写)也就是你要写的增删改的方法必须继承:HibernateDaoSupport (Spring来管理hibernate)
得到相应的方法为:
protected void add(T obj) throws Exception {
try {
super.getHibernateTemplate().save(obj);
} catch (Exception e) {
throw e;
}

}
增删改的方法都一样super.getHibernateTemplate().update(obj);
super.getHibernateTemplate().delete(obj);

但查询方法则要new个接口 如查询所有:
protected List<T> getAll(final Class T) {
return super.getHibernateTemplate().executeFind(new HibernateCallback(){

public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query q = session.createQuery("from " + T.getName());
return q.list();
}

});
根据id也查询则是如下方法 其实也没什么可概括的:
protected T getObjById(Class T, Serializable id) {
return (T) super.getHibernateTemplate().get(T, id);
}

写好这个之后你要写相应的DAO继承基类得到此方法 这个我就不说了
就是得到刚刚自己写的beasDao的方法

描述相应的DAO的和接口IDAO(这个接口必须有,因为Spring中不能有
IDAO dao=new DAo();的出现(不过你先写着,等下再来改) 这就是为什么要有接口了 Spring说句白的就是针对接口编程


Service也是一同样有IService接口(这个和DAO一个原理一样 等下我们在来写Service怎么运用DAO的方法)

写好之后我们就开始注入了(这个就是开始配置了)

在Spring的配置文件applicationContext.xml中则写入这段话,其实意思很见简单,你不要把他搞的太复杂了,我来解释下,原来的时候你是用Hibernate来连接数据库,还有映射相应的pojo对象 是吧 ,但现在我们有了spring就把以前的hibernate的文件给干掉 让Spring去管理 但spring如何去管理 我们先写着:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=""
xmlns:xsi=""
xmlns:util=""
xmlns:p=""
xmlns:aop=""
xmlns:tx=""
xsi:schemaLocation="

">
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver"> (这里是数据连接池
</property>
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/crmdb"> (这个是不是很眼熟)
</property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
<property name="maxActive" value="10"></property>
<property name="initialSize" value="2"></property>
</bean>
<bean id="sessionFactory" (呵呵 这个就是我们以前来创建Session的工厂了,现在也来了)
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds" /> (这里就是把连接池给注入进来了)
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop> (你仔细看下都很眼熟)
</props>
</property>
<!--<property name="mappingDirectoryLocations">
<list>
<value>com/crm/pojos</value>
</list>
</property>-->
<property name="mappingResources">
<list>
<value>com/crm/pojos/Zongjie.hbm.xml对应的pojo映射文件路径有多少写多少</value> (这里就是管理映射文件了)

</list>
</property>
</bean>
(而从这里开始就是事务管理。听我的 死记下 呵呵 )
<!-- 事务管理器 apring2.0中间事务的配置和处理-->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

<!-- 事务属性:通知/处理/横切关注点
<tx:method name="add*" propagation="REQUIRED" isolation="DEFAULT" />
以add开头 事务传播属性(没有事务就创建) 事务隔离级别(数据库默认)
-->
<tx:advice id="mytx">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="upd*" propagation="REQUIRED" isolation="DEFAULT"/>
<tx:method name="se*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 织入 -->
<aop:config>
<aop:advisor advice-ref="mytx" pointcut="execution(* com.crm.service.*.*(..))"/>
</aop:config>
</beans>

写后之后我们就开始注入对应的DAO 你可以自己创建一个daobean.xml文件里面是这样写的
<?xml version="1.0" encoding="UTF-8"?>

<beans
xmlns=""
xmlns:xsi=""
xsi:schemaLocation=" ">
<bean id="Factory" abstract="true">(这里一定要看请,不错 这就是我们刚刚的sessionFactory 他为什么来这里了勒 因为你以前写基类的时候就是用他来创建session 但现在我们有了spring怕他不认识 所以 我们给他提个醒创建个模板)
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="CustomerDao" class="com.crm.dao.CustomerDao" parent="Factory"></bean>有多少DAO注入多少 呵呵
</beans>

在Service中导 我们要把以前的new(IDao dao=new Dao();)不要
如下面显示:IDAO idao;提供对应的get 与set方法就可以了

然后类我们自己创建个servicebean.xml配置文件注入相应的DAO到Service中

<beans
xmlns=""
xmlns:xsi=""
xsi:schemaLocation=" ">
<bean id="CustomerService" class="com.crm.service.CustomerService">
<property name="icustomerdao" ref="CustomerDao"></property>
<property name="idao" ref="UserDao"></property> 你看的没name=idao;就是我刚刚定义的 我们要的就是他提供的set方法 ,而ref="UserDao"这就是我刚刚上面自己的啊
</bean>
</beans>
在你写的action中我们要和写Service里面的DAO一样但要继承DispatchActionSupport
然后在
IService customerservice;提供get 与set 方法

再来我们创建个strutsbean.xml配置文件写入:
<?xml version="1.0" encoding="UTF-8"?>

<beans
xmlns=""
xmlns:xsi=""
xsi:schemaLocation=" ">
<bean name="/customer" class="com.crm.struts.action.CustomerAction">
<property name="customerservice" ref="CustomerService"></property>
</bean>
</beans>

然后我们在Struts的配置文件中加如个插件:

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/strutsbean.xml"/>
</plug-in>
这是加载strutsbean.xml的配置文件

最后就是在web.xml中加载我们自己创建的daobean.xml和servicebean.xml
web.xml 文件中加入

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml,/WEB-INF/daobean.xml,/WEB-INF/servicebean.xml</param-value>
</context-param>
<servlet>
<servlet-name>ContextLoaderServlet</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

posted on 2014-05-18 23:09  山庄听泉  阅读(3176)  评论(1编辑  收藏  举报

导航