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);
    }
参数名就是对象的 属性。然后直接传入属性。
posted @ 2016-08-14 19:45  陆伟  阅读(957)  评论(0编辑  收藏  举报