Spring5之JdbcTemplate

概念

  • JdbcTemplate:JdbcTemplate 是 Spring 框架对 JDBC 进行的封装,使用 JdbcTemplate 方便实现对数据库的相关操作。

如何使用?

环境搭建

搭建步骤

  1. 引入相关 jar 包
  2. 在 Spring 配置文件中配置数据库连接池
  3. 配置 JdbcTemplate 对象,注入 DataSource
  4. 创建 service 类,创建 dao 类,在 dao 类中注入 jdbcTemplate 对象

具体实现

  • 1、引入相关 jar 包

    在这里插入图片描述

  • 2、在 Spring 配置文件中配置数据库连接池

    <?xml version="1.0" encoding="UTF-8"?>
    <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
    ">
        <!-- 数据库连接池 -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="clone">
            <property name="url" value="jdbc:mysql:///spring_test" />
            <property name="username" value="root" />
            <property name="password" value="123456" />
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        </bean>
    </beans>
    
  • 3、配置 JdbcTemplate 对象,注入 DataSource

    <?xml version="1.0" encoding="UTF-8"?>
    <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
    ">
        <!-- 数据库连接池 -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="clone">
            <property name="url" value="jdbc:mysql:///spring_test" />
            <property name="username" value="root" />
            <property name="password" value="123456" />
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        </bean>
    
        <!-- 创建 JdbcTemplate 对象 -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!-- 注入 dataSource -->
            <property name="dataSource" ref="dataSource" />
        </bean>
    </beans>
    
  • 4、创建 service 和 dao 类,在 dao 类中注入 JdbcTemplate 对象

    在配置文件中开启组件扫描(也可以使用配置类代替)

    <?xml version="1.0" encoding="UTF-8"?>
    <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
    ">
        <!-- 数据库连接池 -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="clone">
            <property name="url" value="jdbc:mysql:///spring_test" />
            <property name="username" value="root" />
            <property name="password" value="123456" />
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        </bean>
    
        <!-- 开启组件扫描 -->
        <context:component-scan base-package="com.laoyang.spring" />
    
        <!-- 创建 JdbcTemplate 对象 -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!-- 注入 dataSource -->
            <property name="dataSource" ref="dataSource" />
        </bean>
    </beans>
    

    一定要记得引入 context 名称空间

    service类

    package com.laoyang.spring.service;
    
    import com.laoyang.spring.dao.BookDao;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class BookService {
        /**
         * 注入 Dao
         */
        @Autowired
        private BookDao bookDao;
    }
    

    dao类(接口 & 实现类)

    package com.laoyang.spring.dao;
    
    public interface BookDao {
    }
    
    package com.laoyang.spring.dao;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class BookDaoImpl implements BookDao {
        /**
         * 注入 JdbcTemplate 对象
         */
        @Autowired
        private JdbcTemplate jdbcTemplate;
    }
    

新增操作

先提前准备好对应的数据库表t_book

在这里插入图片描述

