詳解spring與jdbc整合操作
先上一段簡(jiǎn)單示例
public class MyTemplate { private DataSource dataSource; public DataSource getDataSource() { return dataSource; } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void insert(String sql) throws SQLException{ Connection conn = this.dataSource.getConnection(); Statement stmt = conn.createStatement(); stmt.executeUpdate(sql); stmt.close(); conn.close(); } }
Dao類
public class PersonDao extends MyTemplate{ public void savePerson() throws Exception{ this.insert("insert into person(pid,pname) values(3,'aaa')"); } }
spring配置文件
<!-- 引入properties配置文件 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:jdbc.properties</value> </property> </bean> <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <bean id="myTemplate" class="cn.qjc.jdbc.dao.MyTemplate"> <!-- setter注入 --> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> <bean id="personDao" class="cn.qjc.jdbc.dao.PersonDao"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean> </beans>
測(cè)試類
public class PersonDaoTest { @Test public void testPersonDao() throws Exception{ ApplicationContext context = new ClassPathXmlApplicationContext("cn/qjc/jdbc/applicationContext.xml"); PersonDao personDao = (PersonDao)context.getBean("personDao"); personDao.savePerson(); } }
以上代碼將DataSource注入給MyTemplate,再把DataSource注入給PersonDao,因?yàn)閜ersonDao繼承MyTemplate,所以擁有Datasource屬性。既然PersonDao繼承MyTemplate,所以PersonDao類注入可以改為
<bean id="personDao" class="cn.qjc.jdbc.dao.PersonDao" parent="myTemplate"></bean>
以上例子中MyTemplate類似于設(shè)計(jì)模式中的模板模式也叫模板方法模式,模板方法模式是所有模式中最為常見(jiàn)的幾個(gè)模式之一,是基于繼承的代碼復(fù)用的基本技術(shù)。
模板模式 = 靜態(tài)代碼+動(dòng)態(tài)變量
在spring中動(dòng)態(tài)變量可以用注入的形式給予。這樣的編程方式適合包裝成模板。靜態(tài)代碼構(gòu)成了模板,而動(dòng)態(tài)變量則是需要傳入的參數(shù)。
spring與jdbc結(jié)合核心類JdbcTemplate
1、基于模板的設(shè)置(為什么可以設(shè)置成基于模板的形式)
2、完成了資源的創(chuàng)建和釋放的工作
3、簡(jiǎn)化為我們對(duì)JDBC的操作
4、完成了對(duì)JDBC的核心流程的工作,包括SQL語(yǔ)句的創(chuàng)建和執(zhí)行
5、僅需要傳遞DataSource就可以把它實(shí)例化
6、JdbcTemplate只需要?jiǎng)?chuàng)建一次
7、JdbcTemplate是線程安全類
使用spring+jdbc修改上面例子(myTemplate類去掉)
public class PersonDao extends JdbcDaoSupport { public void savePerson(String sql){ this.getJdbcTemplate().execute(sql); } }
spring配置文件改為
<bean id="personDao" class="cn.qjc.jdbc.dao.PersonDao"> <property name="dataSource"> <ref bean="dataSource"/> </property> </bean>
JdbcTemplate類結(jié)構(gòu)圖
執(zhí)行過(guò)程
說(shuō)明:
1、執(zhí)行數(shù)據(jù)的操作的是JdbcTemplate
2、最根本的步驟就是要把dataSource注入到JdbcTemplate
3、通過(guò)給JdbcTemplate注入dataSource
a、采用構(gòu)造器的形式注入
b、采用setter方法進(jìn)行注入
4、可以給JdbcDaoSupport注入dataSource
5、可以給JdbcDaoSupport注入JdbcTemplate
所以spring與jdbc整合有三種方法,但實(shí)際上核心類為JdbcTemplate
1、使用JdbcTemplate
在Dao類中,用JdbcTemplate作為屬性,用spring對(duì)JdbcTemplate進(jìn)行注入。再對(duì)JdbcTemplate進(jìn)行DataSource注入。
注:為什么只要對(duì)JdbcTemplate注入DataSource就可以了?
2、繼承jdbcDaoSupport
在Dao類中,繼承JdbcDaoSupport。因?yàn)镴dbcDaoSupport已經(jīng)有了JdbcTemplate的引用,所以只要繼承JdbcDaoSupport就相當(dāng)于有了JdbcTemplate屬性。
3、繼承JdbcTemplate
spring還提供了其他ORM框架整合模式都差不多,完全可直接套用。
spring+hibernate
spring+Jdo
由此可看出spring IOC 和 DI 的強(qiáng)大,IOC和DI 完成了從接口到類的對(duì)應(yīng)。利用spring容器程序員很容易的在客戶端實(shí)現(xiàn)面向接口編程,而且很容易給接口裝配,結(jié)構(gòu)也可以設(shè)置的很靈活。因?yàn)榻涌谑亲约簩?xiě)的,類也是自己寫(xiě)的,配置文件也是自己寫(xiě)的。spring實(shí)際完成了創(chuàng)建對(duì)象和裝配的工作,它會(huì)自動(dòng)的對(duì)應(yīng)起來(lái)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Spring 數(shù)據(jù)庫(kù)連接池(JDBC)詳解
- 詳解spring開(kāi)發(fā)_JDBC操作MySQL數(shù)據(jù)庫(kù)
- Spring的連接數(shù)據(jù)庫(kù)以及JDBC模板(實(shí)例講解)
- 淺析Spring的JdbcTemplate方法
- spring對(duì)JDBC和orm的支持實(shí)例詳解
- Spring jdbc中數(shù)據(jù)庫(kù)操作對(duì)象化模型的實(shí)例詳解
- Spring Data JDBC介紹及實(shí)現(xiàn)代碼
- spring 整合JDBC和AOP事務(wù)的方法
- 關(guān)于Spring項(xiàng)目對(duì)JDBC的支持與基本使用詳解
相關(guān)文章
SpringBoot設(shè)置默認(rèn)主頁(yè)的方法步驟
這篇文章主要介紹了SpringBoot設(shè)置默認(rèn)主頁(yè)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12java單點(diǎn)登錄(SSO)的實(shí)現(xiàn)
SSO是指在多個(gè)應(yīng)用系統(tǒng)中個(gè),用戶只需要登陸一次就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng),本文主要介紹了java單點(diǎn)登錄的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2021-07-07線程池之newCachedThreadPool可緩存線程池的實(shí)例
這篇文章主要介紹了線程池之newCachedThreadPool可緩存線程池的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06SpringCloud?Gateway詳細(xì)分析實(shí)現(xiàn)負(fù)載均衡與熔斷和限流
這篇文章主要介紹了SpringCloud?Gateway實(shí)現(xiàn)路由轉(zhuǎn)發(fā),負(fù)載均衡,熔斷和限流,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07java設(shè)計(jì)模式之裝飾器模式(Decorator)
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之裝飾器模式Decorator,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01SpringBoot項(xiàng)目啟動(dòng)時(shí)如何讀取配置以及初始化資源
這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目啟動(dòng)時(shí)如何讀取配置以及初始化資源的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06詳解Java從后臺(tái)重定向(redirect)到另一個(gè)項(xiàng)目的方法
這篇文章主要介紹了詳解Java從后臺(tái)重定向(redirect)到另一個(gè)項(xiàng)目的方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04