spring对数据库的操作

1. JdbcTemplate
1.1 首先配置JdbcTemplate
    (1).第一种方式:我们可以在自己定义的DAO 实现类中注入一个DataSource 引用来完 成JdbcTemplate 的实例化。也就是它是从外部“注入” DataSource 到DAO 中,然后 自己实例化JdbcTemplate,然后将DataSource 设置到JdbcTemplate 对象中。
    jAVA代码:    
    public class UserServiceImpl implements UserService {  
      
        private JdbcTemplate jdbcTemplate;  
          
        public JdbcTemplate getJdbcTemplate() {  
            return jdbcTemplate;  
        }  
      
                    //注入方法1     
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {  
            this.jdbcTemplate = jdbcTemplate;  
        }  
      
                   //其它方法这里省略……  
    }  
    XML代码:
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">  
        <property name = "dataSource" ref="dataSource">  
    </bean>  
    <bean id="userService" class="com.hxzy.account.jdbcTemplate.UserServiceImpl">  
         <property name="jdbcTemplate" ref="jdbcTemplate"/>  
    </bean>
    (2).第二种方式: 在 Spring 的 IoC 容器中配置一个 JdbcTemplate 的 bean,将 DataSource 注入进来,然后再把JdbcTemplate 注入到自定义DAO 中。
    jAVA代码:
    public class UserServiceImpl implements UserService {  
 
        private JdbcTemplate jdbcTemplate;  
          
        //注入方法2  
        public void setDataSource(DataSource dataSource) {  
                   this.jdbcTemplate = new JdbcTemplate(dataSource);  
        }  
       
       //其它方法省略……  
    }
    XML代码:
    <bean id="userService" class="com.hxzy.account.jdbcTemplate.UserServiceImpl">  
       <property name="dataSource" ref="dataSource"/>  
    </bean>
    (3).第三种方式: Spring 提供了 org.springframework.jdbc.core.support.JdbcDaoSupport 类 , 这 个 类 中 定 义 了 JdbcTemplate 属性,也定义了DataSource 属性,当设置DataSource 属性的时候,会创 建jdbcTemplate 的实例,所以我们自己编写的DAO 只需要继承JdbcDaoSupport 类, 然后注入DataSource 即可。
    Java代码:
    public class UserDaoImpl extends JdbcDaoSupport implements UserDao {  
      
        @Override  
        public void save(User user) {  
            String sql = null;  
            this.getJdbcTemplate().update(sql);  
        }  
            //其它方法省略……  
    }  
    XML代码:
    <bean id="userDao" class="com.hxzy.account.jdbcTemplate.UserDaoImpl">  
            <property name="dataSource" ref="dataSource"/>  
    </bean>
1.2 JdbcTemplate主要提供以下方法:
    (1).execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
    (2).update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
    (3).query方法及queryForXXX方法:用于执行查询相关语句;
    (4).call方法:用于执行存储过程、函数相关语句。
1.3 JdbcTemplate类支持的回调类:    
    (1).预编译语句及存储过程创建回调:用于根据JdbcTemplate提供的连接创建相应的语句;
        PreparedStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的PreparedStatement;
        CallableStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的CallableStatement;

    (2).预编译语句设值回调:用于给预编译语句相应参数设值;

         PreparedStatementSetter:通过回调获取JdbcTemplate提供的PreparedStatement,由用户来对相应的预编译语句相应参数设值;

         BatchPreparedStatementSetter:;类似于PreparedStatementSetter,但用于批处理,需要指定批处理大小;

    (3).自定义功能回调:提供给用户一个扩展点,用户可以在指定类型的扩展点执行任何数量需要的操作;

         ConnectionCallback:通过回调获取JdbcTemplate提供的Connection,用户可在该Connection执行任何数量的操作;

         StatementCallback:通过回调获取JdbcTemplate提供的Statement,用户可以在该Statement执行任何数量的操作;

         PreparedStatementCallback:通过回调获取JdbcTemplate提供的PreparedStatement,用户可以在该PreparedStatement执行任何数量的操作;

         CallableStatementCallback:通过回调获取JdbcTemplate提供的CallableStatement,用户可以在该CallableStatement执行任何数量的操作;

    (4).结果集处理回调:通过回调处理ResultSet或将ResultSet转换为需要的形式;

         RowMapper:用于将结果集每行数据转换为需要的类型,用户需实现方法mapRow(ResultSet rs, int rowNum)来完成将每行数据转换为相应的类型。

         RowCallbackHandler:用于处理ResultSet的每一行结果,用户需实现方法processRow(ResultSet rs)来完成处理,在该回调方法中无需执行rs.next(),该操作由JdbcTemplate来执行,用户只需按行获取数据然后处理即可。

         ResultSetExtractor:用于结果集数据提取,用户需实现方法extractData(ResultSet rs)来处理结果集,用户必须处理整个结果集;
    
2.NamedParameterJdbcTemplate
2.1 首先配置NamedParameterJdbcTemplate (跟JdbcTemplate差不多)
    (1). NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干,NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。
    (2). NamedParameterJdbcTemplate提供了命名参数,用:x代替了?
    (3). NamedParameterJdbcTemplate传参数可以用map或者SqlParameterSource
    (4). 用map的好处是:x,x的值可以自由取,但是所有参数的值都必须要放到map中去,其中的key为:后面的名称,value是你传的值
2.2 NamedParameterJdbcTemplate主要提供以下方法:    
    (1). execute方法
    (2). query及queryForXXX方法
    (3). update及batchUpdate方法
2.31
    (1). NamedParameterJdbcTemplate初始化:可以使用DataSource或JdbcTemplate 对象作为构造器参数初始化;
    (2). insert into test(name) values(:name):其中“:name”就是命名参数;
    (3). update(insertSql, paramMap):其中paramMap是一个Map类型,包含键为“name”,值为“name5”的键值对,也就是为命名参数设值的数据;
    (4). query(selectSql, paramMap, new RowCallbackHandler()……):类似于JdbcTemplate中介绍的,唯一不同是需要传入paramMap来为命名参数设值;
    (5). update(deleteSql, paramSource):类似于“update(insertSql, paramMap)”,但使用SqlParameterSource参数来为命名参数设值,此处使用MapSqlParameterSource实现,其就是简单封装Java.util.Map。    
    (6). NamedParameterJdbcTemplate类为命名参数设值有两种方式:java.util.Map和SqlParameterSource: java.util.Map:使用Map键数据来对于命名参数,而Map值数据用于设值;SqlParameterSource:可以使用SqlParameterSource实现作为来实现为命名参数设值,默认有MapSqlParameterSource和BeanPropertySqlParameterSource实现;MapSqlParameterSource实现非常简单,只是封装了java.util.Map;而BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值。

3.SimpleJdbcTemplate
    SqlParameterSource的好处是不用一个个的赋值,但是:x中的x的值必须和对象的属性名称一样

区别:
JdbcTemplate在sql语句中使用?号来作为参数替代符
NamedParameterJdbcTemplate在sql语句中使用加变量名的方式作为参数替代符。
使用这种方式最大的好处就是,如果参数比较多,并且参数位置或顺序可能变化的情况下,
使用NamedParameterJdbcTemplate是非常方便的!
SimpleJdbcTemplate加入了Java5的特性支持,例如可变参数、自动拆包封包、泛型等支持

转载于:https://my.oschina.net/u/2357905/blog/692493

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值