虽然表名的意思是 “图书”,但是这里大伙可以理解为 “用户”,就当作是用户表来使用就好了,实在看不下去的可以将表名和实体类这些都改成 user

  • 1、对数据库表创建实体类

    package com.laoyang.spring.entity;
    
    /**
     * @ClassName Book
     * @Description: 用户类
     * @Author Laoyang
     * @Date 2021/12/20 20:04
     */
    public class Book {
        /**
         * 用户id
         */
        private String userId;
    
        /**
         * 用户名称
         */
        private String username;
    
        /**
         * 用户状态
         */
        private String ustatus;
    
        public String getUserId() {
            return userId;
        }
    
        public void setUserId(String userId) {
            this.userId = userId;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getUstatus() {
            return ustatus;
        }
    
        public void setUstatus(String ustatus) {
            this.ustatus = ustatus;
        }
    }
    
  • 2、编写 service 和 dao(在 dao 进行数据库添加操作)

    BookService 类:

    package com.laoyang.spring.service;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class BookService {
        /**
         * 注入 Dao
         */
        @Autowired
        private BookDao bookDao;
    
        /**
         * 新增方法
         */
        public void addUser(Book book) {
            bookDao.add(book);
        }
    }
    

    BookDao 接口:

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    
    public interface BookDao {
        /**
         * 添加用户
         * @param book
         */
        void add(Book book);
    }
    

    BookDaoImpl 类:

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class BookDaoImpl implements BookDao {
        /**
         * 注入 JdbcTemplate 对象
         */
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        /**
         * 添加用户
         * @param book
         */
        @Override
        public void add(Book book) {
            /*
             调用 jdbcTemplate 对象里面的 update(String sql, Object... args) 方法实现添加操作
             参数一:SQL 语句
             参数二:可变参数,设置 sql 中的语句值
             */
    
            // 1、创建 sql
            String sql = "insert into t_book values(?, ?, ?)";
    
            // 2、调用 update 方法实现
            Object[] books = {book.getUserId(), book.getUsername(), book.getUstatus()};
            int insert = jdbcTemplate.update(sql, books);
            // 可以将可变参数封装到数组里面在传到方法中,也可以直接将参数传到方法中
    //        int insert = jdbcTemplate.update(sql, book.getUserId(), book.getUsername(), book.getUstatus());
            if (insert > 0) {
                System.out.println("新增成功!");
                return;
            }
            System.out.println("新增失败!");
        }
    }
    
  • 3、测试效果

    package com.laoyang.spring.test;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import com.laoyang.spring.service.BookService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class JdbcTest {
        @Test
        public void testAddUser() {
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    
            BookService bookService = context.getBean("bookService", BookService.class);
    
            Book book = new Book();
            book.setUserId("1001");
            book.setUsername("Tom");
            book.setUstatus("A");
            bookService.addUser(book);
        }
    }
    

    添加成功后就可以查看数据库表中的数据了

修改操作 & 删除操作

说明:因为增删改的方式都差不多,就是修改一下语句就好了,所以这里直接把修改和删除一起演示

基于上面的实体类完成这两个操作

  • 编写 service 和 dao(在 dao 进行数据库添加操作)

    BookService类

    package com.laoyang.spring.service;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class BookService {
        /**
         * 注入 Dao
         */
        @Autowired
        private BookDao bookDao;
    
        /**
         * 新增方法
         */
        public void addBook(Book book) {
            bookDao.add(book);
        }
    
        /**
         * 修改方法
         */
        public void updateBook(Book book) {
            bookDao.update(book);
        }
    
        /**
         * 删除方法
         */
        public void deleteBook(String userId) {
            bookDao.delete(userId);
        }
    }
    

    BookDao 接口

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    
    public interface BookDao {
        /**
         * 添加用户
         * @param book
         */
        void add(Book book);
    
        /**
         * 修改用户
         * @param book
         */
        void update(Book book);
    
        /**
         * 删除用户
         * @param userId
         */
        void delete(String userId);
    }
    

    BookDaoImpl 类

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class BookDaoImpl implements BookDao {
        /**
         * 注入 JdbcTemplate 对象
         */
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        /**
         * 添加用户
         * @param book
         */
        @Override
        public void add(Book book) {
            /*
             调用 jdbcTemplate 对象里面的 update(String sql, Object... args) 方法实现添加操作
             参数一:SQL 语句
             参数二:可变参数,设置 sql 中的语句值
             */
    
            // 1、创建 sql
            String sql = "insert into t_book values(?, ?, ?)";
    
            // 2、调用 update 方法实现
            Object[] books = {book.getUserId(), book.getUsername(), book.getUstatus()};
            int insert = jdbcTemplate.update(sql, books);
            // 可以将可变参数封装到数组里面在传到方法中,也可以直接将参数传到方法中
    //        int insert = jdbcTemplate.update(sql, book.getUserId(), book.getUsername(), book.getUstatus());
            if (insert > 0) {
                System.out.println("新增成功!");
                return;
            }
            System.out.println("新增失败!");
        }
    
        /**
         * 修改用户
         * @param book
         */
        @Override
        public void update(Book book) {
            String sql = "update t_book set username=?, ustatus=? where user_id=?";
            Object[] books = {book.getUsername(), book.getUstatus(), book.getUserId()};
            int update = jdbcTemplate.update(sql, books);
            if (update > 0) {
                System.out.println("修改成功!");
                return;
            }
            System.out.println("修改失败!");
        }
    
        /**
         * 删除用户
         * @param userId
         */
        @Override
        public void delete(String userId) {
            String sql = "delete from t_book where user_id = ?";
            int delet = jdbcTemplate.update(sql, userId);
            if (delet > 0) {
                System.out.println("删除成功!");
                return;
            }
            System.out.println("删除失败!");
        }
    }
    
  • 测试效果

    package com.laoyang.spring.test;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import com.laoyang.spring.service.BookService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class JdbcTest {
    	// 修改操作
        @Test
        public void testUpdateUser() {
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    
            BookService bookService = context.getBean("bookService", BookService.class);
    
            Book book = new Book();
            book.setUserId("1001");
            book.setUsername("Jerry");
            book.setUstatus("C");
            bookService.updateBook(book);
        }
    
    	// 删除操作
        @Test
        public void testDeleteUser() {
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    
            BookService bookService = context.getBean("bookService", BookService.class);
            bookService.deleteBook("1001");
        }
    }
    

查询操作(返回某个值)

案例:查询表中有多少个用户,返回的是某个值

  • 编写 service 和 dao(在 dao 进行数据库添加操作)
    BookService 类

    package com.laoyang.spring.service;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class BookService {
        /**
         * 注入 Dao
         */
        @Autowired
        private BookDao bookDao;
        
        /**
         * 查询表中的用户总数
         */
        public int findCount() {
            return bookDao.selectCount();
        }
    }
    

    BookDao 接口

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    
    public interface BookDao {
        /**
         * 查询表中的用户总数
         */
        int selectCount();
    }
    

    BookDaoImpl 类

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class BookDaoImpl implements BookDao {
        /**
         * 注入 JdbcTemplate 对象
         */
        @Autowired
        private JdbcTemplate jdbcTemplate;
        
        /**
         * 查询表中的用户总数
         */
        @Override
        public int selectCount() {
            /*
            调用 jdbcTemplate 对象里面的 queryForObject(String sql, Class<T> requiredType) 方法实现该操作
            参数一:sql 语句
            参数二:返回类型的 Class
             */
    
            String sql = "select count(user_id) from t_book";
            Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
            return count;
        }
    }
    
  • 测试效果

    package com.laoyang.spring.test;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import com.laoyang.spring.service.BookService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class JdbcTest {
        @Test
        public void testCount() {
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    
            BookService bookService = context.getBean("bookService", BookService.class);
            int count = bookService.findCount();
            System.out.println("当前表中还有" + count + "个用户。");
        }
    }
    

查询操作(返回对象)

案例:查询 id 为 1001 的用户详情

  • 因为需要查看对象数据,所以我们先给 Book 实体类编写一个 toString 方法

    package com.laoyang.spring.entity;
    
    /**
     * @ClassName Book
     * @Description: 用户类
     * @Author Laoyang
     * @Date 2021/12/20 20:04
     */
    public class Book {
        //...此处为了简便省略前面的配置
    
        @Override
        public String toString() {
            return "Book{" +
                    "userId='" + userId + '\'' +
                    ", username='" + username + '\'' +
                    ", ustatus='" + ustatus + '\'' +
                    '}';
        }
    }
    
  • 编写 service 和 dao(在 dao 进行数据库添加操作)
    BookService 类

    package com.laoyang.spring.service;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class BookService {
        /**
         * 注入 Dao
         */
        @Autowired
        private BookDao bookDao;
        
        /**
         * 查询 id 为 1001 的用户详情
         */
        public Book findBookByUserId(String userId) {
            return bookDao.findBookByUserId(userId);
        }
    }
    

    BookDao 接口

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    
    public interface BookDao {
        /**
         * 查询 id 为 1001 的用户详情
         */
        Book findBookByUserId(String userId);
    }
    

    BookDaoImpl 类

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    
    @Repository
    public class BookDaoImpl implements BookDao {
        /**
         * 查询 id 为 1001 的用户详情
         */
        @Override
        public Book findBookByUserId(String userId) {
            /*
            调用 jdbcTemplate 对象里面的 queryForObject(String sql, RowMapper<T> rowMapper, Object... args) 方法实现该操作
            参数一:sql 语句
            参数二:rowMapper 是一个接口,针对返回不同类型的数据,使用这个接口里面的实现类完成数据封装
            参数三:可变参数
             */
            String sql = "select user_id, username, ustatus from t_book where user_id=?";
            Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), userId);
            if (book != null) {
                return book;
            }
            return null;
        }
    }
    
  • 测试效果

    package com.laoyang.spring.test;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import com.laoyang.spring.service.BookService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class JdbcTest {
        @Test
        public void testBook() {
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    
            BookService bookService = context.getBean("bookService", BookService.class);
            Book book = bookService.findBookByUserId("1001");
            System.out.println(book);
        }
    }
    

