Spring(四)------spring的jdbcTemplate操作、配置连接池

本文介绍了如何在Spring框架中使用JdbcTemplate进行CRUD操作,并详细阐述了配置C3P0连接池的步骤。通过设置数据库信息、创建JdbcTemplate对象以及编写RowMapper接口实现类,实现了数据的增删改查。同时强调了在Service层调用DAO层的方法,以及在Spring配置文件中如何配置DAO、Service和JdbcTemplate。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spring是一站式框架,就是在javaee三层中,每一层都有解决技术

而jdbcTemplate技术用在dao层

jdbcTemplate实现crud操作

  • 增加 

首先导入数据库操作所需的jar包 

 创建类,测试用JdbcTemplate技术操作数据库

(1)设置数据库信息,相当于配置连接池

(2)创建JdbcTemplate对象,把配置好的数据库信息传到JdbcTemplate对象中

(3)利用update方法进行添加

package xidian.lili.anno;
import org.junit.Test;
import org.springframework.context.annotation.EnableLoadTimeWeaving;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class JdbcTemplateDemo01 {
/**
 * 增加
 */
	@Test
	public void add() {
		//设置数据库信息
		DriverManagerDataSource dataSource=new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///employees");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");
		
		//创建jdbcTemplate模板对象,设置数据源
		JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
		
		//调用jdbcTemplate里的方法进行添加操作
		String sql="insert into departments values(?,?)";
		int i=jdbcTemplate.update(sql, "d010","Hr");
		System.out.println(i);
		
	}
}
  • 修改

 与增加方法一样,修改sql语句即可

	/**
	 * 修改
	 */
	@Test
	public void update() {
		// 设置数据库信息
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///employees");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");

		// 创建jdbcTemplate模板对象,设置数据源
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

		// 调用jdbcTemplate里的方法进行添加操作

		String sql = "update departments set dept_name=? where dept_no=?";
		int i = jdbcTemplate.update(sql, "dev", "d010");
		System.out.println(i);

	}
  •  删除

 同理,修改sql语句

	@Test
	public void delete() {
		// 设置数据库信息
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///employees");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");

		// 创建jdbcTemplate模板对象,设置数据源
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

		// 调用jdbcTemplate里的方法进行添加操作
		// String sql="insert into departments values(?,?)";
		String sql = "delete from departments where dept_no=?";
		int i = jdbcTemplate.update(sql, "d010");
		System.out.println(i);

	}
  •  查询

(1)查询返回条目数int i = jdbcTemplate.queryForObject(sql, Integer.class);

	/**
	 * 查詢返回条目数
	 */
	@Test
	public void testCount() {
		// 设置数据库信息
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///employees");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");

		// 创建jdbcTemplate模板对象,设置数据源
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

		// 调用jdbcTemplate里的方法进行添加操作
		String sql = "select count(*) from departments";
		int i = jdbcTemplate.queryForObject(sql, Integer.class);
		System.out.println(i);
	}

(2)查询返回对象 

 类似于jdbc,查询返回结果集存储到ResultSet中,在java jdbc框架中封装了ResultSet接口的实现类,但是在这里需要自己创建rowMapper接口的实现类。

	/**
	 * 查詢返回对象
	 */
	@Test
	public void testObject() {
		// 设置数据库信息
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///employees");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");

		// 创建jdbcTemplate模板对象,设置数据源
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

		// 调用jdbcTemplate里的方法进行添加操作
		String sql = "select * from departments where dept_no=?";
		User user =jdbcTemplate.queryForObject(sql, new MyrowMapper(), "d006");
		System.out.println(user);
		
	}

class MyrowMapper implements RowMapper<User>{

	@Override
	public User mapRow(ResultSet rs, int rowNum) throws SQLException {
		String deptname=rs.getString("dept_name");
		String deptno=rs.getString("dept_no");
		User user=new User();
		user.setDeptno(deptno);
		user.setDeptname(deptname);
		return user;
		
	}
	
}

(3)查询返回结果集

调用JdbcTemplate中的<User> List<User> query(String sql, RowMapper<User> rowMapper)方法,MyrowMapper类与上述一致

	/**
	 * 查詢返回list结果集
	 */
	@Test
	public void testList() {
		// 设置数据库信息
		DriverManagerDataSource dataSource = new DriverManagerDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql:///employees");
		dataSource.setUsername("root");
		dataSource.setPassword("123456");

		// 创建jdbcTemplate模板对象,设置数据源
		JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

		// 调用jdbcTemplate里的方法进行添加操作
		String sql = "select * from departments";
		List<User> list = jdbcTemplate.query(sql, new MyrowMapper());
		for (User user : list) {
			System.out.println(user);
		}

	}
}

 上述测试是应用JdbcTemplate类实现curd操作,但是在spring框架中,当然是借助spring配置文件来实现上述功能

也就是在dao层使用jdbcTemplate实现方法,在service层调用dao

  • 导入jar包

要是c3p0的jar版本太高会出现问题,所以导入第一个 

  • spring配置c3p0连接池

 在代码中我们会按照下面这么写,所以在配置文件中,根据ComboPooledDataSource类的路径创建bean对象,根据类中的set方法注入属性,这样就创建了连接池对象

ComboPooledDataSource dataSource=new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql:///employees");
dataSource.setUsername("root");
dataSource.setPassword("123456"); 

  •  配置service对象

在service中调用dao,注入dao属性 

 

  •   配置dao对象

在dao类中要使用jdbctemplate对象的方法,注入 jdbctemplate属性

 

  •   配置jdbctemplate对象

 要传入dataSource对象

综上,spring配置文件如下:

 

<?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">	
	<!-- 配置c3p0连接池 --> 
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql:///employees"></property>
		<property name="user" value="root"></property>
		<property name="password" value="123456"></property>
	</bean>

	
	<!-- 配置dao类 -->
	<bean id="user" class="xidian.lili.anno.User">
		<!-- 向dao类中注入jdbcTemplate属性 -->
		<property name="jdbcTemplate" ref="jdbcTemplate"></property>
	</bean>
	
	<!-- 配置service类 -->
	<bean id="userService" class="xidian.lili.anno.UserService">
		<!-- 向service类中注入dao属性 -->
		<property name="user" ref="user"></property>
	</bean>
	
	<!-- 创建jdbcTemplate对象 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<!-- 向service类中注入连接池属性 -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	
</beans>

dao层User类如下:

package xidian.lili.anno;

import org.springframework.jdbc.core.JdbcTemplate;

public class User {

	private String deptno;
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	private String deptname;
	private JdbcTemplate jdbcTemplate;
	public void add() {
		String sql="insert into departments values(?,?)";
		int row=jdbcTemplate.update(sql, "d010","hr");
		System.out.println(row);
	}
	public String getDeptno() {
		return deptno;
	}
	public void setDeptno(String deptno) {
		this.deptno = deptno;
	}
	public String getDeptname() {
		return deptname;
	}
	public void setDeptname(String deptname) {
		this.deptname = deptname;
	}
	
	@Override
	public String toString() {
		return "User [deptno=" + deptno + ", deptname=" + deptname + "]";
	}
	
	
}

service层UserService类如下:

package xidian.lili.anno;

public class UserService {

	private User user;

	public void setUser(User user) {
		this.user = user;
	}
	public void add(){
		user.add();
	}
}

测试:

package xidian.lili.anno;

import java.security.Provider.Service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestTemplate {
	@Test
	public void test(){
		ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
		UserService servcie=(UserService) context.getBean("userService");
		servcie.add();

	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值