Spring随笔1

1、Spring jdbcTemplate方法解析

JdbcTemplate主要提供以下五类方法:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;

  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;

userDao.java

public void updateLoginInfo(User user){
    String sqlStr="UPDATE t_user SET last_visit=?,last_ip=?,credits=? WHERE user_id=?";
    jdbcTemplate.update(sqlStr,new Object[]{user.getLastVisit(),user.getLastIp(),user.getCredits(),user.getUserId()});
}
  • query方法及queryForXXX方法:用于执行查询相关语句;
    • query方法的签名有三个参数query(SQLStr,Object[] args,RowCallbackHandler rch)
      • sqlStr:查询的SQL语句,允许带“?”的参数占位符
      • args:SQL语句中占位符对应的参数数组
      • rch:查询结果的处理回调接口,该回调接口有一个方法processRow(ResultSet rs),该方法负责将查询到的结果装载到类似领域对象的对象实例中,下面代码就是一个RowCallbackHandler通过在匿名内部类中的回调接口实例

userDao.java

    jdbcTemplate.query(sqlStr,new Object[]{userName},new RowCallbackHandler() {

        @Override
        public void processRow(ResultSet rs) throws SQLException {
            // TODO Auto-generated method stub
            user.setUserId(rs.getInt("userId"));
            user.setUserName(userName);
            user.setCredits(rs.getInt("credits"));
        }
    });
  • call方法:用于执行存储过程、函数相关语句。

JdbcTemplate类支持的回调类:

预编译语句及存储过程创建回调:
用于根据JdbcTemplate提供的连接创建相应的语句;

  • PreparedStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的PreparedStatement;
  • CallableStatementCreator:通过回调获取JdbcTemplate提供的Connection,由用户使用该Conncetion创建相关的CallableStatement;

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

  • PreparedStatementSetter:通过回调获取JdbcTemplate提供的PreparedStatement,由用户来对相应的预编译语句相应参数设值;
  • BatchPreparedStatementSetter:;类似于PreparedStatementSetter,但用于批处理,需要指定批处理大小;

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

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

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

  • RowMapper:用于将结果集每行数据转换为需要的类型,用户需实现方法mapRow(ResultSet rs, int rowNum)来完成将每行数据转换为相应的类型。
  • RowCallbackHandler:用于处理ResultSet的每一行结果,用户需实现方法processRow(ResultSet rs)来完成处理,在该回调方法中无需执行rs.next(),该操作由JdbcTemplate来执行,用户只需按行获取数据然后处理即可。
  • ResultSetExtractor:用于结果集数据提取,用户需实现方法extractData(ResultSet rs)来处理结果集,用户必须处理整个结果集;

2、Spring中装配Dao

在Dao的实现类中并没有打开/释放Connection的代码,哪DAO类是如何访问数据库的呢?在DAO的实现类中,样板式的操作都被jdbcTemplate封装,jdbcTemplate本身需要一个DataSource,这样它就可以根据需要从DataSource中获取/返回数据。

在类UserDao和LoginLogDAO类中都有一个@Autowired注解的JdbcTemplate变量,所以我们必须事先声明一个数据源,然后定义一个JdbcTemplate Bean,通过Spring容器中的上下文自动绑定机制进行Bean的注入。

配置DAO,applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引用Spring多个Schema空间的格式定义文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans-4.2.1.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/contexr/spring-context-4.2.1.xsd">

    <!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 -->     
    <context:componemt-scan base-package="com.changhong.dao"/>  

    <!-- 定义一个 使用DBCP实现的数据源-->       
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        dextory-method="close"
        p:driverClassName="com.mysql.jdbc.Driver"
        p:url="jdbc:mysql://localhost:3306/sampledb"
        p:username="root"
        p:password="1234"/>

    <!-- 定义Jdbc模Bean -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
        p:dataSource-ref="dataSource"/>
</beans>

解释:

  • 使用Spring的扫描指定类包下的所有类,这样在类中定义的Spring注解(如@Repository,@Autowired等)才能产生作用。
  • 使用jakarta的DBCP开源数据源方案定义了一个数据源,数据库驱动类为com.mysql.jdbc.Driver,由于我们MYSQL数据库的服务端为3309,而非默认的3306,所以数据库URL中显示指定了3309端口的信息。
  • 配置JdbcTemplate Bean,将前面声明的DataSource注入到JdbcTemplate中,而这个JdbcTemplate Bean将通过@Autowired自动注入到LoginLog和UserDao 的Bean中,可见Spring可以很好的将注解配置和XML配置统一起来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值