查询操作(返回集合)

案例:查询所有用户信息

  • 编写 service 和 dao(在 dao 进行数据库添加操作)
    BookService 类

    package com.laoyang.spring.service;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import java.util.List;
    
    @Service
    public class BookService {
        /**
         * 注入 Dao
         */
        @Autowired
        private BookDao bookDao;
        
        /**
         * 查询所有用户信息
         */
        public List<Book> findBookByAll() {
            return bookDao.findBookByAll();
        }
    }
    

    BookDao 接口

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    import java.util.List;
    
    public interface BookDao {
        /**
         * 查询所有用户信息
         */
        List<Book> findBookByAll();
    }
    

    BookDaoImpl 类

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    import java.util.ArrayList;
    import java.util.List;
    
    @Repository
    public class BookDaoImpl implements BookDao {
        /**
         * 注入 JdbcTemplate 对象
         */
        @Autowired
        private JdbcTemplate jdbcTemplate;
        
        /**
         * 查询所有用户信息
         */
        @Override
        public List<Book> findBookByAll() {
            /*
            调用 jdbcTemplate 对象里面的 query(String sql, RowMapper<T> rowMapper, Object... args) 方法实现该操作
            参数一:sql 语句
            参数二:rowMapper 是一个接口,针对返回不同类型的数据,使用这个接口里面的实现类完成数据封装
            参数三:可变参数,可选
             */
            String sql = "select user_id, username, ustatus from t_book";
            List<Book> books = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
            if (!books.isEmpty()) {
                return books;
            }
            return null;
        }
    }
    
  • 测试效果

    package com.laoyang.spring.test;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import com.laoyang.spring.service.BookService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import java.util.Arrays;
    import java.util.List;
    
    public class JdbcTest {
        @Test
        public void testBookAll() {
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
    
            BookService bookService = context.getBean("bookService", BookService.class);
            List<Book> books = bookService.findBookByAll();
            System.out.println(books);
        }
    }
    

