Spring JdbcTemplate

Spring JdbcTemplate

1. JdbcTemplate概述

  • JdbcTemplate是spring框架中提供的一个对象,他是对原始繁琐Jdbc
    API的简单封装,spring框架为我们提供了很多很多的操作模板类,基本都叫XxxTemplate。例如,操作关系型数据库的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等。

2. spring JdbcTemplate基本使用

  • 导入spring-jdbc 和 spring-tx的maven坐标/或者相应jar包
    • 其中spring-jdbc 包中包含了被封装的JdbsTemplate
    • spring-tx 是Jdbc操作事务包,因为Jdbc模板底层要用到事务,所以要倒入对于的事务包
  • 创建数据库表和对应的实体domain
    • 查询出来的数据一般封装在实体bean里面
  • 创建JdbcTemplate模板对象。
    • 因为模板对象已经交给IOC创建并且注入数据源,所以我们可以直接从ICO中获取到模板对象即可。
      -执行数据库的操作

3.spring JdbcTemplate模板对象方法基本使用

  • 操作数据库基本都是CRUD,对于增删改语句,我们一般执行JdbcTemplate.update(String sql, Object… args)方法,args是sql语句需要的参数。
	@Override
	public int update(String sql, @Nullable Object... args) throws DataAccessException {
     
		return update(sql, newArgPreparedStatementSetter(args));
	}
  • 对于查询操作,我们一般查询全部或者查询一行,然后将其封装成对象,或者是聚合查询
	查询全部
	
	@Override
	public <T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException {
     
		return result(query(sql, new RowMapperResultSetExtractor<>(rowMapper)));
	}
	其中,RowMapper是行映射(它是一个接口),它代表将查询出来的数
	据封装成一个javaBean实体对象,然后返回一个List<javaBean>.
	
	例如:
	@Test
    public void jdbcQueryAll(){
     
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate) app.getBean("jdbcTemplate");
        List<Account> accountList = jdbcTemplate.query("select * from account", new BeanPropertyRowMapper<Account>(Account.class));
        for (Account account : accountList) {
     
            System.out.println(account);
        }
    }
	查询一行
	
	@Override
	@Nullable
	public <T> T queryForObject(String sql, RowMapper<T> rowMapper, @Nullable Object... args) throws DataAccessException {
     
		List<T> results = query(sql, args, new RowMapperResultSetExtractor<>(rowMapper, 1));
		return DataAccessUtils.nullableSingleResult(results);
	}
	这个方法有三个参数:
	第一个是String sql:代表对应的sql语句
	第二个是RowMapper行映射
	第三个是对应sql占位符的参数数组
	
	例如:
	@Test
    public void  jdbcQueryForObject1(){
     
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate) app.getBean("jdbcTemplate");
        Account account = jdbcTemplate.queryForObject("select * from account where name = ?", new BeanPropertyRowMapper<Account>(Account.class), "zhangsan");
        System.out.println(account);
    }
	聚合查询
	
	@Override
	@Nullable
	public <T> T queryForObject(String sql, Class<T> requiredType) throws DataAccessException {
     
		return queryForObject(sql, getSingleColumnRowMapper(requiredType));
	}
	他有两个参数:
	第一个参数是对应的sql语句
	第二个参数是聚合查询返回值的字节码对象
	返回值是聚合查询的结果,和requiredType字节码对象是对应的
	
	例如:
	@Test
    public void  jdbcQueryForObject2(){
     
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        JdbcTemplate jdbcTemplate = (JdbcTemplate) app.getBean("jdbcTemplate");
        Integer account = jdbcTemplate.queryForObject("select count(*) from account", Integer.class);
        System.out.println(account);
    }

4. 对应RowMapper的常见子类

因为 RowMapper行映射本身是一个接口,它将查询的数据映射到我们的javaBean实体类里面,我们一般用它的常见实现类,
它的常见实现类:
	public class BeanPropertyRowMapper<T> implements RowMapper<T> 
	对于其中的构造方法:
	public BeanPropertyRowMapper(Class<T> mappedClass) {
     
			initialize(mappedClass);
		}
		
	例如:
	new BeanPropertyRowMapper<Account>(Account.class)
	实体属性行映射BeanPropertyRowMapper

5. 总结
Spring JdbcTemplate_第1张图片

			继续奥利给!!!

你可能感兴趣的:(笔记,spring,java)