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类型对象的processRow方法中对结果集进行处理 
      @Override 
      public void processRow(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);


     本文转自NightWolves 51CTO博客,原文链接:http://blog.51cto.com/yangfei520/246476,如需转载请自行联系原作者


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值