您的位置:首页 > 编程语言 > Java开发

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

2011-11-23 22:34 531 查看
<!--
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?
-->
图二:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: