⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 day3.txt

📁 加拿大达内科技有限公司配需java程序员的上课时的代码
💻 TXT
字号:
一、数据访问
	1、Spring的数据访问设计思想(DAO、模板方法)PPT77
			DataIntegrityViolationException:	insert或update数据时违反了完整性,如违反了唯一性限制
			DataAccessResourceFailureException:数据访问资源失败,如不能连接数据库
			 InvalidDataAccessResourceUsageException:使用错误的SQL语法访问数据库
	2、数据源配置:
		方式一:Spring内置实现 DriverManagerDataSource
		
				<bean id ="dataSource" class ="org.springframework.jdbc.datasource.DriverManagerDataSource">
					   <property name="driverClassName">
					   <value>com.mysql.jdbc.Driver</value>
					   </property>
					   <property name="url">
					   <value>jdbc:mysql://localhost:3306/hibdb</value>
					   </property>
					   <property name="username">
					   <value>root</value>
					   </property>
					   <property name="password">
					   <value>windows</value>
					   </property>
		   		</bean>
		方式二:DBCP提供的BasicDataSource
			<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
				<property name="driverClassName">
					<value>com.mysql.jdbc.Driver</value>
				</property>
				<property name="url">
					<value>jdbc:mysql://localhost:3306/hibdb</value>
				</property>
				<property name="username">
					<value>root</value>
				</property>
				<property name="password">
					<value>windows</value>
				</property>
			</bean>
		方式三:JNDI数据源 (在讲解SSH整合时再说明)
			JNDI数据源:(mysql5,tomcat5.5)
   			
   			step1:
   				在server.xml中:
   				<Resource name="jdbc/mydatasource" auth="Container" description="DB Connection" 
				type="javax.sql.DataSource" username="root" password="windows" 
				driverClassName="com.mysql.jdbc.Driver" 
				url="jdbc:mysql://localhost:3306/tarena" maxActive="5" />
			step2:
				在context.xml中(conf\context.xml):
				<ResourceLink   name="jdbc/mydatasource"   global="jdbc/mydatasource"   type="javax.sql.DataSourcer"/> 
			step3:
				在beans-config.xml:
				<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
				    <property name="jndiName">
				      <value>java:comp/env/jdbc/mydatasource</value>
				    </property>
			  </bean>
			  
	3、JDBC支持:
			step1:  配置数据源
			step2: 配置JdbcTemplate
			<bean id="jdbcTemplate"
				class="org.springframework.jdbc.core.JdbcTemplate">
				<property name="dataSource">
					<ref bean="dataSource" />
				</property>
			</bean>	   
			step3:配置DAO
			<bean id="orderDao" class="lab5.OrderDAOImpl">
				<property name="jt"><ref bean="jdbcTemplate"/></property>
			</bean>
			注意:	查询时,使用RowMapper
					  
	4、hibernate支持:
			step1:	配置数据源
			step2:	配置sessionfactory
				<bean id="mySessionFactory"
					class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
					<property name="dataSource">
						<ref bean="dataSource" />
					</property>
					<property name="mappingResources">
						<list>
							<value>lab6/Order.hbm.xml</value>
						</list>
					</property>
					<property name="hibernateProperties">
						<props>
							<prop key="hibernate.dialect">
								org.hibernate.dialect.MySQLDialect
							</prop>
							<prop key="hibernate.show_sql">true</prop>
						</props>
					</property>
				</bean>
				注意:配置映射文件位置的另一种用法
				<property name="mappingDirectoryLocations">
					<list>
						<value>classpath:/bo</value>
					</list>
				</property>
				或者
				直接使用hibernate.cfg.xml,此时,配置内容如下:
				<property name="configLocation">
					<value>exec\t2\hibernate.cfg.xml</value>
				</property>
				注意,此时,因为由hibernate来管理事务,所以,必须在spring配置文件中,配置事务后才能使用,否则,结果不会真正写入数据库!
				可以参照工程spring下的t2
		step3:	配置DAO
			<bean id="orderDao" class="lab6.OrderDAOHibernateImpl">
				<property name="sessionFactory">
					<ref bean="mySessionFactory" />
				</property>
			</bean>
			注意:以上配置是要求dao 继承HibernateDaoSupport
	
   			
