Spring Chapter 4 jdbc/hibernate DaoSupport的使用攻略

<!--
	Spring Chapter 4 jdbc/hibernate DaoSupport的使用攻略
	Goal:采用昨天的方法来配置切面控制(这样说不太准确)!
-->

今天呢,主要就是讲解如何使用spring中的内置包来实现AOP

一,HibernateDaoSupport(这个要重要点,所以先将这个)
	说明:使用这个就不得不用到AOP的相关的包,在导入Spring时需要选中图一中的那三个包(jdbc需要前面四个包)!
	
	然后在写好了接口,并且写好了接口的实现类后,就开始配置Spring的applicationContext.xml文件了,由于Hibernate会
	使用到SessionFactory,所以这里就要开始层层递进的进行配置!
	<beans 
		xmlns="http://www.springframework.org/schema/beans" 
		xmlns:aop="http://www.springframework.org/schema/aop" 
		xmlns:tx="http://www.springframework.org/schema/tx" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
		
		<!--这个sessionFactory一般是自动建好的,我们直接饮用就OK了!-->
		<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
	  	<property name="configLocation" value="file:src/hibernate.cfg.xml" /> 
	  </bean>
	
		<!--配置事务所在类(与sessionFactory的class如出一辙)-->
		<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
			<!--写入sessionFactory的引用-->
			<property name="sessionFactory" ref="sessionFactory"/>
		</bean>
		
		<!--开始配置事务transaction-manager引用前面我们写的事务的所在类的id-->
		<tx:advice id="txAdvice" transaction-manager="txManager">
			<tx:attribute>
				<!--需要过滤的方法name表示方法名称(采用正则匹配),propagation表示是否开启事务,QEQUIRED(必需开启),NEVER(不开启)-->
				<tx:method name="add*" propagation="REQUIRED" isolation="READ_COMMITTED"/>
				<!--read-only表示只读,一遍只读等于true表示无需开启事务,isolation="READ_COMMITTED" 表示事务只有读取完毕才能进行下一个事务!-->
				<tx:method name="query*" read-only="true"/>
			</tx:attribute>
		</tx:advice>
		
		<!--开始配置切面-->
		<aop:config>
			<!--配置切入点-->
			<aop:cutpoint expression="execution(* com.shu.dao.impl.*.*(..))" id="ucut" />
			<!--配置切面,不同于昨天我们讲的那个<aop:aspect>-->
			<aop:advisor advice-ref="txAdvice" pointcut-ref="ucut"/>
		</aop:config>
		
		<!--配置您需要的dao类,不要忘记给这个dao类添加一个sessionFactory的属性-->
		<bean id="udao" class="com.shu.dao.impl.UserDao">
			<property name="sessionFactory" ref="sessionFactory"/>
		</bean>
	</beans>
//这样,配置就写好了~我们只需要new classPathXmlApplicationContext().getBean("udao")就可以调用里面的方法了!
注意,在dao类中我们应该这样写(继承类实现了接口):
pubilc class UserDao extends hibernateDaoSupport implemnts IUser{
	@override
	public void addUser(UserInfo user){
		this.getHibernageTemplate().save(user);
		//....
	}
}

其实这里想讲的是:可以采用this.getHibernateTemplate().方法名来进行各种操作!

二,jdbcDaoSupport的使用攻略
		同上面的步骤,但是我们在导入的Spring的时候就需要多导入一个,见图二(至于Hibernate是默认选中的,所以就不说了);
	
	a)applicationContext.xml文件的配置
	<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" 
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	
		<!--首先需要配置数据源-->
		<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
			<!--配置连接信息-->
				<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> 
				<property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=testdb" /> 
				<property name="username" value="sa" /> 
				<property name="password" value="123456" />
		</bean>	
		
		<!--然后配置所需要的dao类就OK了,当然,不能忘记加上一个datasource的属性-->
		<bean id="udao" class="com.shu.dao.impl.UserDao">
			<property name="dataSource" ref="dataSource"/>
		</bean>
	</beans>
	
	b)配置好后,我们需要在目标dao类中这样写:
	public UserInfo extends jdbcDaoSupport implments IUser{
		@override
		public void addUser(){
			//execute是执行sql语句的方法
			this.getJdbcTemplate().execute(sql);
		}
		
		/**
		 * 查询单个的接口ResultSetExtractor中,不会自动帮你迭代,所以要自己写一个rs.next()来进行!
		 */
		public Object querySingle() {
			return super.getJdbcTemplate().query("select * from UserInfo where uid=1",new ResultSetExtractor<UserInfo>(){
				public UserInfo extractData(ResultSet rs) throws SQLException,
						DataAccessException {
					UserInfo ui=null;
					if(rs.next()){
						ui=new UserInfo();
						ui.setUid(rs.getInt("uid"));
						ui.setUname(rs.getString("uname"));
						ui.setRemark(rs.getString("remark"));
					}
					return ui;
				}
			});
		}
	
		/**
		 * 在RowMapper中,框架会自动帮你迭代,所以就不用写rs.next()了,不然会迭代两次,并且后面直接return后框架会自动给你添加到list
		 */
		public List queryList() {
			return super.getJdbcTemplate().query("select * from UserInfo",new RowMapper<UserInfo>(){
				public UserInfo mapRow(ResultSet rs, int ind)
						throws SQLException {
					UserInfo ui=new UserInfo();
					ui.setUid(rs.getInt("uid"));
					ui.setUname(rs.getString("uname"));
					ui.setRemark(rs.getString("remark"));
					return ui;
				}
			});
		}
	}
	
<!--
Author:Lovingshu's Forever
Date:2011-11-23 22:35
Remark:Too bad those days~What happend?
--> 
图二:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值