当前位置:编程学习 > JAVA >>

spring小结二

五、Spring数据库操作
    1.Spring+JDBC
        (1)特点
            静态代码+动态变量 = jdbc编程。在spring中动态变量可以用注入的形式给予,这样的编程方式适合包装成模版,
            静态代码构成了模版,而动态变量则是需要传入的参数.
        (2)引入DataSource
            在spring中注入DataSource,一般采用c3p0
        (3)核心类JdbcTemplate
            * 它是基于模版的设置
            * 完成了资源的创建和释放的工作
            * 简化为我们对JDBC的操作
            * 完成了对JDBC的核心流程的工作,包括SQL语句的创建和执行
            * 仅需要传递DataSource就可以把它实例化
            * JdbcTemplate只需要创建一次
            * JdbcTemplate是线程安全类
        (4)使用JdbcTemplate
            在Dao类中,用JdbcTemplate作为属性,用spring对JdbcTemplate进行注入.
            再对jdbcTemplate进行DataSource注入.
        (5)继承JdbcDaoSupport
            在Dao类中,继承JdbcDaoSupport,因为JdbcDaoSupport已经有了jdbcTemplate的引用,所以
            只要继承jdbcDaoSupport就相当于有了jdbcTemplate属性.
        (6)使用properties文件
            <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
                <property name="locations">
                    <list>
                        <value>jdbc.properties</value>
                    </list>
                </property>
            </bean>
            或者
            <context:property-placeholder location="classpath:jdbc.properties" />    
            jdbc.properties文件中配置连接信息
                jdbc.driverclass=com.mysql.jdbc.Driver
                jdbc.url=jdbc:mysql://localhost:3306/databasename
                jdbc.username=root
                jdbc.password=root
                
                c3p0.pool.size.max=10
                c3p0.pool.size.min=2
                c3p0.pool.size.ini=3
                c3p0.pool.size.increment=2
        (7)RowMapper的使用
            * 由来:    在jdbc的操作中,有很多情况下是要将ResultSet里的数据封装到一个持久化Bean里,再把持久化
                    Bean封装到集合中,这样会造成大量的代码的重复,不利于代码重用.而RowMapper正好解决这个问题.
            * 使用:
                首先,写一个类实现RowMapper接口
                public class AccountMapper implements RowMapper {
                    public Object mapRow(ResultSet rs, int rowNum) throws SQLException{
                        Account account = new Account();
                        account.setAccountid(ts.getString("accountid"));
                        account.setBalance(rs.getDouble("balance"));
                        return account;
                    }
                }
                其次,在回调接口中,作为参数进行传入即可
                    this.getJdbcTemplate().query(sql,new AccountMapper());
        (8)Spring的事务管理器
            * spring事务管理器介绍
                spring没有直接管理事务,而是将管理事务的责任委托给JTA或响应的持久性机制所提供的某个特定平台的事务实现
                org.springframework.jdbc.datasource.DataSourceTransactionManager
                    在单一的JDBC Datasource中的管理事务
                org.springframework.orm.hibernate3.HibernateTransactionManager
                    当持久化机制是hibernate时,用它来管理事务》
                org.springframework.jdo.JdoTransactionManager
                    当持久化机制是Jdo时,用它来管理事务
                org.springframework.transaction.jta.JtaTransactionManager
                    使用一个JTA实现来管理事务,在一个事务跨越多个资源时必须使用
                org.springframework.orm.ojb.PersistenceBrokerTransactionManager
                    当apache的ojb用作持久化机制时,用它来管理事务.
        (9)spring事务的配置
            * 以xml配置的形式(***号表示需要引入的名称空间)
 
[html]  
<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:tx="http://www.springframework.org/schema/tx"   
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
    &n
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,