SpringData JDBC

JasonTam發表於2018-08-16

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

相關文章