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();