采用spring进行JDBC操作

1、配置spring JDBC

spring提供了进行jdbc操作的替代方法;实现了JDBC相关操作封装,使用起来更加灵活、方便。

spring提供了spring jdbc 进行jdbc操作,maven配置为:


    org.springframework
    spring-jdbc
    5.0.2.RELEASE

2、使用spring jdbctemplate DML数据

在Spring JDBC开发中,可以使用 JdbcTemplate 和 JdbcDaoSupport 类来简化整个数据库的操作过程。使用jdbctemplate可以避免频繁的创建、关闭连接,处理异常,数据更新示例代码如下:

private DataSource dataSource;
	private JdbcTemplate jdbcTemplate;
		
//================datasource通过spring进行配置传入=================
	public void setDataSource(DataSource dataSource) {
		this.dataSource = dataSource;
	}

	public void insert(Customer customer){			
		String sql = "INSERT INTO CUSTOMER " +
			"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
		jdbcTemplate = new JdbcTemplate(dataSource);
		jdbcTemplate.update(sql, new Object[] { customer.getCustId(),
			customer.getName(),customer.getAge()  
		});
	}
还可以继承 JdbcDaoSupport类,实现Dao(数据库对象操作类)接口,可无需传入datasource属性,
public class JdbcCustomerDAO extends JdbcDaoSupport implements CustomerDAO
	{
	   //no need to set datasource here
	   public void insert(Customer customer){
			
		String sql = "INSERT INTO CUSTOMER " +
			"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
				 
		getJdbcTemplate().update(sql, new Object[] { customer.getCustId(),
				customer.getName(),customer.getAge()  
		});
				
	}

	
	

		
		
		
		
	
	


	
		
	
	
 
  在Spring JDBC开发,它总是建议使用,总是建议使用 JdbcTemplate和JdbcDaoSupport,而不使用自己的JDBC编程代码。3、使用JDBCtemplate查询数据 
  

JDBCtemplate查询数据可分为查询多行数据和单行数据,不管是查询返回多行数据还是单行数据,均需实现RowMapper接口,以填充行数据内容;当然也可以使用spring提供的BeanPropertyRowMapper对象,该对象返回类似列名ID'或下划线“列名_ID”作为字段名称的行对象;使用BeanPropertyRowMapper对象可替代实现RowMapper接口;使用BeanPropertyRowMapper查询单行示例代码如下示意:

public Customer findByCustomerId2(int custId){
		 
	String sql = "SELECT * FROM CUSTOMER WHERE CUST_ID = ?";
 
	Customer customer = (Customer)getJdbcTemplate().queryForObject(
			sql, new Object[] { custId }, 
			new BeanPropertyRowMapper(Customer.class));
	return customer;
}
查询多行:

public List findAll(){
		
	String sql = "SELECT * FROM CUSTOMER";		 
	List customers = new ArrayList();	
        List rows = getJdbcTemplate().queryForList(sql);
        //还可以使用query方法查询多行        
        //List rows = getJdbcTemplate().query(sql);
       for (Map row : rows) {
		Customer customer = new Customer();
		customer.setCustId((Long)(row.get("CUST_ID")));
		customer.setName((String)row.get("NAME"));
		customer.setAge((Integer)row.get("AGE"));
		customers.add(customer);
	}
		
	return customers;
}
查询单值

public String findCustomerNameById(int custId){		
	String sql = "SELECT NAME FROM CUSTOMER WHERE CUST_ID = ?";		 
	String name = (String)getJdbcTemplate().queryForObject(
			sql, new Object[] { custId }, String.class);	
	return name;
		
}
4、使用JDBCtemplate进行数据的批量更新

使用batchUpdate方法进行批量更新,注意使用该方法需要实例化batchPreparedStatementSetter类,并重写该对象的setValues与getBatchSize方法

 
  
public void insertBatch(final List customers){
  String sql = "INSERT INTO CUSTOMER " +
	"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";	
  getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter() {
	@Override
	public void setValues(PreparedStatement ps, int i) throws SQLException {
		Customer customer = customers.get(i);
		ps.setLong(1, customer.getCustId());
		ps.setString(2, customer.getName());
		ps.setInt(3, customer.getAge() );
	}	
	@Override
	public int getBatchSize() {
		return customers.size();
	}
  });
}

当然也可以使用batchUpdate方法直接执行sql语句
getJdbcTemplate().batchUpdate(new String[]{sql});

5、查询和数据更新时还可以使用SimpleJdbcTemplate对象,该对象不是替代jdbcTemplate,而是使jdbctemplate对数据库的访问和操作更加人性化和简单。具体使用方法参见:

http://www.yiibai.com/spring/spring-simplejdbctemplate-querying-examples.html#article-start



你可能感兴趣的:(采用spring进行JDBC操作)