Spring 的 JdbcTemplate
JdbcTemplate
是什么?
JdbcTemplate
是 spring 框架中提供的一个模板对象,是对原始繁琐的 JDBC API 对象的简单封装。
核心对象:
JdbcTemplate jdbcTemplate = new JdbcTemplate(DataSource dataSource);
核心方法:
int update(); // 执行增、删、改语句
List<T> query(); // 查询多个
T queryForObject(); // 查询一个
new BeanPropertyRowMapper<>(); // 实现 ORM 映射封装
查询数据库所有账户信息到 Account 实体中:
public class JdbcTemplateTest {
@Test
public void testFindAll() throws Exception {
// 创建核心对象
JdbcTemplate jdbcTemplate = new JdbcTemplate(JdbcUtils.getDataSource());
// 编写 sql
String sql = "select * from account";
// 执行 sql
List<Account> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Account.class));
}
}
Spring 整合 JdbcTemplate
需求:基于 Spring 的 xml 配置实现账户的 CRUD 案例
步骤分析:
- 创建 java 项目,导入坐标
- 编写
Account
实体类 - 编写
AccountDao
接口和实现类 - 编写
AccountService
接口和实现类 - 编写 spring 核心配置文件
- 编写测试代码
创建 java 项目,导入坐标
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>1.11</java.version>
<maven.compiler.source>1.11</maven.compiler.source>
<maven.compiler.target>1.11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.15</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.13</version>
</dependency>
<!-- jdbcTemplate 相关的两个依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
</dependencies>
编写 Account
实体类
public class Account {
private Integer id;
private String name;
private Double money;
@Override
public String toString() {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
}
编写 AccountDao
接口和实现类
public interface AccountDao {
/**
* 查询所有账户
*/
List<Account> findAll();
/**
* 根据 ID 查询账户
*/
Account findById(Integer id);
/**
* 添加账户
*/
void save(Account account);
/**
* 更新账户信息
*/
public void update(Account account);
/**
* 根据 ID 删除账户
*/
public void delete(Integer id);
}
@Repository
public class AccountDaoImpl implements AccountDao {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 查询所有账户
*/
@Override
public List<Account> findAll() {
String sql = "select * from account";
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<Account>(Account.class));
}
/**
* 根据 ID 查询账户
*/
@Override
public Account findById(Integer id) {
String sql = "select * from account where id = ?";
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Account>(Account.class), id);
}
/**
* 添加账户
*/
@Override
public void save(Account account