(一) JdbcTemplate 的常用方法
- update (更新數據 包括 insert delete update方法)
- batchUpdate (批量更新)
- queryForObject (查詢單行數據,查詢列數據等)
- query (批量查詢)
(二) 具體應用
1. 首先在數據庫中創建一個表,並在表中加入部分數據方便操作。
2. 連接數據庫,操作在上一篇寫過,連接成功後開始進行操作。
3. 配置文件中配置JdbcTemplate 的信息
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
3. 更新操作(update)
直接調用 JdbcTemplate 的Update 方法,直接調用 sql 語句 ( delete 和 insert 方法同樣)
/*
* 實現數據的 DELETE update insert
*
*/
@Test
void testjdbctemplate() {
String sql="update Person set name=? where id=?";
jdbcTemplate.update(sql, "bbb",4);
}
4.批量更新
調用 JdbcTemplate 的 batchupdate 方法 。
這裏需要注意的是 List 的應用。通過 add 添加信息
/*
* 實現批量的 select update insert
*/
@Test
public void testlistjdbctemplate() {
String sql="insert into person(id,name,age) value (?,?,?)";
List<Object[]> batchArgs=new ArrayList<>();
batchArgs.add(new Object[]{5,"ccc",20});
batchArgs.add(new Object[] {6,"ddd",30});
batchArgs.add(new Object[] {7,"eee",40});
jdbcTemplate.batchUpdate(sql, batchArgs);
}
5. 單條查詢 (獲取數據庫中的對象)
要保證已經創建了實體類,並有實體類的顯示方法。
注意調用的是queryForObject方法中的queryForObject(String sql, RowMapper<Employee> rowMapper, Object... args) 方法!!! 否則不能實現查詢!!!
另外需要注意:
- 其中的 RowMapper 指定如何去映射結果集的行, 常用的實現類爲 BeanPropertyRowMapper
- 使用 SQL 中列的別名完成列名和類的屬性名的映射. 例如 last_name lastName
- 不支持級聯屬性. JdbcTemplate 到底是一個 JDBC 的小工具, 而不是 ORM 框架
/*
* 獲取對象
* 從數據庫中獲取一條記錄, 實際得到對應的一個對象
* 注意不是調用 queryForObject(String sql, Class<Employee> requiredType, Object... args) 方法!
* 而需要調用 queryForObject(String sql, RowMapper<Employee> rowMapper, Object... args)
*/
@Test
public void testquerry() {
String sql="select id,name,age from person where id=?";
RowMapper<Person> rowMapper=new BeanPropertyRowMapper<>(Person.class);
Person person=jdbcTemplate.queryForObject(sql, rowMapper,1);
System.out.println(person);
}
6. 批量查詢
同查詢的方法差不多,注意List 的應用。
/**
* 查到實體類的集合
* 注意調用的不是 queryForList 方法
*/
@Test
public void testQueryForList(){
String sql = "select id,name,age from person where id>?";
RowMapper<Person> rowMapper = new BeanPropertyRowMapper<>(Person.class);
List<Person> persons = jdbcTemplate.query(sql, rowMapper,2);
System.out.println(persons);
}
(三) 工程項目中 JdbcTemplate 的應用
工程項目中,最重要的一點就是系統的封裝性,程序的可視性。因此在主類中只能調用方法,而不應該再寫查詢等操作,這些操作都應被封裝在一個類中,便於修改,也便於主函數應用。
1. 創建一個封裝類
類中寫方法,這裏只寫了一個
另外需要配置類的bean, 註解配置和XML配置都可以應用,不再贅述,前面文章中寫的有。
package jdbc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
@Repository
public class PersonDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void getid(int id) {
String sql="select id,name,age from person where id=?";
RowMapper<Person> rowMapper=new BeanPropertyRowMapper<>(Person.class);
Person person=jdbcTemplate.queryForObject(sql, rowMapper,id);
System.out.println(person);
}
}
2. 主類中調用方法
類中創建對象,對象調用函數直接應用。方便快捷。
ApplicationContext ctx=new ClassPathXmlApplicationContext("bean.xml");
//創建對象
private PersonDao personDao;
personDao=ctx.getBean(PersonDao.class);
@Test
public void testPersonDao() {
personDao.getid(2);
}