Spring 整合JdbcTemplate

本文详细介绍如何使用jdbcTemplate操作数据库,包括配置依赖、数据源和执行增删改查等操作,并介绍了如何配置和使用声明式事务管理器transactionManager。

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

如何使用jdbcTemplate操作数据库

第一步:添加jar包依赖

在这里插入图片描述


第二步:添加dataSource.properties配置文件

mysql.driverClass=com.mysql.jdbc.Driver
mysql.jdbcUrl=jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=utf-8
mysql.user=root
mysql.password=123456

第三步:配置dateSource和jdbcTemplate对象

两种方式xml的公共配置:

<!-- 组件扫描 -->
<context:component-scan base-package="com.study"></context:component-scan>

<!-- 加载配置文件 
"classpath:"前缀表示 src下
在配置文件之后通过  ${key} 获得内容
-->
<context:property-placeholder location="classpath:dataSource.properties"/>

在使用<context:property-placeholder>标签引入配置文件后,在xml中可以直接使用 k e y 获 取 配 置 , 在 j a v a 代 码 中 可 以 用 @ V a l u e ( v a l u e = " {key}获取配置,在java代码中可以用 @Value(value=" keyjava@Value(value="{key}") 来获取配置。


方式一:使用xml

1、配置dataSource

<!-- 数据库连接池 使用Druid数据源 -->
<bean id="dataSourceConfig" class="com.alibaba.druid.pool.DruidDataSource"
      destroy-method="close">
    <property name="url" value="${mysql.jdbcUrl}" />
    <property name="username" value="${mysql.user}" />
    <property name="password" value="${mysql.password}" />
    <property name="driverClassName" value="${mysql.driverClass}" />
</bean>
    
<!-- 数据库连接池  使用c3p0数据源 -->
<!-- 
<bean id="dataSourceConfig" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<property name="driverClass" value="${mysql.driverClass}"></property>
	<property name="jdbcUrl" value="${mysql.jdbcUrl}"></property>
	<property name="user" value="${mysql.user}"></property>
	<property name="password"  value="${mysql.password}"></property>
</bean>
-->

2、配置jdbcTemplate

<!-- JdbcTemplate对象 -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <!--注入dataSource-->
    <property name="dataSource" ref="dataSourceConfig"></property>
</bean>

方式二:使用@Bean

1、配置dataSource

@Value(value="${mysql.jdbcUrl}") 
private String url;

@Value(value="${mysql.user}") 
private String username;

@Value(value="${mysql.password}") 
private String password;

@Value(value="${mysql.driverClass}") 
private String driverClass;

@Bean
public DruidDataSource createDataSource() {
	DruidDataSource dataSource = new DruidDataSource();
	dataSource.setUrl(url);
	dataSource.setUsername(username);
	dataSource.setPassword(password);
	dataSource.setDriverClassName(driverClass);
	return dataSource;
}

2、配置jdbcTemplate

@Bean(name="jdbcTemplate")
public JdbcTemplate createJdbcTemplate(DruidDataSource dataSource) {
	JdbcTemplate jdbcTemplate = new JdbcTemplate();
	jdbcTemplate.setDataSource(dataSource);
	return jdbcTemplate;
}

第四步:使用jdbcTemplate操作数据库Demo

这里贴出常用的增删改等操作的demo

package com.study.dao.impl;

import java.sql.Types;
import java.util.Arrays;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import com.study.dao.UserDao;
import com.study.entity.User;

@Repository("com.study.dao.impl.UserDaoImpl")
public class UserDaoImpl implements UserDao
{
    @Resource(name = "jdbcTemplate")
    private JdbcTemplate jdbcTemplate;
    
    //添加用户
    @Override
    public int addUser(User user)
    {
        //1 创建 sql 语句
        String sql = "insert into user (username,birthday,sex,address) values (?,?,?,?)";
        //2 调用方法实现
        Object[] args = { user.getUsername(), user.getBirthday(), user.getSex(), user.getAddress() };
        //int update = jdbcTemplate.update(sql,args);
        int add = jdbcTemplate.update(sql, args, new int[] { Types.VARCHAR, Types.DATE, Types.VARCHAR, Types.VARCHAR });
        return add;
    }
    
    //批量添加
    @Override
    public int[] batchAddUser(List<Object[]> batchArgs)
    {
        String sql = "insert into user (username,birthday,sex,address) values (?,?,?,?)";
        int[] ints = jdbcTemplate.batchUpdate(sql, batchArgs);
        return ints;
    }
    
    //更新用户
    @Override
    public int updateUser(User user)
    {
        //1 创建 sql 语句
        String sql = "update user set username = ? where id= ?";
        //2 调用方法实现
        Object[] args = { user.getUsername(), user.getId() };
        int update = jdbcTemplate.update(sql, args);
        return update;
    }
    
    //删除用户
    @Override
    public int deleteUser(Integer id)
    {
        //1 创建 sql 语句
        String sql = "delete from user where id = ? ";
        int delete = jdbcTemplate.update(sql, id);
        return delete;
    }
    
    //查询表记录数
    @Override
    public int selectCount()
    {
        String sql = "select count(*) from user";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        return count;
    }
    
    //查询返回对象
    @Override
    public User selectInfoById(Integer id)
    {
        String sql = "select * from user where id=?";
        //调用方法
        User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), id);
        return user;
    }
    
    //查询返回集合
    @Override
    public List<User> selectAllUserInfo()
    {
        String sql = "select * from user";
        //调用方法
        List<User> userList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<User>(User.class));
        return userList;
    }
}



如何使用声明式事务管理器transactionManager

第一步:配置事务管理器

方式一:使用xml

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<!--注入数据源-->
	<property name="dataSource" ref="dataSourceConfig"></property>
</bean>

方式二:使用@Bean

//创建事务管理器
@Bean
public DataSourceTransactionManager getDataSourceTransactionManager(DruidDataSource dataSource){
	DataSourceTransactionManager manager=new DataSourceTransactionManager ();
	//注入数据源
	manager.setDataSource(dataSource);
	return manager;
}

第二步:开启事务管理

注意:在开启事务注解后,@Transactional才会生效。

<!-- 开启事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

第三步:使用@Transactional注解

@Transactional:如果只有一个事务管理器,那么无需指定

@Transactional(transactionManager = "transactionManager"):如果有多个事务管理器,则需要指定使用哪个。

@Transactional如果放在类上面,表示类中所有方法添加事务,如果放在方法上面,只表示当前方法添加事务

	@Override
	@Transactional(transactionManager = "transactionManager")
	public int addAndUpdateUser(User user) {
		userdao.addUser(user);
		user.setId(33);
		int updateUser = userdao.updateUser(user);
		int i=1/0;
		return updateUser;
	}

完整项目结构如下:
在这里插入图片描述

项目git地址

link.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值