Spring的JdbcTemplate操作
jdbcTemplate是Spring提供的操作数据库的操作,是基于JDBC实现的。
在之前的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
。
JDBC相关的jar包
<!--Spring的JDBC模板操作-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2.1</version>
</dependency>
JDBCTemplate的使用
1、数据库映射对象
/**
* 数据库映射对象
*/
public class User {
private Long id;
private String userName;
private long sex;
private String address;
//省略get/set方法
}
2、查询结果映射
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* JDBC完成查询的结果
* 需要自定义实现一个RowMapper的实现类
* 该类存在目的就是完成数据库到Java对象的映射
*/
public class UserMapper implements RowMapper<User1> {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getLong("id"));
user.setUserName(resultSet.getString("username"));
user.setSex(resultSet.getLong("sex"));
user.setAddress(resultSet.getString("address"));
return user;
}
}
3、JDBC模板的使用
import org.springframework.jdbc.core.JdbcTemplate;
import com.mchange.v2.c3p0.DriverManagerDataSource;
import java.util.List;
/**
* JDBC模板使用的介绍
*/
public class JDBCTemplateTest {
public static void main(String[] args) {
//创建对象,设置数据源信息
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");
dataSource.setPassword("123456");
//创建jdbcTemplate对象,设置数据源
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
//调用jdbcTemplateTemplate提供的方法
//更新操作
String updateSql ="update user set sex =? where id = ?";
// jdbcTemplate.update(updateSql,new Object[]{1,1});
//删除操作
String deleteSql="delete from user where id = ?";
// jdbcTemplate.update(deleteSql,new Object[]{35});
//jdbcTemplate 对数据的变更(update\insert \delete)都可以通过update方法进行处理
//查询单个对象 queryForObject
String selectSql1="select * from user where id=? ";
// <T> T queryForObject(String sql, Object[] value, RowMapper<T> var3) throws DataAccessException;
User user = jdbcTemplate.queryForObject(selectSql1, new Object[]{1}, new UserMapper());
// System.out.println(user);
//查询多个对象 query
String selectSql2 = "select * from user where sex=?";
List<User> list = jdbcTemplate.query(selectSql2, new Object[]{1}, new UserMapper());
System.out.println(list);
}
}
Spring结合连接池(C3p0)和jdbcTemplate使用
- 场景:操作test库中的user表,通过ID查询用户信息。
1、dao层接口
import org.springframework.jdbc.core.JdbcTemplate;
public class UserDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public User getUserById(Long id){
//查询SQL
String sql = "select * from user where id = ?";
User user = jdbcTemplate.queryForObject(sql, new Object[]{id}, new UserMapper());
//使用jdbcTemplate模板来获取数据库数据
return user;
}
}
2、配置文件
<?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-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.DriverManagerDataSource">
<!--配置连接数据库的核心配置4个参数-->
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
</bean>
<!--配置jdbc模板-->
<bean id="jdbcTenplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--配置数据源-->
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置UserDao-->
<bean id="userDao" class="com.tulun.dao.UserDao">
<!--注入JDBC模板-->
<property name="jdbcTemplate" ref="jdbcTenplate"/>
</bean>
</beans>
3、代码测试
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* JDBC模板使用的介绍
*/
public class JDBCTemplateTest {
public static void main(String[] args) {
//获取IOC的容器
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过容器来获取当前的对象(通过无参构造来实例对象方法)
//获取User对象
//验证前置通知
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
User user = userDao.getUserById(1L);
System.out.println(user);
}
}