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() { @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 ListfindAll() { String sql = "select * from t_user"; List list = super.getJdbcTemplate().query(sql, new RowMapper () { @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()); }复制代码
在实际开发中,因为数据库连接的配置信息可能会经常改动.所以我们使用properties配置文件
jdbc.driverClass=com.mysql.jdbc.Driverjdbc.jdbcUrl=jdbc:mysql:///testjdbc.user=rootjdbc.password=root复制代码
复制代码
注意:properties文件中的配置信息,要加上前缀.因为我们的配置信息有可能与spring中的冲突.会导致读取不到我们的配置信息