JdbcTemplate 实现增删改查

125 阅读2分钟

JdbcTemplate

Spring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作

  • 引入相关依赖

    image-20221120211223269

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

    •  <!--    配置数据库连接-->
       <context:property-placeholder location="druid.properties"></context:property-placeholder>
       <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
           <property name="url" value="${prop.url}"></property>
           <property name="driverClassName" value="${prop.driverClassName}"></property>
           <property name="username" value="${prop.username}"></property>
           <property name="password" value="${prop.password}"></property>
       </bean>
      
  • 配置 JdbcTemplate 对象,注入 DataSource

    •  <!--    配置 jdbctemplate 对象-->
       <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
           <!-- 注入 dataSource  -->
           <property name="dataSource" ref="dataSource"></property>
       </bean>
      
  • 创建 Service 类,创建 dao 类,在 dao 注入 jdbcTemplate 对象

    • 配置文件

      •  <!--    组件扫描-->
         <context:component-scan base-package="com.cs7eric"></context:component-scan>
        
    • Service

      •  @Service
         public class BookService {
         ​
             //注入 dao
             @Autowired
             private BookDao bookDao;
             
         }
        
    • BookDao

      •  @Repository
         public class BookDaoImpl implements BookDao{
         ​
             //注入 jdbcTemplate
             @Autowired
             private JdbcTemplate jdbcTemplate;
         ​
             @Override
             public void add() {
         ​
             }
         }
        

JdbcTemplate 操作 数据库


对应数据库创建实体类

 public class Book {
     
     private Integer id;
     private String name;
 ​
     public Book(Integer id, String name) {
         this.id = id;
         this.name = name;
     }
 ​
     public Book() {
     }
 ​
     public Integer getId() {
         return id;
     }
 ​
     public void setId(Integer id) {
         this.id = id;
     }
 ​
     public String getName() {
         return name;
     }
 ​
     public void setName(String name) {
         this.name = name;
     }
 ​
     @Override
     public String toString() {
         return "Book{" +
                 "id=" + id +
                 ", name='" + name + ''' +
                 '}';
     }
 }

添加操作

  • 编写 service 和 dao

    • 在 dao 进行数据库添加操作

    • 调用 JdbcTemplate 对象里面 update 方法

      • image-20221120214727925

      • 有两个参数

        • 第一个参数:sql 语句
        • 第二个参数:可变参数,设置 SQL 语句值
    •  @Repository
       public class BookDaoImpl implements BookDao{
       ​
       ​
           //注入 jdbcTemplate
           @Autowired
           private JdbcTemplate jdbcTemplate;
       ​
           @Override
           public void add() {
       ​
           }
       ​
           @Override
           public void addBook(Book book) {
       ​
               String sql = "INSERT INTO t_book VALUES(?,?)";
               Object[] args = {book.getId(),book.getName()};
               int update = jdbcTemplate.update(sql, args);
               System.out.println(update);
           }
       }
      
  • 测试类

    •  @Test
       public void addBook() {
       ​
           ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("jdbctemplate.xml");
           BookService bookService = context.getBean("bookService", BookService.class);
           bookService.addBook(new Book(1,"csq"));
       }
      

修改

 /**
      * 更新书
      *
      * @param book 书
      */
 @Override
 public void updateBook(Book book) {
     String sql = "UPDATE t_book SET name=? WHERE id=?";
     Object[] args = {book.getName(),book.getId()};
     int update = jdbcTemplate.update(sql, args);
     System.out.println(update);
 }

删除

 @Test
 public void deleteBook() {
 ​
     ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("jdbctemplate.xml");
     BookService bookService = context.getBean("bookService", BookService.class);
     bookService.deleteBook(1);
 }

查询返回某个值

  • 查询表里面有多少条记录,返回是某个值

  • 使用 JdbcTemplate 实现查询返回某个值

    • image-20221120222916890

      • 有两个参数

        • 第一个参数:SQL 语句
        • 第二个参数:返回类型 Class
    •  @Override
       public void selectCount() {
           String sql = "SELECT COUNT(*) FROM t_book";
           Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
           System.out.println(count);
       }
      

查询返回对象

  • 场景:查询图书详情

  • JdbcTemplate 实现查询返回对象

    • image-20221120223525151

    • 有三个参数

      • 第一个参数:SQL 语句
      • 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
      • 第三个参数:SQL 语句填充值
    •  @Override
       public Book queryForBook(Integer id) {
       ​
           String sql = "SELECT * FROM t_book WHERE id=?";
           Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
           return book;
       }
      

查询返回集合

  • 场景:查询图书列表分页

  • 调用 JdbcTemplate 方法实现查询返回集合

    • image-20221120224252695

    • 有三个参数

      • 第一个参数:SQL 语句
      • 第二个参数:RowMapper 是接口,针对返回不同类型数据,使用这个接口里面实现类完成数据封装
      • 第三个参数:SQL 语句值
    •  @Override
       public List<Book> queryBooks() {
       ​
           String sql = "SELECT * FROM t_book";
           return jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
       }
      

批量操作

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

  • JdbcTemplate 实现批量添加操作

    • image-20221120225055160

    • 有两个参数

      • SQL 语句
      • List 集合,添加多条数据
    •  @Override
       public void batchAddBook(List<Object[]> batchArgs) {
           String sql = "INSERT INTO t_book VALUES(?,?)";
           int[] ints = jdbcTemplate.batchUpdate(sql,batchArgs);
           System.out.println(Arrays.toString(ints));
       }
      

批量修改和批量删除操作和批量添加一样,更改一下SQL 语句即可