Spring(二十一):Spring JdbcTemplate

JdbcTemplate主要提供以下五类方法:

  • execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句;
  • update方法及batchUpdate方法:update方法用于执行新增、修改、删除等语句;batchUpdate方法用于执行批处理相关语句;
  • query方法及queryForXXX方法:用于执行查询相关语句;
  • call方法:用于执行存储过程、函数相关语句。

JdbcTemplate提供的接口测试:

第一步:导入包

a)导入mysql驱动包

b)导入spring包

b)导入C3P0依赖包:

第二步:新建spring配置文件(applicationContext.xml):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <!-- 导入资源文件 -->
    <context:property-placeholder location="classpath:db.properties" />
    <!-- 自动扫描的包 -->
    <context:component-scan base-package="com.dx.jdbc"></context:component-scan>

    <!-- 配置C3P0数据源 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
        <property name="driverClass" value="${jdbc.dirverClass}"></property>

        <property name="initialPoolSize" value="${jdbc.initialPoolSize}"></property>
        <property name="maxPoolSize" value="${jdbc.maxPoolSize}"></property>
        <property name="minPoolSize" value="${jdbc.minPoolSize}"></property>
    </bean>

    <!-- 配置Spring 的 JdbcTemplate -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
</beans>

db.properties资源配置文件:

jdbc.user=root
jdbc.password=123456
jdbc.jdbcUrl=jdbc:mysql://localhost/test_spring_jdbc
jdbc.dirverClass=com.mysql.jdbc.Driver

jdbc.initialPoolSize=5
jdbc.maxPoolSize=50
jdbc.minPoolSize=3

第三步:新建测试类:

Department.java

package com.dx.jdbc;

public class Department {
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Department [id=" + id + ", name=" + name + "]";
    }

}

Employee.java

package com.dx.jdbc;

public class Employee {
    private Integer id;
    private String username;
    private Department department;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

    @Override
    public String toString() {
        return "Employee [id=" + id + ", username=" + username + ", department=" + department + "]";
    }

}

JdbcTemplateTest.java测试类

package com.dx.jdbc;

import java.util.List;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

public class JdbcTemplateTest {
    static ApplicationContext ctx = null;
    static DataSource dataSource = null;
    static JdbcTemplate jdbcTemplate = null;

    static {
        ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        dataSource = (DataSource) ctx.getBean("dataSource");

        try {
            System.out.println(dataSource.getConnection());
        } catch (SQLException e) {
            e.printStackTrace();
        }

        jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");
    }

    public static void main(String[] args) throws SQLException {
        // testCreate();
        // testUpdate();
        // getEntity();
        // getList();
        // testQueryForObject();
    }

    private static void testQueryForObject() {
        String sql = "select count(id) from employee";
        long count = jdbcTemplate.queryForObject(sql, Long.class);
        System.out.println(count);
    }

    private static void getList() {
        String sql = "select id,username,depart_id from employee where id>?";
        RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
        List<Employee> employees = jdbcTemplate.query(sql, rowMapper, 1);

        System.out.println(employees);
    }

    /**
     * 注意dpartment不能级联查询,原因:jdbcTemplate是一个小工具,不是ORM框架。
     */
    private static void getEntity() {
        String sql = "select id,username,depart_id from employee where id=?";
        RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
        Employee employee = jdbcTemplate.queryForObject(sql, rowMapper, 1);

        System.out.println(employee);
    }

    private static void testCreate() {
        String sql = "insert into department(id,name)values(?,?)";
        List<Object[]> batchArgs = new ArrayList<Object[]>();
        batchArgs.add(new Object[] { 1, "软件开发部" });
        batchArgs.add(new Object[] { 2, "财务部" });
        batchArgs.add(new Object[] { 3, "人力资源部" });
        batchArgs.add(new Object[] { 4, "企业文化部" });
        batchArgs.add(new Object[] { 5, "市场部" });

        jdbcTemplate.batchUpdate(sql, batchArgs);

        sql = "insert into employee(id,username,depart_id)values(?,?,?)";
        batchArgs = new ArrayList<Object[]>();
        batchArgs.add(new Object[] { 1, "张三", 1 });
        batchArgs.add(new Object[] { 2, "李四", 1 });
        batchArgs.add(new Object[] { 3, "王五", 2 });
        batchArgs.add(new Object[] { 4, "马六", 4 });
        batchArgs.add(new Object[] { 5, "小七", 5 });

        jdbcTemplate.batchUpdate(sql, batchArgs);
    }

