spring与jdbc的结合使用

标签: spring jdbc 结合 | 发表时间:2012-02-26 10:24 | 作者:liuchangqing123
出处:http://blog.csdn.net

利用spring可以解决事务处理时的许多问题,同spring实现其他的功能相似,spring提供了两种不同的方式实现与jdbc的结合,两种方式是注解和xml配置方式。

1.   spring和jdbc的结合

1)       建立PersonService接口:

public interface PersonService {
    /**
     * 保存Person对象
     *
     * @param person
     */
    public void save(Person person);
 
    /**
     * 得到person对象
     *
     * @param personId
     */
    public Person getPerson(Integer personId);
    /**
     * 得到所有的Person
     * @return
     */
    public List<Person> getPersons();
 
    /**
     * 更新person
     *
     * @param person
     */
    public void update(Person person);
 
    /**
     * 删除person
     */
    public void delete(Integer id);
 
}


2)       编写接口的实现类,并且将该bean纳入到spring的事务管理中(通过注解方式):

@Transactional
public class PersonServiceBean implements PersonService {
    private JdbcTemplate jdbcTemplate;
 
    public void setDataSource(DataSource dataSource) {
       this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
 
    @Override
    public void delete(Integer id) {
       jdbcTemplate.update("delete fromperson where id=?", new Object[] { id },
              new int[] { java.sql.Types.INTEGER });
       jdbcTemplate.update("delete frompersonsss where id=2", new Object[] { id },
              new int[] { java.sql.Types.INTEGER });
    }
 
    @Override
    public Person getPerson(Integer personId) {
 
       return (Person) jdbcTemplate.queryForObject(
              "select *from person where id=?", new Object[] {personId },
              new PersonRowMapper());
    }
 
    @Transactional(propagation =Propagation.NOT_SUPPORTED)
    @Override
    public List<Person> getPersons() {
 
       return (List<Person>) jdbcTemplate.query("select * from person",
              new PersonRowMapper());
    }
 
    @Override
    public void save(Person person) {
 
       jdbcTemplate.update("insert intoperson(name) values(?)",
              new Object[] { person.getName() },
              new int[] { java.sql.Types.VARCHAR });
    }
 
    @Override
    public void update(Person person) {
       jdbcTemplate.update("updateperson set name=? where id=?",
              new Object[] { person.getName(), person.getId() }, new int[] {
                     java.sql.Types.VARCHAR, java.sql.Types.INTEGER });
 
    }
 
}


3)       注意在bean.xml中的配置:

<?xml version="1.0"encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"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/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
          http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd
          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
 
    <context:property-placeholder location="classpath: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>
 
    <bean id="txManager"
       class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource"ref="dataSource" />
    </bean>
 
   
    <tx:annotation-driven transaction-manager="txManager"/>
 
    <bean id="personService" class="com.lcq.service.impl.PersonServiceBean">
       <property name="dataSource"ref="dataSource" />
    </bean>
</beans>


4)       编写测试类:

public class PersonServiceTest {
 
    private static PersonService personService;
 
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
 
       try {
           ApplicationContext cxt = new ClassPathXmlApplicationContext(
                  "beans.xml");
           personService = (PersonService) cxt.getBean("personService");
       } catch (Exception e) {
           e.printStackTrace();
       }
 
    }
 
    @Test
    public void save() {
       personService.save(new Person("张三"));
 
    }
 
    @Test
    public void getPerson() {
       System.out.println(personService.getPerson(1).getName());
    }
 
    @Test
    public void update() {
       Person person = personService.getPerson(1);
       person.setName("name");
       personService.update(person);
    }
 
    @Test
    public void del(){
       personService.delete(1);
 
    }
    @Test
    public void getPersons(){
       for(Person person:personService.getPersons())
           System.out.println(person.getName());
    }
                        
}
使用xml的配置方式实现spring与jdbc的结合使用,在bean.xml中的关键配置:
<aop:config>
       <aop:pointcut id="transactionPointcut"
           expression="execution(* com.lcq.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="*"/>
       </tx:attributes>
</tx:advice>


作者:liuchangqing123 发表于2012-2-26 10:24:11 原文链接
阅读:7 评论:0 查看评论

