Spring 5(四)JdbcTemplate

143 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的3天,点击查看活动详情

四.JdbcTemplate

1.基本概念

  • 什么是JdbcTemplate?

    • Spring框架对]DBC进行封装,使用JdbcTemplate方便实现对数据库操作
  • 准备工作

    • 引入相关jar包 image-20221112150002220

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

      <!-- 数据库连接池-->
      <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
            destroy-method="close">
          <property name="url" value="jdbc:mysql:///db02?serverTimezone=UTC"/>
          <property name="username" value="root"/>
          <property name="password" value="123456"/>
          <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
      </bean>
      
    • 配置JdbcTemplate对象,注入DataSource

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

      • 配置文件

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

        @Service
        public class BookService {
        ​
            //注入dao
            @Autowired
            private BooKDao booKDao;
        }
        
      • Dao

        @Repository
        public class BookImpl implements BooKDao{
        ​
            //注入JdbcTemplate
            @Autowired
            private JdbcTemplate jdbcTemplate;
        }
        ​
        

2.操作数据库

2.1添加
  • 对应数据库创建实体类

    public class User {
        private String userId;
        private String username;
        private String ustatus;
    ​
        public void setUserId(String userId) {
            this.userId = userId;
        }
    ​
        public void setUsername(String username) {
            this.username = username;
        }
    ​
        public void setUstatus(String ustatus) {
            this.ustatus = ustatus;
        }
    }
    
  • 编写service和dao

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

    • 调用JdbcTemplate对象里面update方法实现添加操作 image-20221112215328169

      有两个参数

      第一个参数:sql语句

      第二个参数:可变参数,设置sql语句值

      @Repository
      public class BookImpl implements BooKDao{
      ​
          //注入JdbcTemplate
          @Autowired
          private JdbcTemplate jdbcTemplate;
      ​
          //添加的方法
          @Override
          public void add(Book book) {
              //1 创建sql语句
              String sql = "insert into t_book values (?,?,?)";
              //2 调用方法实现
              Object[] args = {book.getUserId(),book.getUsername(),book.getUstatus()};
              int update = jdbcTemplate.update(sql,args);
              System.out.println(update);
          }
      }
      
  • 测试类

    @Test
        public void testJdbcTemplate(){
            ApplicationContext context =
                    new ClassPathXmlApplicationContext("bean1.xml");
            BookService bookService = context.getBean("bookService", BookService.class);
            Book book = new Book();
            book.setUserId("1");
            book.setUsername("三国");
            book.setUstatus("售罄");
            bookService.addBook(book);
        }
    

    image-20221112221945520

2.2修改和删除

Service 层

//修改的方法
public void update(Book book){
    booKDao.updateBook(book);
}
​
//删除的方法
public void delete(String id){
    booKDao.deleteBook(id);
}

Dao 层

    void updateBook(Book book);
​
    void deleteBook(String id);

实现类

//修改
@Override
public void updateBook(Book book) {
    //1 创建sql语句
    String sql = "update t_book set username=?,ustatus=?,where user_id=?";
    //2 调用方法实现
    Object[] args = {book.getUsername(),book.getUstatus(),book.getUserId()};
    int update = jdbcTemplate.update(sql,args);
    System.out.println(update);
}
​
//删除
@Override
public void deleteBook(String id) {
    //1 创建sql语句
    String sql = "delete from t_book where user_id=?";
    //2 调用方法实现
    int update = jdbcTemplate.update(sql,id);
    System.out.println(update);
}

Test类

//修改
Book book = new Book();
book.setUserId("1");
book.setUsername("三国演义");
book.setUstatus("在售");
bookService.update(book);
​
//删除
bookService.delete("1");
2.3查询
2.3.1查询返回某个值
  • 查询表里面有多少条记录,返回是某个值

  • 使用JdbcTemplate实现查询返回某个值代码 image-20221113121425285

    • 有两个参数

      • 第一个参数:sql语句
      • 第二个参数:返回类型Class
        //查询表记录
        @Override
        public int selectCount() {
            String sql =  "select count(*) from t_book";
            Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
            return count;
        }
    
2.3.2查询返回对象
  • 场景:查询图书详情

  • JdbcTemplate实现 image-20221113140928132

    • 有三个参数

      • 第一个参数:sql语句
      • 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装
      • 第三个参数:sql语句值
    //查询返回对象
    @Override
    public Book findBookInfo(String id) {
        String sql = "select * from t_book where userid=?";
        Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
        return book;
    }
    
2.3.3查询返回集合
  • 场景:查询图书列表分页...

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

    • 有三个参数

      • 第一个参数:sql语句
      • 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口里面实现类完成数据封装
      • 第三个参数:sql语句值
    //查询返回集合
    @Override
    public List<Book> findAllBook() {
        String sql = "select * from t_book";
        List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
        return bookList;
    }
2.4批量操作
2.4.1批量添加
  • 批量操作:操作表里面多条记录

  • ]dbcTemplate实现批量添加操作 image-20221113211719867

    • 有两个参数

      • 第一个参数: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));
    }
    ​
    ​
    ​
    Test类
            //批量添加
            List<Object[]> batchArgs=new ArrayList<>();
            Object[]o1 = {"3","java","a"};
            Object[]o2 = {"2","py","b"};
            Object[]o3 = {"4","C++","c"};
            batchArgs.add(o1);
            batchArgs.add(o2);
            batchArgs.add(o3);
            //调用批量参加
            bookService.batchAdd(batchArgs);
    
2.4.2批量修改
@Override
public void batchUpdateBook(List<Object[]> batchArgs) {
    String sql = "update t_book set username=?,ustatus=?where user_id=?";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(ints);
}
​
        //批量修改
        List<Object[]> batchArgs=new ArrayList<>();
        Object[]o1 = {"java","在售","4"};
        Object[]o2 = {"py","售罄","9"};
        Object[]o3 = {"C++","在售","6"};
        batchArgs.add(o1);
        batchArgs.add(o2);
        batchArgs.add(o3);
        bookService.batchUpdate(batchArgs);
2.4.3批量删除
@Override
public void batchDeleteBook(List<Object[]> batchArgs) {
    String sql = "delete from t_book where user_id=?";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}
​
        //批量修改
        List<Object[]> batchArgs=new ArrayList<>();
        Object[]o1 = {"4"};
        Object[]o2 = {"9"};
        Object[]o3 = {"6"};
        batchArgs.add(o1);
        batchArgs.add(o2);
        batchArgs.add(o3);
        bookService.batchDelete(batchArgs);