spring使用jdbcTemplate和jdbcdaosupport和namedparameter
jdbcTemplate:
首先连接数据库
<!-- 导入外部文件 -->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 配置c3p0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driverClass}"></property>
<property name="jdbcUrl" value="${jdbcUrl}"></property>
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
</bean>
外部配置
driverClass=oracle.jdbc.OracleDriver jdbcUrl=jdbc:oracle:thin:@192.168.1.105:1521:orcl user=ems password=123456
注意写URL的时候写本机的IP,写localhost的时候在Oracle数据库中服务的配置要写localhost
在修改
连接测试的代码
public class JDBCTest { private ApplicationContext ctx=null; private JdbcTemplate jdbcTemplate; { ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate"); } @Test //测试连接 public void testDataSource() throws SQLException{ DataSource dataSource=ctx.getBean(DataSource.class); System.out.println(dataSource.getConnection()); } }
jdbcTemplate支持的五种方法:
-
execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
-
update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
-
query方法及queryForXXX方法:用于执行查询相关语句;
-
call方法:用于执行存储过程、函数相关语句。
在xml中配置jdbcTemplate
<!-- 配置Spring的 jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
使用:
package com.spring.jdbc; import java.sql.SQLException; import javax.sql.DataSource; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; public class JDBCTest { private ApplicationContext ctx=null; private JdbcTemplate jdbcTemplate; { ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); jdbcTemplate=(JdbcTemplate) ctx.getBean("jdbcTemplate"); } @Test //测试连接 public void testDataSource() throws SQLException{ DataSource dataSource=ctx.getBean(DataSource.class); System.out.println(dataSource.getConnection()); } @Test public void testUpdate(){ String sql="update employees set last_name=? where id=?"; jdbcTemplate.update(sql, "Jack",2); } }
批量修改:
//批量修改 @Test public void testBatchUpdate(){ String sql="insert into employees(last_name,deptid) values(?,?)"; List<Object[]> batchArgs=new ArrayList<Object[]>(); batchArgs.add(new Object[]{"AA",1}); batchArgs.add(new Object[]{"BB",2}); jdbcTemplate.batchUpdate(sql,batchArgs); }
NamedParameterJdbcTemplate:具名参数,该对象可以使用具名参数
配置bean
<!-- 配置NamedParameterJdbcTemplate 该对象可以使用具名参数,其没有无参数构造器,所以必须为构造器指定参数-->
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>
Java测试:
package com.spring.jdbc; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.sql.DataSource; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; public class JDBCTest { private ApplicationContext ctx=null; private NamedParameterJdbcTemplate namedParameterJdbcTemplate; { ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); namedParameterJdbcTemplate=ctx.getBean(NamedParameterJdbcTemplate.class); } @Test public void testNamedParameterJdbcTemplate(){ String sql="insert into employees(id,last_name,email,deptid) values(:a,:ln,:email,:id)"; Map<String,Object> paramMap=new HashMap<String, Object>(); paramMap.put("a", 3); paramMap.put("ln", "FF"); paramMap.put("email", "3@qq.com"); paramMap.put("id", 2); namedParameterJdbcTemplate.update(sql, paramMap); } }
改进:
public void testNamedParameterJdbcTemplate2(){
String sql="insert into employees(id,last_name,email,deptid) values(:id,:lastname,:email,:deptid)";
Employees employee=new Employees();
employee.setLastName("haha");
employee.setEmail("4@qq.com");
employee.setDeptId(5);
SqlParameterSource parameterSource=new BeanPropertySqlParameterSource(employee);
namedParameterJdbcTemplate.update(sql, parameterSource);
}
参数名就是对象的 属性。然后直接传入属性。