    /**
     * 修改
     */
    private static void testUpdate() {
        String sql = "update department set name=? where id=? ";
        jdbcTemplate.update(sql, "开发部", 1);
    }
}

开发中应用:

应用一:Dao类注入jdbcTemplate

package com.dx.jdbc;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;

@Repository
public class EmployeeDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    /**
     * 根据id获取employee实体
     *
     * @param id
     *            employee id信息
     */
    public Employee get(Integer id) {
        String sql = "select id,username,depart_id from employee where id=?";
        RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
        Employee employee = jdbcTemplate.queryForObject(sql, rowMapper, id);

        return employee;
    }
}

调用测试:

package com.dx.jdbc;

import java.util.List;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

public class JdbcTemplateTest {
    static ApplicationContext ctx = null;
    static EmployeeDao employeeDao = null;

    static {
        ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");
        employeeDao = (EmployeeDao) ctx.getBean("employeeDao");
    }

    public static void main(String[] args) throws SQLException {
        testDao();
    }

    private static void testDao() {
        System.out.println(employeeDao.get(1));
    }}

应用二:Dao类依赖JdbcDaoSupport

package com.dx.jdbc;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository;

@Repository
public class DepartmentDao extends JdbcDaoSupport {
    @Autowired
    public void setDataSource2(DataSource dataSource) {
        setDataSource(dataSource);
    }

    /**
     * 根据id获取department实体
     *
     * @param id
     *            department id信息
     */
    public Department get(Integer id) {
        String sql = "select id,name from department where id=?";
        RowMapper<Department> rowMapper = new BeanPropertyRowMapper<>(Department.class);
        Department department = getJdbcTemplate().queryForObject(sql, rowMapper, id);

        return department;
    }
}

调用测试:

package com.dx.jdbc;

import java.util.List;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

public class JdbcTemplateTest {
    static ApplicationContext ctx = null;
    static DepartmentDao departmentDao = null;

    static {
        ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        departmentDao = (DepartmentDao) ctx.getBean("departmentDao");
    }

    public static void main(String[] args) throws SQLException {
        testDaoSupport();
    }

    private static void testDaoSupport() {
        System.out.println(departmentDao.get(1));
    }}

NamedParameterJdbcTemplate具名参数操作对象:

使用如下:

package com.dx.jdbc;

import java.util.List;
import java.util.Map;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;

import javax.sql.DataSource;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.core.namedparam.SqlParameterSource;

public class JdbcTemplateTest {
    static ApplicationContext ctx = null;
    static NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;

    static {
        ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        namedParameterJdbcTemplate = (NamedParameterJdbcTemplate) ctx.getBean("namedParameterJdbcTemplate");
    }

    public static void main(String[] args) throws SQLException {
        testInsert();
        testInsertModel();
    }

    private static void testInsertModel() {
        String sql = "insert into department(id,name)values(:id,:name)";
        Department department = new Department();
        department.setId(100);
        department.setName("name100");
        SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(department);

        namedParameterJdbcTemplate.update(sql, parameterSource);
    }

    private static void testInsert() {
        String sql = "insert into department(id,name)values(:id,:name)";
        Map<String, String> paramMap = new HashMap<>();
        paramMap.put("id", "99");
        paramMap.put("name", "name99");
        namedParameterJdbcTemplate.update(sql, paramMap);
    }
}

原文地址:https://www.cnblogs.com/yy3b2007com/p/9153284.html

时间: 2024-08-01 13:17:00

Spring(二十一):Spring JdbcTemplate的相关文章

框架学习之Spring(二)----AOP and jdbcTemplate

一.AOP aop底层使用动态代理实现 (1)第一种情况,有接口情况,使用动态代理创建接口实现类代理对象 (2)第二种情况,没有接口情况,使用动态代理创建类的子类代理对象 图解:1> 2> 二.AOP操作术语 Joinpoint(连接点):类里面可以被增强的方法,这些方法称为连接点. Pointcut(切入点):所谓切入点是指我们要对那些Joinpoint进行拦截的定义. Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知,通知分为前置通知,后置通知,异常

