Spring JdbcTemplate詳解及項目中的運用


1.Spring對不同的持久化支持:

Spring為各種支持的持久化技術,都提供了簡單操作的模板和回調

ORM持久化技術 模板類
JDBC org.springframework.jdbc.core.JdbcTemplate
Hibernate5.0 org.springframework.orm.hibernate5.HibernateTemplate
IBatis(MyBatis) org.springframework.orm.ibatis.SqlMapClientTemplate
JPA org.springfrmaework.orm.jpa.JpaTemplate

2.JdbcTemplate簡介

  Spring對數據庫的操作在jdbc上面做了深層次的封裝,使用spring的注入功能,可以把DataSource注冊到JdbcTemplate之中。

  JdbcTemplate位於中。其全限定命名為org.springframework.jdbc.core.JdbcTemplate。要使用JdbcTemlate還需一個這個包包含了一下事務和異常控制

  

3.JdbcTemplate主要提供以下五類方法:

  • execute方法:可以用於執行任何SQL語句,一般用於執行DDL語句;

  • update方法及batchUpdate方法:update方法用於執行新增、修改、刪除等語句;batchUpdate方法用於執行批處理相關語句;

  • query方法及queryForXXX方法:用於執行查詢相關語句;

  • call方法:用於執行存儲過程、函數相關語句。

4.batchUpdate()批量插入、更新和刪除方法

 

復制代碼
1 String sql="insert into user (name,deptid) values (?,?)";
2 
3 List<Object[]> batchArgs=new ArrayList<Object[]>();
4 batchArgs.add(new Object[]{"caoyc",6});
5 batchArgs.add(new Object[]{"zhh",8});
6 batchArgs.add(new Object[]{"cjx",8});
7 
8 jdbcTemplate.batchUpdate(sql, batchArgs);
復制代碼

增:

AspDaoUtil.getJdbcTemplate().executeUpdate(INSERT_SQL,new Object[]{

pkid,field_main.get("mdjlx") 
});

刪:

AspDaoUtil.getJdbcTemplate().executeUpdate(DELETE_SQL,new Object[]{
pkid
});

改:

AspDaoUtil.getJdbcTemplate().executeUpdate(update_electronicarchives_sql,new Object[]{
dzwjh,dzwjh,pk_id
});

查1:查詢條件為主鍵,數據唯一

FieldList field_main = AspDaoUtil.getJdbcTemplate().queryField(QUERY_SQL, new Object[]{ pkid });

查2:查詢條件不為主鍵,數據可能出現多條

RowList rowList_gdpz = AspDaoUtil.getJdbcTemplate().queryRowList(gdpz_query_sql, new Object[]{pk_id,mdjlx});
for (int r = 0; r < rowList_gdpz.size(); r++) {
FieldList field_gdpz = rowList_gdpz.get(r);

int xh = r + 1;
fjmc = field_gdpz.get("FCAPTION")+xh;
fileurl = field_gdpz.get("fpath");

AspDaoUtil.getJdbcTemplate().executeUpdate(gdpz_insert_sql,new Object[]{
pk_id,qlsxbm,qlsxmc,bmmc,bgqx,sxbbh,fjmc,field_gdpz.get("sfby"),fzxx2,"",bmbm,qlsxlx,fileurl
});
}

5.事務

事務開啟:        AspDaoUtil.getJdbcTemplate().startTransaction();

執行事務:   AspDaoUtil.getJdbcTemplate().commitTransaction();

回滾事務:  AspDaoUtil.getJdbcTemplate().rollbackTransaction();

6.項目模板:

public class XXXXX {

private static final String QUERY_BJ_SQL = "SELECT * FROM XXXX WHERE projid = ? ";


private static final String UPDATE_CG_SQL = "UPDATE XXXXX SET tszt=?,tsjg=? WHERE projid=? ";
protected static Logger log = Logger.getRootLogger();

public void finish(String projid){

AspDaoUtil.getJdbcTemplate().startTransaction();
try{
XXXXXX
}catch (Exception e){
e.printStackTrace();
AspDaoUtil.getJdbcTemplate().rollbackTransaction();
}
}
}

 

7.選擇自己的數據源

7.1數據源配置 global-datasource.xml

<?xml version="1.0" encoding="gb2312"?>
<datasource-config>


<!-- 數據庫連接配置-Mysql版本-->
<datasource name="XXX" class="jos.framework.jdbc.datasource.DruidDataSource" load="true" default="true" dialect="mysql">
<!-- <property name="driver">com.mysql.jdbc.Driver</property>
<property name="url">jdbc:mysql://ip地址:端口號/數據庫名稱?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=utf8</property>
<property name="username">用戶名</property>
<property name="password">密碼</property> -->


<property name="initialPoolSize">2</property>
<property name="maxPoolSize">200</property>
<property name="minPoolSize">5</property>
<property name="maxIdleTime">25000</property>
<property name="maxStatements">0</property>
<property name="preferredTestQuery">SELECT 1 FROM C3P0TESTTABLE</property>
<property name="testConnectionOnCheckin">false</property>
<property name="testConnectionOnCheckout">true</property>
<property name="acquireIncrement">5</property>
<property name="idleConnectionTestPeriod">18000</property>
<property name="poolPreparedStatements">true</property>
</datasource>

<!-- 數據庫連接配置-Mysql版本-->
<datasource name="XXX" class="jos.framework.jdbc.datasource.DruidDataSource" load="true" default="false" dialect="mysql">
<property name="driver">com.mysql.jdbc.Driver</property>
<property name="url">jdbc:mysql://ip地址:端口號/數據庫名稱?allowMultiQueries=true&amp;useUnicode=true&amp;characterEncoding=utf8</property>
<property name="username">用戶名</property>
<property name="password">密碼</property>
<property name="initialPoolSize">2</property>
<property name="maxPoolSize">200</property>
<property name="minPoolSize">5</property>
<property name="maxIdleTime">25000</property>
<property name="maxStatements">0</property>
<property name="preferredTestQuery">SELECT 1 FROM C3P0TESTTABLE</property>
<property name="testConnectionOnCheckin">false</property>
<property name="testConnectionOnCheckout">true</property>
<property name="acquireIncrement">5</property>
<property name="idleConnectionTestPeriod">18000</property>
<property name="poolPreparedStatements">true</property>
</datasource>

</datasource-config>

7.2代碼JdbcTemplate jdbcTemplate = new JdbcTemplate("XXX"); 

7.2.1開啟事務:jdbcTemplate.startTransaction();

  執行事務:jdbcTemplate.commitTransaction();

  回滾事務:jdbcTemplate.rollbackTransaction();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM