Spring与JDBC模板(IOC的应用)

Spring与Dao部分,是Spring的两大核心技术IOC与AOP的典型的应用体现。

 

为了避免直接使用JDBC而带来 的复杂且冗长的代码,Spring提供了一个强有力的模板类--jdbcTemplate来简化JDBC操作。并且,数据源DataSource对象与模板jdbcTemplate对象均可以通过Bean的形式定义在配置文件中,充分发挥了依赖注入的威力。

 

注意:JDBC模板对象是多例的

 

JdbcTemplate对象是多例的,即系统会为每一个使用模板对象的线程(方法)创建一个jdbcTemplate实例,并且在该线程(方法)结束时,自动释放jdbcTemplate实例。所以在每次使用jdbcTemplate对象时,都需要通过getJdbcTemplate()方法获取。

 

实例:

 

流程:

 

  1. Dao层继承JdbcDaoSupport,利用其中的jdbcTemplate实例对象,对SQL语句进行操作。
  2. Service层,使用IOC的依赖注入获取DAO层的实例对象,调用DAO层的实现方法。
  3. 测试层使用IOC的依赖注入获取Service层的实例对象,调用Service层的实现方法。
  4. 配置ApplicationContext.xml文件:

注册Service,注入dao   <---   注册Dao,注入jdbcTemplate   <---

注册jdbcTemplate,注入dataSource数据源   <---   注册数据源,注入四要素以及其他的配置信息。

 

代码实例笔记,以便流程复习

package edu.sdut.dao;

import java.util.List;

import org.springframework.jdbc.core.support.JdbcDaoSupport;

import edu.sdut.bean.Student;

public class StudentDaoImpl extends JdbcDaoSupport implements IStudentDao {

	@Override
	public void insertStudent(Student student) {
		// TODO Auto-generated method stub
		String sql = "insert into student(name,age) values(?,?)";
		this.getJdbcTemplate().update(sql, student.getName(),student.getAge());
	}

	@Override
	public void deleteById(int id) {
		// TODO Auto-generated method stub
		String sql = "delete from student where id = ?";
		this.getJdbcTemplate().update(sql, id);
	}

	@Override
	public void updateStudent(int id) {
		// TODO Auto-generated method stub
		String sql = "update student set name=?,age=? where id=?";
		this.getJdbcTemplate().update(sql, "txg","21",id);
	}

	@Override
	public List selectAllStudentsNames() {
		// TODO Auto-generated method stub
		String sql = "select name from student";
		return this.getJdbcTemplate().queryForList(sql, String.class);
	}

	@Override
	public String selectStudentNameById(int id) {
		// TODO Auto-generated method stub
		String sql = "select name from student where id = ?";
		return this.getJdbcTemplate().queryForObject(sql, String.class,id);
	}

	/**
	 * 这了需要借助RowMapper接口,实现对数据的手动封装
	 */
	@Override
	public List selectAllStudents() {
		// TODO Auto-generated method stub
		String sql = "select * from student";
		
		return this.getJdbcTemplate().query(sql, new StudentRowMapper());
	}

	@Override
	public Student selectStudentById(int id) {
		// TODO Auto-generated method stub
		String sql = "select * from student where id=?";
		return this.getJdbcTemplate().queryForObject(sql, new StudentRowMapper(),id);
	}

}

 

package edu.sdut.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import edu.sdut.bean.Student;

public class StudentRowMapper implements RowMapper {

	/**
	 * rs:当查询出总的结果集后,框架会遍历这个结果集,
	 * 每一次遍历的一行数据,都会被存放到这个方法的rs参数中。
	 * 也就是说,这里的rd代表的是一行数据,并非所有查询结果
	 * 换个角度来说,只要能执行到这个方法,就说明这里的rs就不会是空的
	 */
	@Override
	public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
		
		Student student = new Student();
		student.setId(rs.getInt("id"));
		student.setName(rs.getString("name"));
		student.setAge(rs.getInt("age"));
		
		return student;
	}

}

 


 

    
	
    
    
    
     
     
    
    
    
     
      
     	 
    	 
    	 
     	 
      
     
     
    
    
    	
    	
       
    
	
	
		
		
		
	
	
	
	
	
		
		
	

 

 

 

你可能感兴趣的:(#,T-JAVA)