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中的衝突.會導致讀取不到我們的配置資訊