Spring的JDBC模板
Spring中提供了一个可以操作数据库的对象,这个对象封装了jdbc技术.这个对象就是JdbcTemplate,它与DBuitls中的QueryRunner很相似.
步骤:
1. 导包
基本4个组件包+2个日志包+c3p0连接池包+数据库驱动包+spring jdbc +spring tx 事务包
2. JDBC模板
public void fun() throws Exception {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql:///test");
dataSource.setUser("root");
dataSource.setPassword("root");
JdbcTemplate jt = new JdbcTemplate(dataSource);
String sql = "insert into t_user values(null,'tom')";
jt.update(sql);
}
3. JdbcTemplate的API
- 增删改
@Override
public void save(User u) {
String sql = "insert into t_user value(null,?)";
super.getJdbcTemplate().update(sql, u.getName());
}
@Override
public void delete(Integer id) {
String sql = "delete from t_user where id = ?";
super.getJdbcTemplate().update(sql, id);
}
@Override
public void update(User u) {
String sql = "update t_user set name=? where id =?";
super.getJdbcTemplate().update(sql, u.getName(), u.getId());
}
查询
- 查询的返回值是一个对象
@Override
public User find(Integer id) {
String sql = "select * from t_user where id =?";
User us = super.getJdbcTemplate().queryForObject(sql, new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int arg1) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
return user;
}
}, id);
return us;
}
- 查询的返回值是一个整数(聚合函数)
@Override
public int findAllRecord() {
String sql = "select count(*) from t_user";
Integer record = super.getJdbcTemplate().queryForObject(sql, Integer.class);
return record;
}
- 查询的返回值是一个集合
@Override
public List<User> findAll() {
String sql = "select * from t_user";
List<User> list = super.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;
}
为了不需要手动准备JDBC模板,我们可以继承一个类,从这个类中的方法中获得即可-JdbcDaoSupport
注意:当我们继承这个类的时候,我们直接调用父类的super.getJdbcTemplate()这个方法,即可获得JdbcTemplate.而配置文件中的依赖也不需要注入JdbcTemplate.我们直接在所要执行方法的对象依赖注入dataSource数据源即可.
public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
@Override
public void save(User u) {
String sql = "insert into t_user value(null,?)";
super.getJdbcTemplate().update(sql, u.getName());
}
<bean name="UserDao" class="madness.dao.UserDaoImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
在实际开发中,因为数据库连接的配置信息可能会经常改动.所以我们使用properties配置文件
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///test
jdbc.user=root
jdbc.password=root
<bean name="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClass}"></property>
<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
<property name="user" value="${jdbc.user}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
注意:properties文件中的配置信息,要加上前缀.因为我们的配置信息有可能与spring中的冲突.会导致读取不到我们的配置信息