目录
如何使用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=" key获取配置,在java代码中可以用@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.