spring jdbctemplate教程
spring jdbctemplate 是一種強大的機制,可以連接到數(shù)據(jù)庫并執(zhí)行sql查詢。它內(nèi)部使用jdbc api,但消除了jdbc api的許多問題。
jdbc api的問題
jdbc api的問題如下:
- 在執(zhí)行查詢之前和之后,我們需要編寫很多代碼,例如創(chuàng)建連接,語句,關(guān)閉結(jié)果集,連接等。
- 我們需要在數(shù)據(jù)庫邏輯上執(zhí)行異常處理代碼。
- 我們需要處理交易。
- 將所有這些代碼從一個數(shù)據(jù)庫邏輯重復(fù)到另一個數(shù)據(jù)庫邏輯是一項耗時的工作。
spring jdbctemplate的優(yōu)點
spring jdbctemplate消除了上述jdbc api的所有問題。它提供了直接編寫查詢的方法,從而節(jié)省了大量的工作和時間。
spring jdbc方法
spring框架提供了以下用于jdbc數(shù)據(jù)庫訪問的方法:
- jdbctemplate
- namedparameterjdbctemplate
- simplejdbctemplate
- simplejdbcinsert和simplejdbccall
jdbctemplate類
它是spring jdbc支持類的中心類。它負(fù)責(zé)創(chuàng)建和釋放資源,例如創(chuàng)建和關(guān)閉連接對象等。因此,如果您忘記關(guān)閉連接,不會導(dǎo)致任何問題。
它處理異常并提供信息異常消息是通過 org.springframework.dao 包中定義的異常類的幫助。
我們可以借助jdbctemplate類執(zhí)行所有數(shù)據(jù)庫操作,例如插入,更新,從數(shù)據(jù)庫中刪除和檢索數(shù)據(jù)。
讓我們看看spring jdbctemplate類的方法。
方法 | 說明 |
public int update(string query) | 用于插入,更新和刪除記錄。 |
public int update(string query,object ... args) | 用于通過使用給定參數(shù)的preparedstatement插入,更新和刪除記錄。 |
public void execute(string query) | 用于執(zhí)行ddl查詢。 |
public t execute(string sql, preparedstatementcallback action) | 通過使用preparedstatement回調(diào)執(zhí)行查詢。 |
public t query(string sql, resultsetextractor rse) | 用于使用resultsetextractor獲取記錄。 |
public list query(string sql, rowmapper rse) | 用于使用rowmapper獲取記錄。 |
spring jdbctemplate的示例
我們假設(shè)您已經(jīng)在oracle10g數(shù)據(jù)庫中創(chuàng)建了下表。
create table employee( id number(10), name varchar2(100), salary number(10) );
employee.java
此類包含3個帶有構(gòu)造函數(shù),setter和getter的屬性。
package com.yapf; public class employee { private int id; private string name; private float salary; //no-arg and parameterized constructors //getters and setters }
employeedao.java
它包含一個屬性jdbctemplate和三個方法saveemployee(),updateemployee和deleteemployee()。??
package com.yapf; import org.springframework.jdbc.core.jdbctemplate; public class employeedao { private jdbctemplate jdbctemplate; public void setjdbctemplate(jdbctemplate jdbctemplate) { this.jdbctemplate = jdbctemplate; } public int saveemployee(employee e){ string query="insert into employee values( '"+e.getid()+"','"+e.getname()+"','"+e.getsalary()+"')"; return jdbctemplate.update(query); } public int updateemployee(employee e){ string query="update employee set name='"+e.getname()+"',salary='"+e.getsalary()+"' where id='"+e.getid()+"' "; return jdbctemplate.update(query); } public int deleteemployee(employee e){ string query="delete from employee where id='"+e.getid()+"' "; return jdbctemplate.update(query); } }
applicationcontext.xml
drivermanagerdatasource 用于包含有關(guān)數(shù)據(jù)庫的信息,例如驅(qū)動程序類名稱,連接url,用戶名和密碼。
drivermanagerdatasource類型的jdbctemplate類中有一個名為 datasource 的屬性。因此,我們需要在jdbctemplate類中為數(shù)據(jù)源屬性提供drivermanagerdatasource對象的引用。
在這里,我們在employeedao類中使用了jdbctemplate對象,因此我們通過setter方法傳遞了它,但是您也可以使用構(gòu)造函數(shù)。
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="ds" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname" value="oracle.jdbc.driver.oracledriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" /> <property name="username" value="system" /> <property name="password" value="oracle" /> </bean> <bean id="jdbctemplate" class="org.springframework.jdbc.core.jdbctemplate"> <property name="datasource" ref="ds"></property> </bean> <bean id="edao" class="com.yapf.employeedao"> <property name="jdbctemplate" ref="jdbctemplate"></property> </bean> </beans>
test.java
此類從applicationcontext.xml文件獲取bean,并調(diào)用saveemployee()方法。您也可以通過取消注釋代碼來調(diào)用updateemployee()和deleteemployee()方法。
package com.yapf; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; public class test { public static void main(string[] args) { applicationcontext ctx=new classpathxmlapplicationcontext("applicationcontext.xml"); employeedao dao=(employeedao)ctx.getbean("edao"); int status=dao.saveemployee(new employee(102,"amit",35000)); system.out.println(status); /*int status=dao.updateemployee(new employee(102,"sonoo",15000)); system.out.println(status); */ /*employee e=new employee(); e.setid(102); int status=dao.deleteemployee(e); system.out.println(status);*/ } }
spring jdbctemplate中preparedstatement的示例 resultsetextractor示例|通過spring jdbctemplate獲取記錄 rowmapper示例|通過spring jdbctemplate獲取記錄 spring namedparameterjdbctemplate示例 spring simplejdbctemplate示例
- JDBC 教程
- JDBC 驅(qū)動類型
- JDBC 連接數(shù)據(jù)庫范例
- JDBC 連接數(shù)據(jù)庫步驟
- JDBC Statement, PreparedStatement 和 CallableStatement
- JDBC ResultSet 結(jié)果集
- JDBC Resultset 結(jié)果集范例
- JDBC 事務(wù)保存點范例
- Scala 教程
- Scala 簡介
- Scala 類和對象
- Scala 文件 I/O
- Spring 教程
- Spring 模塊
- Spring 依賴注入
- Spring 自動裝配
- Spring MVC教程
- Spring MVC表單標(biāo)簽庫
- Spring security