(二)Spring框架之JDBC的基本使用

案例一: 用Spring IOC方式使用JDBC Test_2.java package jdbc; import java.lang.Thread.State; import java.sql.Connection; import java.sql.Statement; import javax.sql.DataSource; import org.springframework.context.ApplicationContext; import org.springframework.co

spring(二、bean生命周期、用到的设计模式、常用注解)

Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring容器.这里,我们讲的也是 ApplicationContext中Bean的生命周期.而实际上BeanFactory也是差不多的,只不过处理器需要手动注册.  转载 http://www.cnblogs.com/zrtqsk/p/3735273.html 一.生命周期流程图: Spring Bean的

Spring数据访问之JdbcTemplate

Spring数据访问之JdbcTemplate 使用JdbcTemplate的基本操作步骤 1.引jar包 项目的基本架构 这里重点看实现类的内容 1 package cn.hmy.dao.impl; 2 3 4 import java.util.List; 5 6 import org.springframework.jdbc.core.support.JdbcDaoSupport; 7 8 import cn.hmy.beans.Emp; 9 import cn.hmy.dao.IEmpDa

Spring讲解二:Spring中的Bean配置1---基于XML文件的方式

一.在Spring的IOC容器中配置Bean 在xml文件中通过bean节点配置bean id:Bean的名称: (1) 在IOC容器中必须是唯一的 (2) 若id没有指定,Spring自动将权限限定性类名作为bean的名字 (3) id可以指定多个名字,名字之间可以用逗号.分号.或空格分隔 二.Spring容器 在Spring IOC容器读取Bean配置创建Bean实例之前,必须对它进行初始化.只有在容器实例化后,才可以从IOC容器中获取Bean实例并使用. Spring提供了两种类型的IOC

深入探索spring技术内幕(二): 剖析spring管理Bean的原理与配置

求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / \ b c / \ / \ d e f g 返回3. 详细描述: 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败

攻城狮在路上(贰) Spring(二)--- Spring IoC概念介绍

一.IoC的概念: IoC(控制反转)是Spring容器的核心.另一种解释是DI(依赖注入),即让调用类对某一个接口的依赖关系由第三方注入,以移除调用类对某一个接口实现类的一览. 定义如此,由此可见,在面向接口编程的情况下,IoC可以很好的实现解耦,可以以配置的方式为程序提供所需要的接口实现类. 在实际程序开发中,我们只需要提供对应的接口及实现类,然后通过Spring的配置文件或者注解完成对依赖类的装配.二.IoC的类型: 1.通过构造函数: 此种方式的缺点是,在构造函数中注入之后一般会作为一个

【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装,实现简单灵活的Spring框架(十一)

目录 [SSH进阶之路]一步步重构容器实现Spring框架--从一个简单的容器开始(八) [SSH进阶之路]一步步重构容器实现Spring框架--解决容器对组件的"侵入式"管理的两种方案--主动查找和控制反转(九) [SSH进阶之路]一步步重构容器实现Spring框架--配置文件+反射实现IoC容器(十) [SSH进阶之路]一步步重构容器实现Spring框架--彻底封装,实现简单灵活的Spring框架(十一) 博文[SSH进阶之路]一步步重构容器实现Spring框架--从一个简单的容器

框架-------(二)Spring和SpringMVC框架(序列一初始原理概念)

1.什么是Spring? Spring是个java企业级应用的开源框架.Spring主要目标就是简化开发,并通过pojo为基础的编程模型促进良好的编程习惯. 2.为什么要使用Spring框架 它是轻量级的开源框架,基本的版本大约2MB. 控制反转IOC:Spring通过控制反转实现了松散耦合,对象们给出他们的依赖,而不是直接创建或者查找依赖的对象. 面向切面编程:AOP,Spring支持面向切面编程,应用业务逻辑和系统服务分开. 容器:Spring包含并管理应用中对象的生命周期和配置 MVC框架

spring jdbc查询 依赖JdbcTemplate这个类模版封装JDBC的操作

1 package cn.itcast.spring.jdbc; 2 3 import java.util.List; 4 5 import org.springframework.jdbc.core.support.JdbcDaoSupport; 6 7 public class PersonDao extends JdbcDaoSupport{ 8 public void update(){ 9 this.getJdbcTemplate().execute("update person se