Spring5框架六:JdbcTemplate

JdbcTemplate

一、概述

  1. 定义

    Spring框架对于JDBC的封装,更方便与对数据库的CURD

  2. 所依赖的jar包

    在这里插入图片描述

  3. 在spring配置文件内配置数据库连接及创建JdbcTemplate对象
    
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                               http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd">
    
        
        <context:component-scan base-package="com.atguigu.spring5.jdbctemplate"/>
        
        
        <context:property-placeholder location="classpath:jdbc.properties"/>
    
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
            <property name="url" value="${prop.url}" />
            <property name="username" value="${prop.username}" />
            <property name="password" value="${prop.password}" />
            <property name="driverClassName" value="${prop.driverClassName}" />
        bean>
    
        
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="dataSource"/>
        bean>
    
    beans>
    

二、update操作

  1. 创建要操作的数据表的实体类
  2. 新建service和dao,并添加响应的注解
    // dao类
    @Repository
    public class BookDAOImpl implements BookDAO{
        // 引入JdbcTemplate对象,在spring配置文件中已经配置好的    
        @Autowired
        private JdbcTemplate jdbcTemplate;
        // 使用JdbcTemplate对象进行数据库的insert操作
        @Override
        public void add(User user) {
            String sql = "insert into t_user values(0,?,?,?,0)";
            int update = jdbcTemplate.update(sql,user.getUname(),user.getPwd(),user.getEmail());
            System.out.println("update = " + update);
        }
    }
    
    // service类
    @Service
    public class BookService {
        // 注入dao
        @Autowired
        private BookDAO bookDAO;
        public void addUser(User user) {
            bookDAO.add(user);
        }
    }
    
  3. 测试类
    public class TestJdbc {
        @Test
        public void testJdbc() {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
            BookService bookService = context.getBean("bookService", BookService.class);
            User user = new User();
            user.setUname("布鲁斯·埃克尔");
            user.setPwd("123456");
            user.setEmail("[email protected]");
            bookService.addUser(user);
        }
    }
    

三、Retrieve操作

  1. 查询返回某个值
    @Repository
    public class BookDAOImpl implements BookDAO{
        // 查询条目数
        @Override
        public Integer retrieve() {
            String sql = "select count(*) from t_user";
            return jdbcTemplate.queryForObject(sql,Integer.class);
        }
    }
    
  2. 查询返回对象(一条记录)
    @Override
    public User retrieveObject(Integer id) {
        String sql = "select * from t_user where id = ?";
        return jdbcTemplate.queryForObject(sql,new BeanPropertyRowMapper<User>(User.class),id);
    }
    
    /* 
    	核心方法是:queryForObject(String sql,RowMapper rowMapper,Object..args)
    	第一个参数:sql语句
    	第二个参数:RowMapper是一个接口,针对返回不同类型数据,使用其实现类BeanPropertyRowMapper
    				实现对类型对象的封装
    */
    

    其中:BeanPropertyRowMapper是一个泛型类,可以封装不同的类

  3. 查询返回集合
    @Override
    public List<User> findAll() {
        String sql = "select * from t_user";
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<User>(User.class));
    }
    
    /* 
    	核心方法是:query(String sql,RowMapper rowMapper,Object..args)
    */
    

四、批量操作

  1. 什么是批量操作

    操作表里的多条记录

  2. 批量增加操作
    // dao
    @Repository
    public class BookDAOImpl implements BookDAO{
        @Override
        public void batchInsert(List<Object[]> batchArgs) {
            String sql = "insert into t_user values (0,?,?,?,0)";
            int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
            System.out.println(ints.toString());
        }
    }
    
  3. 测试方法
    public class TestJdbc {
        @Test
        public void test2() {
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
            BookService bookService = context.getBean("bookService", BookService.class);
            // 1.创建Object数组的集合
            List<Object[]> batchArgs = new ArrayList<>();
            Object[] o1 = {"张三","123456","[email protected]"};
            Object[] o2 = {"李四","123456","[email protected]"};
            Object[] o3 = {"王五","123456","[email protected]"};
            batchArgs.add(o1);
            batchArgs.add(o2);
            batchArgs.add(o3);
            // 2.将该数组集合传入batchUpdate方法
            bookService.batchAdd(batchArgs);
        }
    }
    

五、总结

  1. 核心方法
    CRUD method
    修改 int update( String sql, @Nullable Object… args)
    查询返回一个值 T queryForObject(String sql, Class requiredType)
    查询返回一个对象 T queryForObject(String sql,RowMapper rowMapper,Object…args)
    查询返回一个列表 List query(String sql, RowMapper rowMapper)
    批量操作 int[] batchUpdate(String sql, List batchArgs)

你可能感兴趣的:(Spring5,spring,后端)