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&useUnicode=true&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&useUnicode=true&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();

