spring对JDBC的支持

本文介绍Spring框架中的JdbcTemplate类,展示了如何通过简单的配置实现数据库操作,包括增删查改等功能,并提供了一个具体的DAO实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从来没使用过,感觉还是很有意思的,有工夫可以玩完,呵呵。
 
spring提供了类org.springframework.jdbc.core.JdbcTemplate,它借助配置文件获取数据库信息,实现了对JDBC开发过程中的加载驱动,创建连接,执行sql语句,对事务进行处理以及一些数据类型转化等操作的封装。只需要程序员对其传入sql语句和必要的参数即可轻松进行JDBC编程。
 
Dao类:
public class StudentDaoJDBCImpl implements StudentDao {
  private JdbcTemplate template;
        //template的setter.getter方法
  @Override
  public void delete(Student s) {
    deleteById(s.getId());
  }

  @Override
  public void deleteById(Integer id) {
    String sql = "delete from spring_student where id=?";
    Object[] args = { id };// 数组元素依次对应sql语句中的?
    template.update(sql, args);// 只需传sql语句和参数数组,template会自动加载驱动,创建连结,执行sql语句,并且进行事务处理
  }

  @Override
  public void insert(Student s) {
    String sql = "insert into spring_student(id,name,birthday) values(spring_stu_seq.nextval,?,?)";
    Object[] args = { s.getName(), s.getBirthday() };//template会对Date类型数据进行转化
    template.update(sql, args);
  }

  @Override
  public Student queryById(Integer id) {
    String sql = "select id,name,birthday from spring_student where id=?";
    Object[] args = { id };
    final Student s = new Student();
    template.query(sql, args, new RowCallbackHandler() {
      //它要求程序员自己在RowCallbackHandler类型对象的proce***ow方法中对结果集进行处理
      @Override
      public void proce***ow(ResultSet rs) throws SQLException {
        if (!(rs.isAfterLast())) {// 把查询结果封装到一个对象中
          s.setId(rs.getInt(1));
          s.setName(rs.getString(2));
          s.setBirthday(rs.getDate(3));
        }
      }
    });
    if (s.getId() == null) {
      return null;
    } else {
      return s;
    }
  }

  @Override
  public List<Student> queryAll() {
    String sql="select id,name,birthday from spring_student";
    List<Student> ret=template.query(sql, new RowMapper(){
      //它要求程序员自己在RowMapper类型对象的mapRow方法中说明结果集中每条记录如何封装成一个对象,
            //template.query方法会自动把对象加入到集合中。
      @Override
      public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
        //rs:结果集
        //rowNum:迭代次数
        Student s=new Student();
        s.setId(rs.getInt(1));
        s.setName(rs.getString(2));
        s.setBirthday(rs.getDate(3));
        return s;
      }
        
    });
    return ret;
  }
}
 
配置:
<beans>
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
      <value>oracle.jdbc.driver.OracleDriver</value>
    </property>
    <property name="url">
      <value>jdbc:oracle:thin:@localhost:1521:orcl10</value>
    </property>
    <property name="username">
      <value>scott</value>
    </property>
    <property name="password">
      <value>yf123</value>
    </property>
  </bean>
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource">
      <ref local="dataSource"/>
    </property>
  </bean>
  <bean id="dao" class="com.yangfei.spring.jdbc.dao.StudentDaoJDBCImpl">
    <property name="template">
      <ref local="jdbcTemplate"/>
    </property>
  </bean>
</beans>
 
测试:
public static void main(String[] args) {
    ApplicationContext ctx=new ClassPathXmlApplicationContext("jdbc.xml");
    StudentDao dao=(StudentDao)ctx.getBean("dao");
    System.out.println(dao.queryById(2));
    
    //dao.deleteById(1);
    Student s=new Student();
    s.setName("xiaozhang");
    s.setBirthday(new Date());
    dao.insert(s);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值