Spring框架中的JdbcTemplate
JdbcTemplate
1、什么是 JdbcTemplate
(1)Spring 框架對(duì) JDBC 進(jìn)行封裝,使用 JdbcTemplate 方便實(shí)現(xiàn)對(duì)數(shù)據(jù)庫操作 JDBC講解
2、準(zhǔn)備工作
(1)引入相關(guān) jar 包

(2)在 spring 配置文件配置數(shù)據(jù)庫連接池
<!-- 數(shù)據(jù)庫連接池 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <property name="url" value="jdbc:mysql:///user_db" /> <property name="username" value="root" /> <property name="password" value="root" /> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> </bean>
(3)配置 JdbcTemplate 對(duì)象,注入 DataSource
<!-- JdbcTemplate 對(duì)象 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!--注入 dataSource 源碼中是set方式構(gòu)造,所以用property。有參構(gòu)造用的是constructor-arg--> <property name="dataSource" ref="dataSource"></property> </bean>
(4)創(chuàng)建 service 類,創(chuàng)建 dao 類,在 dao 注入 jdbcTemplate 對(duì)象
配置文件
<!-- 組件掃描 --> <context:component-scan base-package="com.atguigu"></context:component-scan>
Service類
@Service
public class BookService {
//注入 dao
@Autowired
private BookDao bookDao;
}Dao類
@Repository
public class BookDaoImpl implements BookDao {
//注入 JdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
}JdbcTemplate 操作數(shù)據(jù)庫(添加)
1、對(duì)應(yīng)數(shù)據(jù)庫創(chuàng)建實(shí)體類
](http://img.jbzj.com/file_images/article/202505/2025051514293733.png)
2、編寫 service 和 dao
(1)在 dao 進(jìn)行數(shù)據(jù)庫添加操作
(2)調(diào)用 JdbcTemplate 對(duì)象里面 update 方法實(shí)現(xiàn)添加操作

- 第一個(gè)參數(shù):sql 語句
- 第二個(gè)參數(shù):可變參數(shù),設(shè)置 sql 語句值
@Repository
public class BookDaoImpl implements BookDao {
//注入 JdbcTemplate
@Autowired
private JdbcTemplate jdbcTemplate;
//添加的方法
@Override
public void add(Book book) {
//1 創(chuàng)建 sql 語句
String sql = "insert into t_book values(?,?,?)";
//2 調(diào)用方法實(shí)現(xiàn)
Object[] args = {book.getUserId(), book.getUsername(), book.getUstatus()};
int update = jdbcTemplate.update(sql,args); //返回值是變化的行數(shù)
System.out.println(update);
}
}3、測(cè)試類
@Test
public void testJdbcTemplate() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
//要調(diào)用Service類中的對(duì)象
BookService bookService = context.getBean("bookService", BookService.class);
Book book = new Book();
book.setUserId("1");
book.setUsername("java");
book.setUstatus("a");
bookService.addBook(book);
}
JdbcTemplate 操作數(shù)據(jù)庫(修改和刪除)
1、修改
@Override
public void updateBook(Book book) {
String sql = "update t_book set username=?,ustatus=? where user_id=?";
Object[] args = {book.getUsername(), book.getUstatus(),book.getUserId()};
int update = jdbcTemplate.update(sql, args);
System.out.println(update);
}2、刪除
@Override
public void delete(String id) {
String sql = "delete from t_book where user_id=?";
int update = jdbcTemplate.update(sql, id);
System.out.println(update);
}JdbcTemplate 操作數(shù)據(jù)庫(查詢返回某個(gè)值)
1、查詢表里面有多少條記錄,返回是某個(gè)值
2、使用 JdbcTemplate 實(shí)現(xiàn)查詢返回某個(gè)值代碼

- 第一個(gè)參數(shù):sql 語句
- 第二個(gè)參數(shù):返回類型 Class
//查詢表記錄數(shù)
@Override
public int selectCount() {
String sql = "select count(*) from t_book";
Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
return count;
}JdbcTemplate 操作數(shù)據(jù)庫(查詢返回對(duì)象)
1、場(chǎng)景:查詢圖書詳情
2、JdbcTemplate 實(shí)現(xiàn)查詢返回對(duì)象

- 第一個(gè)參數(shù):sql 語句
- 第二個(gè)參數(shù):RowMapper 是接口,針對(duì)返回不同類型數(shù)據(jù),使用這個(gè)接口里面實(shí)現(xiàn)類完成數(shù)據(jù)封裝
- 第三個(gè)參數(shù):sql 語句值
//查詢返回對(duì)象
@Override
public Book findBookInfo(String id) {
String sql = "select * from t_book where user_id=?";
//調(diào)用方法
Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class), id);
return book;
}JdbcTemplate 操作數(shù)據(jù)庫(查詢返回集合)
1、場(chǎng)景:查詢圖書列表分頁…
2、調(diào)用 JdbcTemplate 方法實(shí)現(xiàn)查詢返回集合