批量新增操作

批量操作:操作表里面的多条记录

  • 编写 service 和 dao(在 dao 进行数据库添加操作)
    BookService 类

    package com.laoyang.spring.service;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import java.util.List;
    
    @Service
    public class BookService {
        /**
         * 注入 Dao
         */
        @Autowired
        private BookDao bookDao;
        
        /**
         * 批量新增用户
         */
        public void addBooksInBulk(List<Object[]> books) {
            bookDao.addBooksInBulk(books);
        }
    }
    

    BookDao 接口

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    import java.util.List;
    
    public interface BookDao {
        /**
         * 批量新增用户
         * @param books
         */
        void addBooksInBulk(List<Object[]> books);
    }
    

    BookDaoImpl 类

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    import java.util.ArrayList;
    import java.util.List;
    
    @Repository
    public class BookDaoImpl implements BookDao {
        /**
         * 注入 JdbcTemplate 对象
         */
        @Autowired
        private JdbcTemplate jdbcTemplate;
        
        /**
         * 批量新增用户
         * @param books
         */
        @Override
        public void addBooksInBulk(List<Object[]> books) {
            /*
            调用 jdbcTemplate 对象里面的 batchUpdate(String sql, List<Object[]> batchArgs) 方法实现该操作
            参数一:sql语句
            参数二:List集合,添加多条的数据
             */
            String sql = "insert into t_book values(?, ?, ?)";
            int[] adds = jdbcTemplate.batchUpdate(sql, books);
            if (adds != null && adds.length > 0) {
                System.out.println("批量添加成功!");
                return;
            }
            System.out.println("批量添加失败!");
        }
    }
    
  • 测试效果

    package com.laoyang.spring.test;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import com.laoyang.spring.service.BookService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class JdbcTest {
        @Test
        public void testAddBooks() {
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
            BookService bookService = context.getBean("bookService", BookService.class);
    
            List<Object[]> bookList = new ArrayList<>();
            Object[] bookArray1 = {"1003", "Mel", "C"};
            Object[] bookArray2 = {"1004", "Jack", "B"};
            bookList.add(bookArray1);
            bookList.add(bookArray2);
    
            bookService.addBooksInBulk(bookList);
        }
    }
    

