JDBCTemplate模板对象是Spring框架提供了的一个可以操作数据库的对象,封装了JDBC技术。
配置文件applicationContext.xml
首先要导入SpringJDBC包和SpringTX包。而且JDBCTemplate需要一个连接池,所以我们也要导入C3p0连接池的包。
public class Demo {
@Resource(name="userDao")
private UserDao ud;
@Test
public void fun1() throws Exception{
//0 准备连接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql:///hibernate_32");
dataSource.setUser("root");
dataSource.setPassword("1234");
//1 创建JDBC模板对象
JdbcTemplate jt = new JdbcTemplate();
jt.setDataSource(dataSource);
//2 书写sql,并执行
String sql = "insert into t_user values(null,'rose') ";
jt.update(sql);
}
这是一个简单的Demo,实现了新增用户的功能。先创建JdbcTemplate对象,构造参数可以传入一个连接池,也可以空参构造。然后这个对象有两个核心的方法,update方法和queryForObject方法.
update方法:用户数据库更新(增删改),dbcTemplate对这个对象进行了重载,用的较多的是传两个参数的方法,第一个是我们需要执行的sql语句,第二个是我们要传的sql语句中预处理的占有位符号传参数,这个参数类型是任意个数的占位符。
public void insertUser(User u) {
String sql = "insert into t_user values(null,?) ";
JdbcTemplate jt = new JdbcTemplate(C3p0datasource.getDataSource());
jt.update(sql, u.getName());
}
queryForObject方法:用于数据库信息的读取,dbcTemplate对这个对象进行了重载,通常需要的参数为sql语句,一个rowmapper对象和sql预处理的占位符参数(任意个数)。其中这个rowmapper对象是这个模板对象封装结果集的的一个对象,我们需要去手动实现一下。查询信息时,模板对象会遍历查询到的结果集,然后把每次查询到的对象以ResultSet的形式反馈给rowmapper对象,我们要做的,就是通过这个ResultSet取出其中的值然后封装到一个对象(也可以是map)。然后模板类把这个对象(或者是对象的list)返回给我们。
//获取单个对象
public User getById(Integer id) {
String sql = "select * from t_user where id = ? ";
JdbcTemplate jt = new JdbcTemplate(C3p0datasource.getDataSource());
User u1 = jt.getJdbcTemplate().queryForObject(sql,new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int arg1) throws SQLException {
//把结果集封装到对象
User u = new User();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
return u;
}}, id);
}
//获取对象list
public List<User> getAll() {
String sql = "select * from t_user ";
JdbcTemplate jt = new JdbcTemplate(C3p0datasource.getDataSource());
List<User> list = jt.getJdbcTemplate().query(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int arg1) throws SQLException {
//把结果集封装到对象
User u = new User();
u.setId(rs.getInt("id"));
u.setName(rs.getString("name"));
return u;
}});
return list;
}
SpringDaoSupport类
以上操作数据库的方法我们要配置到容器中时,要配置三个内容,连接池,JdbcTemplate,Dao层的业务类,然后把连接池注入要JdbcTemplate,把JdbcTemplate注入到Dao类中。其实,有一个叫做SpringDaoSuppor的类,他其中封装了JdbcTemplate对象,我们只需要给他传入一个连接池,然后让我们的dao层的类继承它就可以直接调用其中的模板对象了,这样可以在配置容器时只需配置连接池和dao层的类。
public class UserDaoImpl extends JdbcDaoSupport{
public void insertUser(User u) {
String sql = "insert into t_user values(null,?) ";
super.getJdbcTemplate().update(sql, u.getName());
}
}