JdbcTemplate简介
Spring对数据库的操作在jdbc上面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。JdbcTemplate位于spring-jdbc-4.3.7.RELEASE.jar中。
其全限定命名为org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate还需一个spring-tx-4.3.7.RELEASE.jar这个包包含了一下事务和异常控制
实例
package com.mysql;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
public class TestJDbc {
private ApplicationContext ctx =null;
private JdbcTemplate jdbcTemplate;
{
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
jdbcTemplate = (JdbcTemplate)ctx.getBean("jdbcTemplate");
}
@Test
public void testDataSource() throws SQLException{
DataSource dataSource = ctx.getBean(DataSource.class);
System.out.println(dataSource.getConnection());
}
@Test
public void updateTest(){
String sql = "UPDATE person SET age = ? WHERE id = ?";
jdbcTemplate.update(sql,"16",1);
}
@Test
public void testBatchUpdate(){
String sql = "INSERT INTO person(id,name,age) VALUES(?,?,?)";
List<Object[]> batchArgs = new ArrayList<>();
batchArgs.add(new Object[]{"2","ming","15"});
batchArgs.add(new Object[]{"3","xin","156"});
batchArgs.add(new Object[]{"4","wang","14"});
jdbcTemplate.batchUpdate(sql, batchArgs);
}
@Test
public void testQueryForObject(){
String sql = "SELECT id , name ,age,address addr FROM person WHERE id =?";
//用别名来映射数据库中字段和类之间的属性的关系
RowMapper<Person> rowMapper = new BeanPropertyRowMapper<>(Person.class);
Person per = jdbcTemplate.queryForObject(sql,rowMapper,1);
System.out.println(per);
}
@Test
public void testQueryForList(){
String sql ="SELECT id , name , age ,address addr FROM person WHERE id >?";
RowMapper<Person> rowMapper = new BeanPropertyRowMapper<>(Person.class);
List<Person> perList = jdbcTemplate.query(sql, rowMapper,1);
System.out.println(perList);
}
}
总结
(1)使用RowMapper来进行数据库中每行记录和实体类的匹配
(2)用别名来映射数据库中字段和类之间的属性的关系
(3)使用org.springframework.jdbc.core.RowMapper
而不是javax.swing.tree.RowMapper
(4)使用javax.sql.DataSource
而不是javax.activation.DataSource
(5)理解数据源的配置关系