批量修改 & 批量删除

  • 编写 service 和 dao(在 dao 进行数据库添加操作)
    BookService 类

    package com.laoyang.spring.service;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import java.util.List;
    
    @Service
    public class BookService {
        /**
         * 注入 Dao
         */
        @Autowired
        private BookDao bookDao;
        
        /**
         * 批量修改用户
         */
        public void updateBooksInBulk(List<Object[]> books) {
            bookDao.updateBooksInBulk(books);
        }
    
        /**
         * 批量删除用户
         */
        public void deleteBooksInBulk(List<Object[]> userIds) {
            bookDao.deleteBooksInBulk(userIds);
        }
    }
    

    BookDao 接口

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    import java.util.List;
    
    public interface BookDao {
        /**
         * 批量修改用户
         */
        void updateBooksInBulk(List<Object[]> books);
    
        /**
         * 批量删除用户
         */
        void deleteBooksInBulk(List<Object[]> userIds);
    }
    

    BookDaoImpl 类

    package com.laoyang.spring.dao;
    
    import com.laoyang.spring.entity.Book;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.jdbc.core.BeanPropertyRowMapper;
    import org.springframework.jdbc.core.JdbcTemplate;
    import org.springframework.stereotype.Repository;
    import java.util.ArrayList;
    import java.util.List;
    
    @Repository
    public class BookDaoImpl implements BookDao {
        /**
         * 注入 JdbcTemplate 对象
         */
        @Autowired
        private JdbcTemplate jdbcTemplate;
        
        /**
         * 批量修改用户
         */
        @Override
        public void updateBooksInBulk(List<Object[]> books) {
            String sql = "update t_book set username = ?, ustatus = ? where user_id = ?";
            int[] updates = jdbcTemplate.batchUpdate(sql, books);
            if (updates != null && updates.length > 0) {
                System.out.println("批量修改成功!");
                return;
            }
            System.out.println("批量修改失败!");
        }
    
        /**
         * 批量删除用户
         */
        @Override
        public void deleteBooksInBulk(List<Object[]> userIds) {
            String sql = "delete from t_book where user_id = ?";
            int[] deletes = jdbcTemplate.batchUpdate(sql, userIds);
            if (deletes != null && deletes.length > 0) {
                System.out.println("批量删除成功!");
                return;
            }
            System.out.println("批量删除失败!");
        }
    }
    
  • 测试效果

    package com.laoyang.spring.test;
    
    import com.laoyang.spring.dao.BookDao;
    import com.laoyang.spring.entity.Book;
    import com.laoyang.spring.service.BookService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class JdbcTest {
        @Test
        public void testUpdateBooks() {
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
            BookService bookService = context.getBean("bookService", BookService.class);
    
            List<Object[]> bookList = new ArrayList<>();
            Object[] bookArray1 = {"Ronaldinho", "A", "1003"};
            Object[] bookArray2 = {"lamb", "A", "1004"};
            bookList.add(bookArray1);
            bookList.add(bookArray2);
    
            bookService.updateBooksInBulk(bookList);
        }
    
        @Test
        public void testDeleteBooks() {
            ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
            BookService bookService = context.getBean("bookService", BookService.class);
    
            List<Object[]> bookList = new ArrayList<>();
            Object[] bookArray1 = {"1003"};
            Object[] bookArray2 = {"1004"};
            bookList.add(bookArray1);
            bookList.add(bookArray2);
    
            bookService.deleteBooksInBulk(bookList);
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值