- 第一個(gè)參數(shù):sql 語句
- 第二個(gè)參數(shù):RowMapper 是接口,針對(duì)返回不同類型數(shù)據(jù),使用這個(gè)接口里面實(shí)現(xiàn)類完成數(shù)據(jù)封裝
- 第三個(gè)參數(shù):sql 語句值
//查詢返回集合
@Override
public List<Book> findAllBook() {
String sql = "select * from t_book";
//調(diào)用方法
List<Book> bookList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Book>(Book.class));
return bookList;
}JdbcTemplate 操作數(shù)據(jù)庫(批量操作)
1、批量操作:操作表里面多條記錄
2、JdbcTemplate 實(shí)現(xiàn)批量添加操作

- 第一個(gè)參數(shù):sql 語句
- 第二個(gè)參數(shù):List 集合,添加多條記錄數(shù)據(jù)
//批量添加
@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));
}
//批量添加測(cè)試
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"3","java","a"};
Object[] o2 = {"4","c++","b"};
Object[] o3 = {"5","MySQL","c"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
//調(diào)用批量添加
bookService.batchAdd(batchArgs);3、JdbcTemplate 實(shí)現(xiàn)批量修改操作
//批量修改
@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(Arrays.toString(ints));
}
//批量修改
List<Object[]> batchArgs = new ArrayList<>();
Object[] o1 = {"java0909","a3","3"};
Object[] o2 = {"c++1010","b4","4"};
Object[] o3 = {"MySQL1111","c5","5"};
batchArgs.add(o1);
batchArgs.add(o2);
batchArgs.add(o3);
//調(diào)用方法實(shí)現(xiàn)批量修改
bookService.batchUpdate(batchArgs);4、JdbcTemplate 實(shí)現(xiàn)批量刪除操作
//批量刪除
@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 = {"3"};
Object[] o2 = {"4"};
batchArgs.add(o1);
batchArgs.add(o2);
//調(diào)用方法實(shí)現(xiàn)批量刪除
bookService.batchDelete(batchArgs);到此這篇關(guān)于Spring框架中的JdbcTemplate的文章就介紹到這了,更多相關(guān)Spring JdbcTemplate內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot配置MySQL5.7與MySQL8.0的異同點(diǎn)詳解
MySQL 是 Java 開發(fā)中最常用的數(shù)據(jù)庫之一,而 Spring Boot 提供了便捷的配置方式,隨著 MySQL 8.0 的普及,許多開發(fā)者需要從 MySQL 5.7 升級(jí)到 8.0,在實(shí)際開發(fā)中,二者的配置方式既有相似之處,也有一些需要特別注意的不同點(diǎn),所以本文給大家詳細(xì)介紹了它們的異同點(diǎn)2024-12-12
Spring系列中的beanFactory與ApplicationContext
這篇文章主要介紹了Spring系列中的beanFactory與ApplicationContext,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
java?MultipartFile文件上傳重命名詳細(xì)代碼示例
在文件上傳功能開發(fā)中,為防止文件重名導(dǎo)致數(shù)據(jù)覆蓋,常見的做法是在文件名前加上UUID或時(shí)間戳來區(qū)分,這篇文章主要介紹了java?MultipartFile?multipartFile文件上傳重命名的相關(guān)資料,需要的朋友可以參考下2024-09-09
SpringBoot整合Netty+Websocket實(shí)現(xiàn)消息推送的示例代碼
WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡(jiǎn)單,允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù),本文主要介紹了SpringBoot整合Netty+Websocket實(shí)現(xiàn)消息推送的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
java異步編程的7種實(shí)現(xiàn)方式小結(jié)
異步處理的實(shí)現(xiàn)方式有很多種,常見多線程,消息中間件,發(fā)布訂閱的廣播模式,本文就詳細(xì)的介紹java異步編程的7種實(shí)現(xiàn)方式,感興趣的可以了解一下2023-03-03
Spring實(shí)戰(zhàn)之Bean的后處理器操作示例
這篇文章主要介紹了Spring實(shí)戰(zhàn)之Bean的后處理器操作,結(jié)合實(shí)例形式詳細(xì)分析了Bean的后處理器相關(guān)配置、操作方法及使用注意事項(xiàng),需要的朋友可以參考下2019-12-12
idea無法識(shí)別注解,或pom文件異常的問題及解決
文章介紹了三種解決IDEA無法識(shí)別注解或POM文件異常的方法:1.檢查省電模式設(shè)置;2.為未識(shí)別的POM文件添加Maven工程;3.移除并重新添加有問題的模塊2026-01-01

