(一) JdbcTemplate 的常用方法      

  1. update   (更新数据   包括 insert  delete   update方法)
  2. batchUpdate (批量更新)
  3. queryForObject (查询单行数据,查询列数据等)
  4. 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);
	}