JdbcTemplate
JdbcTemplate
需要匯入額外的jar
- Spring-jdbc.jar
- Spring-tx.jar
- c3p0.jar
- mysql-connector.jar
操作步驟
- 建立jdbcTemplate物件
- 為jdbcTemplate物件設定資料來源
- 資料庫操作 update/query
jdbcTemplate的增刪改查
和普通的DBUtils的增刪改沒什麼兩樣
查的話有一些區別,因為封裝的物件不同了
如果查一行或多行,並把每行都封裝成一個物件的話,就用BeanPropertyRowMapper<XXX>(XXX.class)
如果聚合查詢,直接使用Long.class
返回值是多個的話使用query
,返回單個的話使用queryForObject
//查詢多個物件
List<Account> accountList = jdbcTemplate.query("select * from account", new BeanPropertyRowMapper<Account>(Account.class));
//查詢單個物件 注意,使用的是queryForObject
Account account = jdbcTemplate.queryForObject("select * from account where name=?", new BeanPropertyRowMapper<Account>(Account.class),"jerry");
//聚合查詢
Long count = jdbcTemplate.queryForObject("select count(*) from account", Long.class);
在dao層使用jdbcTemplate的兩種方式
注意,如果使用繼承的方式,就不能使用全註解,如果想使用全註解,就必須使用第一種
(一).直接在dao層中注入JdbaTemplate
一個簡單的JavaBean
package com.cuixiaoming.domain;
public class Account {
private String username;
private double money;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
Dao層
package com.cuixiaoming.dao.impl;
import com.cuixiaoming.dao.AccountDao;
import com.cuixiaoming.domain.Account;
import org.springframework.jdbc.core.JdbcTemplate;
public class AccountDaoImpl implements AccountDao {
//注入JdbcTemplate,提供set方法
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
//增加資料,因為直接注入了JdbcTemplate,所以可以直接使用
@Override
public void save(Account account) {
jdbcTemplate.update("insert into account values (?,?)",account.getUsername(),account.getMoney());
}
}
XML中的配置
<!--配置dao層檔案,其中注入jdbcTemplate-->
<bean id="accountDao" class="com.cuixiaoming.dao.impl.AccountDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<!--配置jdbcTemplate,裡面注入DataSource-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置DataSource,裡面注入基本連線資訊,可以再向外抽取,現在先這樣吧-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///test0325"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
寫一個測試類呼叫Dao層方法
package com.cuixiaoming.jdbcTemplateTest;
import com.cuixiaoming.dao.AccountDao;
import com.cuixiaoming.domain.Account;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class jdbcTemplateDaoTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
AccountDao accountDao = (AccountDao) app.getBean("accountDao");
Account account = new Account();
account.setUsername("王五");
account.setMoney(1000);
accountDao.save(account);
}
}
(二)繼承JdbcDaoSupport
JdbcDaoSupport是一個Spring框架給我們提供的類,用於使用Jdbc運算元據庫的時候,該類中定義了一個JdbcTemplate物件,我們可以直接獲取使用,但是要想建立該物件,需要為其提供一個資料來源
這個類的原始碼貼一下
public abstract class JdbcDaoSupport extends DaoSupport {
//定義物件
private JdbcTemplate jdbcTemplate;
//set方法注入資料來源,判斷是否注入了,注入了就建立JdbcTemplate
public final void setDataSource(DataSource dataSource) {
if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
//如果提供了資料來源就建立JdbcTemplate
this.jdbcTemplate = createJdbcTemplate(dataSource);
initTemplateConfig();
}
}
//使用資料來源建立JdcbTemplate
protected JdbcTemplate createJdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
//當然,我們也可以通過注入JdbcTemplate物件
public final void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
initTemplateConfig();
}
//使用getJdbcTmeplate方法獲取操作模板物件
public final JdbcTemplate getJdbcTemplate() {
return this.jdbcTemplate;
}
}
所以,我們使用這種方式的時候可以不用手動注入了,但是我需要在XML中給jdbcTemplate 配置含有連線引數的dataSource
看一下XML的配置
<!--dao層,裡面注入dataSource!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-->
<bean id="accountDao" class="com.cuixiaoming.dao.impl.AccountDaoImpl2">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置dataSource,裡面注入基本連線資料-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///test0325"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
JdbcDaoSupport並沒有在XML中配置,原因是它是一個抽象類
所以,配置繼承了它的accountDao即可
讓我們疑惑的是,JdbcDaoSupport中命名注入了jdbcTemplate,
為什麼在XML中不給accountDao配置jdbcTemplate,反而直接配置了dataSource呢
我們再仔細看一下JdbcDaoSupport的原碼發現
首先,是可以注入jdbcTemplate的,因為有set方法
public final void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
initTemplateConfig();
}
但是,他有這麼一個方法
public final void setDataSource(DataSource dataSource) {
if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
//如果提供了資料來源就建立JdbcTemplate,賦值給成員變數jdbcTemplate
this.jdbcTemplate = createJdbcTemplate(dataSource);
initTemplateConfig();
}
}
仔細看,這個方法的名字是setDataSource
,是dataSource的set方法,所以可以對DataSource進行直接注入
我又使用了傳統的方式配置XML
<!--配置accountDao,注入jdbcTemplate-->
<bean id="accountDao" class="com.cuixiaoming.dao.impl.AccountDaoImpl2">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<!--配置jdbcTemplate,注入DataSource-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置dataSource,裡面注入基本連線資料-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql:///test0325"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
也獲得了成功
相關文章
- 抽取JDBCTemplateJDBC
- SpringBoot使用JdbcTemplateSpring BootJDBC
- JdbcTemplate基礎JDBC
- JDBCTemplate--介紹JDBC
- Spring框架|整合JdbcTemplateSpring框架JDBC
- springboot整合使用JdbcTemplateSpring BootJDBC
- Spring 的 JdbcTemplate 和 JdbcDaoSupportSpringJDBC
- #Spring JdbcTemplate入門@FDDLCSpringJDBC
- day14-JdbcTemplate-01JDBC
- JdbcTemplate調儲存過程JDBC儲存過程
- Spring JdbcTemplate之使用詳解SpringJDBC
- Spring 系列之jdbcTemplate的使用SpringJDBC
- spring下 -spring整體架構,JdbcTemplate筆記Spring架構JDBC筆記
- Spring04——Spring操作JdbcTemplate進行JDBC操作SpringJDBC
- 第二篇:SpringBoot2.x中使用JdbcTemplateSpring BootJDBC
- Spring Boot 2.x基礎教程:使用JdbcTemplate訪Spring BootJDBC
- 筆記53-Spring jdbcTemplate&宣告式事務筆記SpringJDBC
- spring-boot-route(七)整合jdbcTemplate運算元據庫SpringbootJDBC
- 說說如何在 Spring Boot 中使用 JdbcTemplate 讀寫資料Spring BootJDBC
- 設計模式(十五)——命令模式(Spring框架的JdbcTemplate原始碼分析)設計模式Spring框架JDBC原始碼
- 設計模式 - 命令模式詳解及其在JdbcTemplate中的應用設計模式JDBC
- Spring事務原始碼分析專題(一)JdbcTemplate使用及原始碼分析Spring原始碼JDBC
- #純註解小專案:JdbcTemplate、SpEL@Transactional@PropertySource@EnableTransactionManagement#spring-tx@FDDLCJDBCSpring
- Spring Boot 2.x基礎教程:使用JdbcTemplate訪問MySQL資料庫Spring BootJDBCMySql資料庫
- SpringBoot2 基礎案例(06):引入JdbcTemplate,和多資料來源配置Spring BootJDBC
- SpringBoot2.x入門教程:引入jdbc模組與JdbcTemplate簡單使用Spring BootJDBC
- Spring JdbcTemplate詳解,這都看不懂就安心去當個鹹魚吧!SpringJDBC
- 設計模式學習筆記(十五)命令模式及在Spring JdbcTemplate 中的實現設計模式筆記SpringJDBC
- Spring Boot入門系列(十四)使用JdbcTemplate運算元據庫,配置多資料來源!Spring BootJDBC
- Spring Boot中如何使用JDBC讀取和寫入資料,JDBC和JPA的對比,JdbcTemplate和SimpleJdbcInsert的用法對比Spring BootJDBC
- ? jdbc-plus是一款基於JdbcTemplate增強工具包, 已實現分頁、多租戶、動態表名等外掛,可與mybatis、mybatis-plus等混合使用JDBCMyBatis