http://www.lxweimin.com/p/153dd3960b40 如何下載jar
去官網(wǎng)下好spring的包和hibernate的包,另外導(dǎo)入common-logging的日志包。
commons-pool和dbcp,mysql的驅(qū)動(dòng)包
1、spring最初注解注入失敗,原因是下面這句話(huà)的包路徑不對(duì)
(使用的是jsr250注解,學(xué)習(xí)的時(shí)候看的馬士兵的老視頻需要去下載jsr250的包,新版本是不需要的,以致方向錯(cuò)誤解決了好久。)
使用
<!-- <context:annotation-config/>
這個(gè)的時(shí)候報(bào)錯(cuò)
改為下面(特別注意包的路勁和配置的路徑)
<context:component-scan base-package="com.spring.*" />
<context:property-placeholder location="classpath:jdbc_hibernate.properties,classpath:druid.properties" />
以及xml的路勁不對(duì),xml直接放在src下可以這樣下,但是如果放在包下需要些完整(如classpath:*/beans.xml)
ApplicationContext context = new ClassPathXmlApplicationContext( "beans.xml");
UserManager mgr = context.getBean("mgr", UserManager.class);
mgr.save();
2、整合hibernate失敗
(1)sessionFactory注入失敗,一直以為是配置錯(cuò)誤或者包的版本不匹配
因?yàn)橄碌淖钚碌膆ibernate5以上的包,在官網(wǎng)只看到core包。以為那些注解和基礎(chǔ)依賴(lài)包都整合到core包里面了之引入了core包,導(dǎo)致的失敗。其實(shí)官網(wǎng)還有個(gè)路徑可以下載全部的jar包仔細(xì)找。
(2)導(dǎo)入后注解還是失敗,試了一下xml方式成功了。以為是配制問(wèn)題。
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
這里的hibernate4.LocalSessionFactoryBean以前的注解配置用的
hibernate3.Annotation.AnnotationSessionFactoryBean
這個(gè)類(lèi),現(xiàn)在不需要了上面就可以。其實(shí)只是基礎(chǔ)不好,不了解錯(cuò)誤原因。
最后xml成功,注解失敗后,總是提示語(yǔ)法錯(cuò)誤,其實(shí)提示的是主鍵不匹配開(kāi)始一直沒(méi)查到原因弄了好久。后來(lái)發(fā)現(xiàn)是主鍵生成策略和數(shù)據(jù)庫(kù)不匹配,沒(méi)有插入主鍵自增方式導(dǎo)致失敗。去掉實(shí)體類(lèi)的自增方式,手動(dòng)插入主鍵值成功。
一直被視頻中的 jpa和jsr250糾結(jié),其實(shí)失敗跟導(dǎo)入這個(gè)包沒(méi)有關(guān)系。仔細(xì)看jar包,內(nèi)部有jpa的包和jsr250的其實(shí)不需要額外導(dǎo)入
附上架包圖 spring中有幾個(gè)jar沒(méi)用到,暫時(shí)全部導(dǎo)入的
上面操作已經(jīng)成功的整合hibernate的sessionFactory可以正常使用
接著使用hibernateTemplate出錯(cuò)總是提示沒(méi)有事務(wù)處理,報(bào)錯(cuò)。
然后照著文檔和百度資料配好事務(wù),報(bào)錯(cuò)下面信息,提示沒(méi)有aspectjweaver.jar包,下載導(dǎo)入錯(cuò)誤提示消失
could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$ReflectionWorldException
中間報(bào)錯(cuò)也報(bào)錯(cuò)事務(wù)配置的路徑不對(duì),修改好正常;但是還是提示沒(méi)有事務(wù)操作不成功。
最后百度事務(wù)配置找到文章
http://www.blogjava.net/robbie/archive/2009/04/05/264003.html
我template注入的是sessionFactory但是事務(wù)配的是
<bean id="hibernateTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"> </property>
</bean>
修改成
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
后正常。
中間也猜測(cè)template寫(xiě)法問(wèn)題,最后寫(xiě)法是
public class UserDao {
SessionFactory sessionFactory;
HibernateTemplate hibernateTemplate;
@Resource
public void setSessionFactory(SessionFactory sessionFactory) {
hibernateTemplate = new HibernateTemplate(sessionFactory);
}
public void save(User u) {
this.hibernateTemplate.save(u);
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
">
<!-- 載入常用的配置 -->
<context:property-placeholder location="classpath:jdbc_hibernate.properties,classpath:druid.properties" />
<!-- 注解掃描所有包 -->
<context:component-scan base-package="com.spring.*" />
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 創(chuàng)建sessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">
${hibernate.show_sql}
</prop>
<prop key="hibernate.use_sql_comments">
${hibernate.use_sql_comments}
</prop>
<prop key="hibernate.dialect">
${hibernate.dialect}
</prop>
<prop key="hibernate.jdbc.fetch_size">
${hibernate.jdbc.fetch_size}
</prop>
<prop key="hibernate.jdbc.batch_size">
${hibernate.jdbc.batch_size}
</prop>
<prop key="hibernate.use_outer_join">
${hibernate.use_outer_join}
</prop>
</props>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
<!--
<property name="mappingResources">
<value>com/spring/model/User.hbm.xml </value>
</property>
-->
<!-- 自動(dòng)掃描注解方式配置的hibernate類(lèi)文件 -->
<!--
<property name="packagesToScan">
<list>
<value>com.spring.model</value>
</list>
</property>
-->
<property name="packagesToScan">
<list>
<value>com.spring.model</value>
</list>
</property>
<!-- <property name="annotatedClasses">
<list>
<value>com.spring.model.User</value>
</list>
</propert > -->
</bean>
<!-- 配置Jdbc模板 -->
<!-- <bean id="hibernateTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean> -->
<!-- Hibernate Template Bean配置 -->
<!-- <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> -->
<!-- 事務(wù)配置 start -->
<!-- <bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource">
</property>
</bean>
<tx:advice id="txadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="transfer*" propagation="REQUIRED" />
<tx:method name="upgrade*" propagation="REQUIRED" />
<tx:method name="change*" propagation="REQUIRED" />
<tx:method name="do*" propagation="REQUIRED" />
<tx:method name="*" propagation="REQUIRED" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* com.spring.manager.save(..))"
id="txpointcut" />
<aop:advisor advice-ref="txadvice" pointcut-ref="txpointcut" />
</aop:config> -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="transfer*" propagation="REQUIRED" />
<tx:method name="upgrade*" propagation="REQUIRED" />
<tx:method name="change*" propagation="REQUIRED" />
<tx:method name="do*" propagation="REQUIRED" />
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* com.spring.manager.*.*(..))"
id="txpointcut" />
<aop:advisor advice-ref="txadvice" pointcut-ref="txpointcut" />
</aop:config>
<!-- 事務(wù)配置 end -->
<!-- 強(qiáng)制使用cglib代理 -->
<!--<aop:aspectj-autoproxy proxy-target-class="true" /> -->
</beans>