--------------=======Spring 使用技巧========-------------------
1.在SSH中的DAO中执行SQL
//申请变量
Connection conn = null;
PreparementStatement ps = null;
ResultSet rs = null;
//通过this.getSession()取得Session;
Session session = this.getSession();
conn = session.connection();
...(正常执行SQL,使用方法和JDBC使用方法一致)
//释放session,不执行这一步,执行几次后系统链接池满,系统查询不再响应;(非常重要)
releaseSession(session);
//断开链接
ConnectOracleBase.closeAllConnection(rs, ps, conn);
--注意在Hibernate和DAO,通过session得到connection一定要注意,使用releaseSession(session)
释放session资源,否则链接池满,操作无法响应;
一定要配合使用:
Session session = this.getSession();
...
releaseSession(session);
2.在Hibernate或者Dao中通过Session获取Connection的方法:
2.1 通过this.getHibernateTemplate().getSessionFactory().openSession();
Session session = this.getSession();
conn = session.connection();
...
releaseSession(session);
2.2 通过this.getSession();
Session session = this.getSession();
conn = session.connection();
...
releaseSession(session);
注意:一定要使用releaseSession(session);释放session资源,否则出现多次查询,页面无响应情况;
通常使用releaseSession(org.hibernate.Session)方法与getSession()配合。
3.Spring JDBC支持
3.1 在Spring文件中添加ds(数据源)
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@localhost:1521:kevinb">
</property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
3.2 定义Bean
3.3 实现Dao
3.3.1 配置Spring applicationContext.xml中的业务实现类,规定了初始化方法(构造方式无效);
<bean id="UserImpl" class="com.kevinb.dao.UserImpl" init-method="init">
<property name="ds" ref="ds"></property>
</bean>
3.3.1 初始化JdbcTemplate jt = null;
private JdbcTemplate jt;
private DataSource ds;
public void init(){
jt = new JdbcTemplate(ds);
}
3.3.2 add or delete or update
jt.update(sql, new PreparedStatementSetter() {
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(1, userId);
ps.setString(2, userName);
}
}
);
3.3.3 view
jt.query(sql, new RowCallbackHandler(){
public void processRow(ResultSet rs) throws SQLException {
User user = new User();
user.setUserId(rs.getInt("user_id"));
user.setUserName(rs.getString("user_name"));
user.setPassword(rs.getString("password"));
list.add(user);
}
}
);
4.Spring事务管理
4.1 在Spring配置文件中配置如下:
<!-- 添加数据源ds -->
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@localhost:1521:orcl">
</property>
<property name="username" value="scott"></property>
<property name="password" value="ffffff"></property>
</bean>
<!-- 添加实现类 -->
<bean id="UserDaoImpl" class="com.kevinb.dao.UserDaoImpl" init-method="init">
<property name="ds" ref="ds"></property>
</bean>
<!-- 添加数据源事务管理 -->
<bean id="DataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ds"></property>
</bean>
<!-- 配置事务AOP -->
<bean id="UserDaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="DataSourceTransactionManager"></property>
<property name="target" ref="UserDaoImpl"></property>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop> <!-- 注意insert和*之间没有空格,如果有不能达到事务左右 -->
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
4.2 DaoImpl
需要添加ds,jt,transactionManager(PlatformTransactionManager,需要get set方法)