(一) 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);
}