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)理解數據源的配置關係