spring 使用JDBC
spring利用spring中的JdbcTemplate对象操作数据库
从Ioc容器中获取JdbcTemplate对象实例,通过调用JdbcTemplate对象的相应的insert,update,delete,query方法实现数据库操作
基于配置xml的spring Jdbc
- 写一个实体类
- 写一个dao层类,针对实体类的持久化操作。在类中定义一个JdbcTemplate成员变量,通过setJdbcTemplate()方法来装配bean的JdbcTemplate属性。类的方法通过JdbcTemplate的引用变量进行数据库操作,并返回相应结果集
- 写一个测试类,调用dao层的方法
- spring的配置文件applicationContext.xml中的配置
<!-- 导入资源文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
</bean>
<!-- 配置相应的bean -->
<bean id="employeeDao" ...>
<property name="jdbcTempalte" ref="jdbcTemplate">
</bean>
<!-- 配置 spring 的 Jdbc Template -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
基于注解的Spring Jdbc
- 写一个实体类
- 写一个dao层的类,针对实体类的持久化操作,添加@Repository注解。在类中定义一个JdbcTemplate成员变量,并添加@Autowire注解,自动装配bean的JdbcTemplate属性。类的方法通过JdbcTemplate的引用变量进行数据库操作,并返回相应结果集
- 写一个测试类,只需调用dao层的方法进行相应的持久化操作
- spring的配置文件applicationContext.xml中的配置
<!-- 自动扫描包 -->
<context:component-scan base-package="jdbcByZhujie"></context:component-scan>
<!-- 导入资源文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="initialPoolSize" value="${jdbc.initPoolSize}"></property>
<property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
</bean>
<!-- 配置 spring 的 Jdbc Template -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
spring事务
- 事务的使用
一般在service层的方法上使用事务,在方法上添加事务注解或者通过配置文件配置
当测试类调用service层的一个方法时,他需要调用dao层多个方法(数据库的操作)。当某个方法出现异常时可以回滚到开始的状态。 - spring中设置事务的属性
1.指定事务的传播行为,使用propagation ,即当前事务方法被另外一个事务方法调用时,如何使用事务
默认值REQUIRE,使用调用方法的事务
REQUIRE_NEW使用自己的事务,调用的事务方法的事务被挂起。
2.指定事务的隔离级别,通过设置isolation属性,最常用的取值为READ_COMMITTED
3.指定对那些异常不进行回滚。通过设置noRollbackFor属性,默认情况Spring的声明式事务对所有异常进行回滚,通常使用默认值
4.事务的只读属性,使用readOnly指定事务事务为只读,表示这个事务只读取数据不更新数据
5.事务的占用时间,使用timeout指定强制回滚之前事务可以占用的时间
基于注解的Spring 事务(Spring声明式事务)
- 写相应的实体类
- 写相应的dao层,通过注解的方式进行持久化操作
- 写service层,在这里添加事务注解@Transactional()可以配置事务的属性
- 在spring配置文件applicationContext.xml添加的配置
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 启用事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
配置事务属性
@Transactional(propagation=Propagation.REQUIRED
,isolation=Isolation.READ_COMMITTED
,noRollbackFor={UserAccountException.class}
,readOnly=true
,timeout=3)
基于配置XML的Spring 事务
- 写相应的实体类
- 写相应的dao层的类,通过配置xml的方法装配bean。即要写setJdbcTemplate()方法来获取实例
- 写service层的类(通过配置spring文件在该类中方法上添加事务)
- 在spring配置文件applicationContext.xml添加的配置
<!-- 1.配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 2.配置事务切入点,以及把事务切入点和事务关联起来(相当于在service层方法上添加注解) -->
<aop:config>
<aop:pointcut expression="execution(* txByXml.serviceImpl.*.*(..))" id="txPointCut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
<!-- 3.配置事务属性(相当于在注解@Transaction()中配置属性) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="purchase" propagation="REQUIRED"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>