Spring+JDBC集成学习笔记(可参考ppt附件38-46页)

 

 
使用Spring+JDBC集成步骤如下
l
1、配置简单数据源
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/> 
    <property name="url" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&amp;characterEncoding=UTF-8"/> 
    <property name="username" value="root"/> 
    <property name="password" value="123456"/> 
     .....略 
  </bean> 
 
l
2配置事务。配置事务时,需要在xml配置文件中引入用于声明事务的tx命名空间(见下页),事务的配置方式有两种:注解方式和基于XML配置方式。
 
在spring配置文件中引入用于声明事务的tx命名空间(红色部分) 
 
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
 
</beans>
3配置数据源
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&amp;characterEncoding=UTF-8"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
     <!-- 连接池启动时的初始值 -->
	 <property name="initialSize" value="1"/>
	 <!-- 连接池的最大值 -->
	 <property name="maxActive" value="500"/>
	 <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
	 <property name="maxIdle" value="2"/>
	 <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
	 <property name="minIdle" value="1"/>
  </bean>

使用<context:property-placeholder location=“jdbc.properties”/>属性占位符
 4、若使用占位符配置数据源,对3作如下修改
<context:property-placeholder location=“jdbc.properties”/> 
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
   <property name="driverClassName" value="${driverClassName}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
     <!-- 连接池启动时的初始值 -->
	 <property name="initialSize" value="${initialSize}"/>
	 <!-- 连接池的最大值 -->
	 <property name="maxActive" value="${maxActive}"/>
	 <!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
	 <property name="maxIdle" value="${maxIdle}"/>
	 <!--  最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
	 <property name="minIdle" value="${minIdle}"/>
  </bean>
 5、若采用注解方式配置事务如下:
采用注解方式
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  	<property name="dataSource" ref="dataSource"/>
  </bean>
 <!– 采用@Transactional注解方式使用事务  -->
  <tx:annotation-driven transaction-manager="txManager"/>
 
 
@Service @Transactional//事务主要针对方法,若能方法中含多个sql语句,会要没一次性执行完,要么都回滚。不会执行方法上面部分sql,仅回滚下面部分
public class PersonServiceBean implements PersonService {
}
 6、若采用xml方式配置事务如下:
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  	<property name="dataSource" ref="dataSource"/>
</bean>
<aop:config>
  	<aop:pointcut id="transactionPointcut" expression="execution(* cn.itcast.service..*.*(..))"/>
  	<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointcut"/>
</aop:config> 
<tx:advice id="txAdvice" transaction-manager="txManager">
	  <tx:attributes>
	    <tx:method name="get*" read-only="true" propagation="NOT_SUPPORTED"/>
	    <tx:method name=“*”/>//默认是开启事务的如:propagation="SUPPORTED”
	  </tx:attributes>
</tx:advice>
7、使用JdbcTemplate进行insert/update/delete操作
@Service @Transactional
public class PersonServiceBean implements PersonService {
	private JdbcTemplate jdbcTemplate;
	@Resource
	public void setDataSource(DataSource dataSource) {
	    this.jdbcTemplate = new JdbcTemplate(dataSource);
	}
    //添加
	public void save(Person person) throws Exception{
		jdbcTemplate.update("insert into person (name) values(?)", 
		new Object[]{person.getName()}, new int[]{java.sql.Types.VARCHAR});//三个参数的含义:1、sql语句2?代表的参数值3参数类型(指sql中的类型,一般每个类型代表一个常量,所以会是一个整型数组)
	}
}
 
8、使用JdbcTemplate获取一条记录
@Service @Transactional
public class PersonServiceBean implements PersonService {
	private JdbcTemplate jdbcTemplate;
	@Resource
	public void setDataSource(DataSource dataSource) {
	    this.jdbcTemplate = new JdbcTemplate(dataSource);
	}
 	public Person getPerson(Integer id){
		RowMapper rowMapper = new RowMapper(){
			public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
				Person person = new Person();
				person.setId(rs.getInt("id"));
				person.setName(rs.getString("name"));
				return person;
			}
		};
		return (Person)jdbcTemplate.queryForObject("select * from person where id=?", 
				new Object[]{id}, new int[]{java.sql.Types.INTEGER}, rowMapper);
	}}
 9、 使用 JdbcTemplate 获取多条记录
@Service @Transactional
public class PersonServiceBean implements PersonService {
	private JdbcTemplate jdbcTemplate;
	@Resource
	public void setDataSource(DataSource dataSource) {
	    this.jdbcTemplate = new JdbcTemplate(dataSource);
	}
	public List<Person> getPersons(){
		RowMapper rowMapper = new RowMapper(){
			public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
				Person person = new Person();
				person.setId(rs.getInt("id"));
				person.setName(rs.getString("name"));
				return person;
			}
		};
		return jdbcTemplate.query("select * from person", rowMapper);
	}
}
 

你可能感兴趣的:(spring,AOP,mysql,bean,jdbc)