二、事务:
	1、Spring事务机制
		声明式事务、事务管理器
	2、hibernate事务p72
		step1: 配置数据源
		step2:配置sessionfactory (同上)
		step3:配置事务管理器
			<bean id="myTransactionManager"
				class="org.springframework.orm.hibernate3.HibernateTransactionManager">
				<property name="sessionFactory">
					<ref bean="mySessionFactory" />
				</property>
			</bean>	
		step4:创建事务服务代理
			<bean id="saleService"
			class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
			<property name="proxyInterfaces">
				<value>lab7.SaleService</value>
			</property>
			<property name="transactionManager">
				<ref bean="myTransactionManager" />
			</property>
			<property name="target">
				<ref bean="saleServiceTarget" />
			</property>
			<property name="transactionAttributes">
				<props>
					<prop key="*">PROPAGATION_REQUIRED</prop>
				</props>
			</property>
		</bean>
		注:
			事务属性描述格式:
			传播行为,隔离级别,只读事务(readonly),回滚规则
			在默认情况下,Spring的容器对于非受查异常(服务模块中抛出的非受查异常)
			,会回滚事务。对于受查异常,会提交事务。
			如果即使发生了某种受查异常,也要回滚事务,可以用  “- 异常类型“来声明。回滚事物
			同样,对于非受查异常,如果不要求回滚事务,可以用"+异常类型"来声明。 提交事物
			
	3、简化事务配置
		继承、自动代理
		
	4、使用标注来进行事务管理(可选)
		(1)引入相应命名空间,参见spring参考文档
		(2)加入<tx:annotation-driven transaction-manager="myTransactionManager"/>
		(3)在service类中,使用@Transactional标记
		可参考工程spring中的t4
	
三、Spring与struts整合:
		前提:
			必须在Web应用启动时,创建Spring的ApplicationContext实例
		方式:
			1、采用ContextLoaderListener来创建ApplicationContext:
				<context-param>
				<param-name>contextConfigLocation</param-name>
				<param-value>
					/WEB-INF/spring-config/applicationContext.xml
				</param-value>
			</context-param>
			<listener>
				<listener-class>
					org.springframework.web.context.ContextLoaderListener
				</listener-class>
			</listener>
			2、采用ContextLoaderPlugIn来创建ApplicationContext
				<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
				    	<set-property property="contextConfigLocation" value="/WEB-INF/config/sale.xml" />
				</plug-in>
		或者:
			通过listener装载spring应用上下文
			
方式一:通过Spring的ActionSupport类
	ActionSupport类:
		知道ApplicationContext的获得方式。
	步骤:
		1、Action直接继承ActionSupport
		2、使用ApplicationContext ctx = getWebApplicationContext();取得Spring上下文
		3、取得相应Bean
		注意:有可能需要替换commons-attributes-compiler.jar包。
		优点:
			简单
		缺点:
			耦合高
			违反IOC
			无法使用多方法的Action
		
方式二:通过Spring的DelegatingActionProxy类
	步骤:
		1、Action中,使用IOC获得服务
		2、配置struts-config.xml
			<action path="/somepath" type="org.springframework.web.struts.DelegatingActionProxy"/>
		3、在Spring配置文件中
			<bean name="/somepath" class="SomeAction">
				<property name="service"><ref bean=""/>
			</bean>
			注意,要用bean name命名。
			/somepath:Action的path
	优点:
		不使用Spring api编写 Action
		利用了IOC装配。
		可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理,
		避免struts中Action的线程安全问题。
	缺点:
		struts配置文件中,所有path都映射到同一个代理类
		
方式三:通过Spring的DelegatingRequestProcessor类
	步骤:
		1、Action中,使用IOC获得服务
		2、配置struts-config.xml
			 <controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor" />
		3、在Spring配置文件中
			<bean name="/somepath" class="SomeAction">
				<property name="service"><ref bean=""/>
			</bean>
小结:
		Spring与Struts整合方式只有两种:
		(1)由Spring容器来管理Action(方式二,方式三)
		(2)Action处于容器之外(方式一)
		注意:
			中文问题:
				设置过滤器,设置页面编码,数据库编码
				

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -