Spring JdbcTemplate操作
阿新 • • 發佈:2020-10-21
JdbcTemplate(概念和準備)
-
什麼是JdbcTemplate
1)Spring框架對JDBC進行封裝,使用JdbcTemplate方便實現對資料庫操作。
-
準備工作
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操作資料庫(新增)
-
對應資料庫建立實體類
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; } }
-
編寫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語句值
-
測試類
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操作資料庫(查詢返回某個值)
-
查詢表裡面有多少條記錄,返回是某個值
-
使用Jdbctemplate實現查詢返回多個值的方法
- 有兩個引數
- 第一個引數,sql語句
- 第二個引數,返回型別Class
@Override public int select() { String sql = "select count(*) from book"; Integer line = jdbcTemplate.queryForObject(sql, Integer.class); return line; }
- 有兩個引數
Jdbctemplate操作資料庫(查詢返回物件)
-
場景:查詢圖書詳情
-
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操作資料庫(查詢返回集合)
-
場景:查詢圖書列表分頁...
-
呼叫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操作資料庫(批量操作)
-
批量操作:操作表裡面多條記錄
-
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); }
- 有兩個引數
-
-
測試結果
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);
}
結果: