Spring框架的JdbcTemplate使用

 更新时间:2021年09月13日 15:46:33   作者:Hudie.  
它是 Spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。本文就来介绍一下Spring框架的JdbcTemplate使用,感兴趣的可以了解一下

JdbcTemplate 概述

在之前的Javaweb学习中,学习了手动封装JdbcTemplate,其好处是通过(sql语句+参数)模板化了编程。而真正的JdbcTemplate类,是Spring框架为我们写好的。它是 Spring 框架中提供的一个对象,是对原始 Jdbc API 对象的简单封装。除了JdbcTemplate,spring 框架还为我们提供了很多的操作模板类。

  • 操作关系型数据的:JdbcTemplate和HibernateTemplate。
  • 操作 nosql 数据库的:RedisTemplate。
  • 操作消息队列的:JmsTemplate。

Spring框架的JdbcTemplate在spring-jdbc的jar包中,,除了要导入这个 jar 包
外,还需要导入一个 spring-tx的jar包(它是和事务相关的)。当然连接池的jar包也不能忘记,这里使用的是c3p0

使用JdbcTemplate一定要导入Spring的数据库模块的三个jar:

在这里插入图片描述

使用JdbcTemplate可以快捷的操作数据库,本文章针对JdbcTemplate进行演示。本文所使用的数据库表为jdbctemplate中的employee,表的内容如下。

在这里插入图片描述

对JdbcTemplate进行分步演示

1:测试数据源

数据库配置文件

jdbctemplate数据库在本地数据库中已经创建。

jdbc.user=root
jdbc.password=Hudie
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/jdbctemplate
jdbc.driverClass=com.mysql.jdbc.Driver

xml配置文件

	<!-- 引入外部配置文件 -->
	<context:property-placeholder location="classpath:dbconfig.properties" />
		
	<!-- 配置数据源 -->
	<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.driverClass}"></property>
	</bean>

测试获取连接

public class txTest {
	ApplicationContext ioc = new ClassPathXmlApplicationContext("ApplicationContext.xml");

	@Test
	public void test() throws SQLException {
		DataSource bean = ioc.getBean(DataSource.class);
		Connection connection = bean.getConnection();
		System.out.println(connection);
		connection.close();
	}
}

执行测试,成功获取到连接。

在这里插入图片描述

2:为IoC容器配置一个JdbcTemplate

如果通过编码来进行获得一个JdbcTemplate对象,可以使用new JdbcTemplate(dataSource);,不过由于这个对象经常使用,将其放在IoC容器中更合适。
具体配置如下:

	<!-- Spring提供了一个JdbcTmplate来操作数据库 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
	</bean>

测试

public class txTest {
	ApplicationContext ioc = new ClassPathXmlApplicationContext("ApplicationContext.xml");
	JdbcTemplate jdbcTemplate= ioc.getBean(JdbcTemplate.class);

	@Test
	public void test2() {
		System.out.println(jdbcTemplate);
	}
}

成功打印出JdbcTemplate对象。

在这里插入图片描述

3:更新

将emp_id=5的记录salary字段改为1300.00

jdbcTemplate.updat():表示更新一条记录。

	@Test
	public void test3() {
		String sql = "update employee set salary = ? where emp_id=?;";
		int update = jdbcTemplate.update(sql, 1300.00, 5);
		System.out.println("更新员工表,影响" + update + "行");
	}

在这里插入图片描述

4:批量插入

jdbcTemplate.batchUpdate(sql, batchArgs):表示批量进行插入,插入一个list集合,返回的是影响的行数。

	@Test
	public void test4() {

		String sql = "insert into employee (emp_name,salary) values(?,?)";
		List<Object[]> batchArgs = new ArrayList<Object[]>();
		batchArgs.add(new Object[] { "张三", 998.98 });
		batchArgs.add(new Object[] { "李四", 998.98 });
		batchArgs.add(new Object[] { "王五", 998.98 });
		batchArgs.add(new Object[] { "赵六", 998.98 });

		// List的长度就是sql语句执行的次数
		int[] is = jdbcTemplate.batchUpdate(sql, batchArgs);
		for (int i : is) {
			System.out.println(i);
		}
	}

int[] is = jdbcTemplate.batchUpdate(sql, batchArgs);返回的结果是影响的行数。

在这里插入图片描述

5:查询emp_id=5的记录,封装为一个Java对象返回。

创建JavaBean

package com.gql.bean;

public class Employee {
	private Integer empId;
	private String empName;
	private Double salary;
	//省略setter、getter与toString方法。
}

查询并封装单条记录

	@Test
	public void test5() {
		String sql = "select emp_id empId,emp_name empName,salary from employee where emp_id=?";
		// rowMapper:规定每一行记录和JavaBean的属性如何映射
		Employee employee = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Employee.class), 5);
		System.out.println(employee);
	}

在这里插入图片描述

6:查询salary>4000的记录,封装为List集合返回

	@Test
	public void test6() {
		String sql = "select emp_id empId,emp_name empName,salary from employee where salary>?";
		List<Employee> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class), 4000);
		for (Employee employee : list) {
			System.out.println(employee);
		}
	}

成功将salary>400的记录封装进list集合。

在这里插入图片描述

7:查询最大的salary

使用mysql的max函数可以获得最大的salary,调用queryForObject方法,返回Double类型。

	@Test
	public void test7() {
		String sql = "select max(salary) from employee";
		Double object = jdbcTemplate.queryForObject(sql, Double.class);
		System.out.println("最高工资是:" + object);
	}

在这里插入图片描述

8:使用具名参数SQL插入一条员工记录,并以Map形式传入参数值。

Spring中使用namedParameterJdbcTemplate来进行含有具名SQL的操作。

将namedParameterJdbcTemplate加到IoC容器中。

	<!-- 配置一个具名参数的Jdbctemplate -->
	<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
		<!-- 使用构造器注入一个数据源 -->
		<constructor-arg name="dataSource" ref="dataSource"></constructor-arg>
	</bean>

在测试中以Map形式传入参数值。

public class txTest {
	ApplicationContext ioc = new ClassPathXmlApplicationContext("ApplicationContext.xml");
	JdbcTemplate jdbcTemplate = ioc.getBean(JdbcTemplate.class);
	NamedParameterJdbcTemplate namedJdbcTemplate = ioc.getBean(NamedParameterJdbcTemplate.class);

	@Test
	public void test9() {
		String sql = "insert into employee (emp_name,salary) values(:empName,:salary)";
		Map<String, Object> paramMap = new HashMap<>();
		// 将所有具名参数的值都放在map中
		paramMap.put("empName", "小红");
		paramMap.put("salary", 12000.00);
		int update = namedJdbcTemplate.update(sql, paramMap);
		System.out.println(update);
	}
}

9:使用具名参数SQL插入一条员工记录,并以SqlparamSource传入参数值。

与上一条实验类似,只是选用了不同的参数类型。

	@Test
	public void test10() {
		String sql = "insert into employee (emp_name,salary) values(:empName,:salary)";
		Employee employee = new Employee();
		employee.setEmpName("小蓝");
		employee.setSalary(9999.00);
		int i = namedJdbcTemplate.update(sql, new BeanPropertySqlParameterSource(employee));
		System.out.println(i);
	}

到此这篇关于Spring框架的JdbcTemplate使用的文章就介绍到这了,更多相关Spring JdbcTemplate内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java递归实现复制一个文件夹下所有文件功能

    java递归实现复制一个文件夹下所有文件功能

    这篇文章主要介绍了java递归实现复制一个文件夹下所有文件功能n次,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • Java 基础语法让你弄懂类和对象

    Java 基础语法让你弄懂类和对象

    C 语言是面向过程的,而 Java 是面向对象是我们常听到的一句话,这章将带你揭晓Java 基础语法中类与对象到底是什么,需要的朋友请参考下文
    2021-08-08
  • SpringBoot实现统一功能处理的教程详解

    SpringBoot实现统一功能处理的教程详解

    这篇文章主要为大家详细介绍了SpringBoot如何实现统一功能处理,文中的示例代码讲解详细,对大家学习或工作有一定借鉴价值,感兴趣的同学可以参考阅读下
    2023-05-05
  • 浅析Java中对称与非对称加密算法原理与使用

    浅析Java中对称与非对称加密算法原理与使用

    密码学是研究编制密码和破译密码的技术科学。这篇文章主要为大家介绍了Java中对称与非对称加密算法的原理与使用,感兴趣的小伙伴可以了解一下
    2023-03-03
  • java使用ArrayList遍历及效率比较实例分析

    java使用ArrayList遍历及效率比较实例分析

    这篇文章主要介绍了java使用ArrayList遍历及效率比较,实例分析了ArrayList遍历的方法与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 详解Java中类的加载顺序

    详解Java中类的加载顺序

    Java中什么时候类加载,第一次需要使用类信息时加载。类加载的原则:延迟加载,能不加载就不加载。下面这篇文章主要介绍了Java中类的加载顺序,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • Servlet+JDBC实现登陆功能的小例子(带验证码)

    Servlet+JDBC实现登陆功能的小例子(带验证码)

    这篇文章主要介绍了Servlet+JDBC实现登陆功能的小例子(带验证码),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 利用Java理解sql的语法(实例讲解)

    利用Java理解sql的语法(实例讲解)

    下面小编就为大家分享一篇利用Java理解sql的语法(实例讲解),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • SpringBoot中动态数据源是实现与用途

    SpringBoot中动态数据源是实现与用途

    这篇文章主要是来和大家讨论一下SpringBoot中动态数据源是实现与用途,文中的示例代码简洁易懂,具有一定的学习价值,感兴趣的可以了解一下
    2023-08-08
  • 浅析 Java多线程

    浅析 Java多线程

    这篇文章主要介绍了Java多线程的相关资料,帮助大家更好的理解和学习Java线程相关知识,感兴趣的朋友可以了解下
    2020-09-09

最新评论