目录
  • jdbctemplate 概述
  • 对jdbctemplate进行分步演示
    • 2:为ioc容器配置一个jdbctemplate
    • 5:查询emp_id=5的记录,封装为一个java对象返回。
    • 6:查询salary>4000的记录,封装为list集合返回
    • 8:使用具名参数sql插入一条员工记录,并以map形式传入参数值。
    • 9:使用具名参数sql插入一条员工记录,并以sqlparamsource传入参数值。

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内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!