相关 [spring jdbc 结合] 推荐:

spring与jdbc的结合使用

- - CSDN博客推荐文章
利用spring可以解决事务处理时的许多问题,同spring实现其他的功能相似,spring提供了两种不同的方式实现与jdbc的结合,两种方式是注解和xml配置方式. 1.   spring和jdbc的结合. 1)       建立PersonService接口:. * 得到所有的Person. 2)       编写接口的实现类,并且将该bean纳入到spring的事务管理中(通过注解方式):.

Spring对JDBC异常的封装

- - 编程语言 - ITeye博客
      Spring对JDBC异常的封装来自于《Expert One-on-One J2EE Design and Development》一书所持的观点. 书中指明jdbc使用单一java.lang.SQLException异常表示数据访问时发生的所有异常是一 个糟糕的设计. 在JDBC API 4.0以前的版本中,异常处理功能极其有限.

配置Spring JDBC的事务回滚失效

- - CSDN博客推荐文章
今天配置Mysql DBCP连接池事务回滚失效,竟然浪费了我一下午的时间去调研,问了好多人也都没发现,最后还得靠自己,总结问题如下:. 1、Mysql数据库用的是MyISAM表结构而非InnerDB(浪费了两个小时). 2、网上说的默认情况下,一个有事务方法, 遇到RuntiomeException 时会回滚.

Spring Boot 2 整合 shard-jdbc 中间件,实现数据分库分表

- - IT瘾-dev
以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中. 每个库的结构都一样;数据都不一样;. 所有库的并集是全量数据;. 以字段为依据,按照一定策略,将一个表中的数据拆分到多个表中. 每个表的结构都一样;数据都不一样;. 所有表的并集是全量数据;. 二、Shard-jdbc 中间件. 1)、Sharding-JDBC直接封装JDBC API,旧代码迁移成本几乎为零.

HA-JDBC -

- -
The state manager component is responsible for storing the active status of each database in the cluster, as well as any durability state.

裴东辉-Spring集成HikariCP(另外一款高性能的 JDBC 连接池) - 裴东辉

- - 博客园_首页
HikariCP简介( http://brettwooldridge.github.io/HikariCP/):. 一、项目整体布局(为了区分HikariCP依赖的jar包,jar包都以Hikari-1.3.8-为前缀). 二、测试的类,HikariCPSpring.java. 三、日志打印文件,log4j.properties.

Apache Shiro和Spring boot的结合使用

- - 企业架构 - ITeye博客
实际上在Spring boot里用Spring Security最合适,毕竟是自家东西,最重要的一点是Spring Security里自带有csrf filter,防止csrf攻击,shiro里就没有. 但是Spring Security有点太复杂,custmize起来比较费力,不如shiro来的简单.

spring mvc +spring aop结合注解的 用户操作日志记录

- - 行业应用 - ITeye博客
参考了网上的一些 文章 但是他们写的不是很全  自己也是经过了一些摸索  可以实现 记录 spring mvc controller层操作记录. 一个关注点的模块化,这个关注点可能会横切多个对象. 事务管理是J2EE应用中一个关于横切关注点的很好的例子. AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @Aspect 注解(@AspectJ风格)来实现.

JDBC性能小贴

- - 开源软件 - ITeye博客
本文收集了一些用于提升JDBC性能的方法. Java应用或者JavaEE Web应用的性能是很重要的,尤其是数据库后端对应用的性能影响. 不知你是否经历过Java、JavaEE web应用非常慢的案例没有(处理一个简单的请求都要花上好几秒的时间用于数据库访问,分页、排序等). 下面这些贴士也许能提升Java应用的性能.

oracle的jdbc驱动

- - Oracle - 数据库 - ITeye博客
oracle的jdbc驱动主要有下面三类:.   1、JDBC OCI: oci是oracle call interface的缩写,此驱动类似于传统的ODBC 驱动. 因为它需要Oracle Call Interface and Net8,所以它需要在运行使用此驱动的JAVA程序的机器上安装客户端软件,其实主要是用到orcale客户端里以dll方式提供的oci和服务器配置.