1. 程式人生 > 實用技巧 >Spring JdbcTemplate操作

Spring JdbcTemplate操作

JdbcTemplate(概念和準備)

  1. 什麼是JdbcTemplate

    1)Spring框架對JDBC進行封裝,使用JdbcTemplate方便實現對資料庫操作。

  2. 準備工作

    1)引入相關依賴

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.10</version>
    </dependency>c
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.1.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.1.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>2.5.6</version>
    </dependency>
    

    2)在Spring配置檔案中配置資料庫連線池

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/test"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    

    3)配置JdbcTemplate物件,注入DataSource

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    

    4)建立service和dao類,在dao注入JdbcTemplate物件

import nuc.edu.jdbctemplate.dao.BookDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class BookDaoImpl extends BookDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
}
import nuc.edu.jdbctemplate.dao.BookDao;
import org.springframework.beans.factory.annotation.Autowired;

public class BookService {
    @Autowired
    private BookDao bookDao;
}

Jdbctemplate操作資料庫(新增)

  1. 對應資料庫建立實體類

    public class Book {
        private int id;
        private String username;
        private String status;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getStatus() {
            return status;
        }
    
        public void setStatus(String status) {
            this.status = status;
        }
    }
    
  2. 編寫service和dao

    1)在dao進行資料庫新增操作

    import nuc.edu.jdbctemplate.dao.BookDao;
    import nuc.edu.jdbctemplate.emtity.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 {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    }
    

    2)呼叫jdbctemplate裡面的uodate方法實現新增操作

    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public void add(Book book) {
        String sql = "insert into book values(?,?,?)";
        int update = jdbcTemplate.update(sql, book.getId(), book.getUsername(), book.getStatus());
        System.out.println(update);
    }
    

    ​ ①有兩個引數

    ​ ②第一個引數:sql語句

    ​ ③第二個語句:可變引數,設定sql語句值

  3. 測試類

    import nuc.edu.jdbctemplate.emtity.Book;
    import nuc.edu.jdbctemplate.service.BookService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class BookTest {
        @Test
        public void show(){
            ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
            BookService bookService = context.getBean("bookService", BookService.class);
            Book book = new Book();
            book.setId(1);
            book.setUsername("zhangsan");
            book.setStatus("y");
            bookService.addBook(book);
        }
    }
    

Jdbctemplate操作資料庫(修改和刪除)

@Override
public void update(Book book) {
    String sql = "update book set username = ?,status=? where id = ?";
    Object[] args = {book.getUsername(),book.getStatus(),book.getId()};
    int update = jdbcTemplate.update(sql, args);
    System.out.println(update);
}

@Override
public void delete(int id) {
    String sql = "delete from book where id = ?";
    int update = jdbcTemplate.update(sql, id);
    System.out.println(update);
}

Jdbctemplate操作資料庫(查詢返回某個值)

  1. 查詢表裡面有多少條記錄,返回是某個值

  2. 使用Jdbctemplate實現查詢返回多個值的方法

    • 有兩個引數
      • 第一個引數,sql語句
      • 第二個引數,返回型別Class
    @Override
    public int select() {
        String sql = "select count(*) from book";
        Integer line = jdbcTemplate.queryForObject(sql, Integer.class);
        return line;
    }
    

Jdbctemplate操作資料庫(查詢返回物件)

  1. 場景:查詢圖書詳情

  2. Jdbctemplate實現查詢返回物件

    • 有三個引數
      • 第一個引數:sql語句
      • 第二個引數:RowMapper,是一個介面,針對返回不同型別資料,使用這個接口裡面實現類完成資料封裝
      • 第三個引數,sql語句值
    public Book selectOne(int id) {
        String sql = "select * from book where id = ?";
        Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class),id);
        return book;
    }
    

Jdbctemplate操作資料庫(查詢返回集合)

  1. 場景:查詢圖書列表分頁...

  2. 呼叫Jdbctemplate方法實現查詢返回集合

    public void selectAll(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
        BookService bookService = context.getBean("bookService", BookService.class);
        List<Book> bookList = bookService.selectAll();
        System.out.println(bookList);
    }
    

Jdbctemplate操作資料庫(批量操作)

  1. 批量操作:操作表裡面多條記錄

  2. Jdbctemplate實現批量新增操作

      • 有兩個引數
        • 第一個引數:sql語句
        • 第二個引數:List集合,新增多條記錄資料
      @Override
      public void batchAddBook(List<Object[]> batchArgs) {
          String sql = "insert into book values(?,?,?)";
          int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
          System.out.println(Arrays.toString(ints));
      }
      
      public void batchAdd(){
          ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
          BookService bookService = context.getBean("bookService", BookService.class);
          List<Object[]> batchArgs = new ArrayList<>();
          Object[] o1 = {5,"tianqi","Y"};
          Object[] o2 = {6,"yangba","Y"};
          Object[] o3 = {7,"houjiu","N"};
          batchArgs.add(o1);
          batchArgs.add(o2);
          batchArgs.add(o3);
          bookService.bathAdd(batchArgs);
      }
      
  3. 測試結果

Jdbctemplate實現批量修改操作

@Override
public void batchUpdate(List<Object[]> batchArgs) {
    String sql = "update book set username=?,status=? where id=?";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}
@Test
public void bathUpdate(){
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    BookService bookService = context.getBean("bookService", BookService.class);
    ArrayList<Object[]> batchArgs = new ArrayList<>();
    Object[] o1 = {"jishi","Y",2};
    batchArgs.add(o1);
    bookService.bathUpdate(batchArgs);
}

​ 結果:

Jdbctemplate實現批量刪除操作

@Override
public void batchDelete(List<Object[]> batchArgs) {
    String sql = "delete from book where id = ?";
    int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
    System.out.println(Arrays.toString(ints));
}
@Test
public void bathDelete(){
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    BookService bookService = context.getBean("bookService", BookService.class);
    ArrayList<Object[]> batchArgs = new ArrayList<>();
    Object[] o1 = {1};
    Object[] o2 = {2};
    batchArgs.add(o1);
    batchArgs.add(o2);

    bookService.bathDelete(batchArgs);
}

​ 結果: