spring jdbctemplate教程
spring jdbctemplate 是一種強大的機制,可以連接到數據庫并執行sql查詢。它內部使用jdbc api,但消除了jdbc api的許多問題。
jdbc api的問題
jdbc api的問題如下:
- 在執行查詢之前和之后,我們需要編寫很多代碼,例如創建連接,語句,關閉結果集,連接等。
- 我們需要在數據庫邏輯上執行異常處理代碼。
- 我們需要處理交易。
- 將所有這些代碼從一個數據庫邏輯重復到另一個數據庫邏輯是一項耗時的工作。
spring jdbctemplate的優點
spring jdbctemplate消除了上述jdbc api的所有問題。它提供了直接編寫查詢的方法,從而節省了大量的工作和時間。
spring jdbc方法
spring框架提供了以下用于jdbc數據庫訪問的方法:
- jdbctemplate
- namedparameterjdbctemplate
- simplejdbctemplate
- simplejdbcinsert和simplejdbccall
jdbctemplate類
它是spring jdbc支持類的中心類。它負責創建和釋放資源,例如創建和關閉連接對象等。因此,如果您忘記關閉連接,不會導致任何問題。
它處理異常并提供信息異常消息是通過 org.springframework.dao 包中定義的異常類的幫助。
我們可以借助jdbctemplate類執行所有數據庫操作,例如插入,更新,從數據庫中刪除和檢索數據。
讓我們看看spring jdbctemplate類的方法。
方法 | 說明 |
public int update(string query) | 用于插入,更新和刪除記錄。 |
public int update(string query,object ... args) | 用于通過使用給定參數的preparedstatement插入,更新和刪除記錄。 |
public void execute(string query) | 用于執行ddl查詢。 |
public t execute(string sql, preparedstatementcallback action) | 通過使用preparedstatement回調執行查詢。 |
public t query(string sql, resultsetextractor rse) | 用于使用resultsetextractor獲取記錄。 |
public list query(string sql, rowmapper rse) | 用于使用rowmapper獲取記錄。 |
spring jdbctemplate的示例
我們假設您已經在oracle10g數據庫中創建了下表。
create table employee( id number(10), name varchar2(100), salary number(10) );
employee.java
此類包含3個帶有構造函數,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 用于包含有關數據庫的信息,例如驅動程序類名稱,連接url,用戶名和密碼。
drivermanagerdatasource類型的jdbctemplate類中有一個名為 datasource 的屬性。因此,我們需要在jdbctemplate類中為數據源屬性提供drivermanagerdatasource對象的引用。
在這里,我們在employeedao類中使用了jdbctemplate對象,因此我們通過setter方法傳遞了它,但是您也可以使用構造函數。
<?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,并調用saveemployee()方法。您也可以通過取消注釋代碼來調用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示例