目录
3.1 ApplicationContext 应用上下文获取方式
1. Spring 的 JdbcTemplate
1.1 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));
}
}
1.2 Spring 整合 JdbcTemplate
需求:基于 Spring 的 xml 配置实现账户的 CRUD 案例
步骤分析:
- 创建 java 项目,导入坐标
- 编写 Account 实体类
- 编写 AccountDao 接口和实现类
- 编写 AccountService 接口和实现类
- 编写 spring 核心配置文件
- 编写测试代码
1. 创建 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>
2. 编写 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;
}
}
3. 编写 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) {
String sql = "insert into account values(null,?,?)";
jdbcTemplate.update(sql, account.getName(), account.getMoney());
}
/**
* 更新账户信息
*/
@Override
public void update(Account account) {
String sql = "update account set money = ? where name = ?";
jdbcTemplate.update(sql, account.getMoney(), account.getName());
}
/**
* 根据 ID 删除账户
*/
@Override
public void delete(Integer id) {
String sql = "delete from account where id = ?";
jdbcTemplate.update(sql, id);
}
}
4. 编写 AccountService 接口和实现类
public interface AccountService {
/**
* 查询所有账户
*/
List<Account> findAll();
/**
* 根据 ID 查询账户
*/
Account findById(Integer id);
/**
* 添加账户
*/
void save(Account account);
/**
* 更新账户信息
*/
void update(Account account);
/**
* 根据 ID 删除账户
*/
void delete(Integer id);
}
@Service
public class AccountSerivceImpl implements AccountService {
@Autowired
private AccountDao accountDao;
/**
* 查询所有账户
*/
@Override
public List<Account> findAll() {
return accountDao.findAll();
}
/**
* 根据 ID 查询账户
*/
@Override
public Account findById(Integer id) {
return accountDao.findById(id);
}
/**
* 添加账户
*/
@Override
public void save(Account account) {
accountDao.save(account);
}
/**
* 更新账户信息
*/
@Override
public void update(Account account) {
accountDao.update(account);
}
/**
* 根据 ID 删除账户
*/
@Override
public void delete(Integer id) {
accountDao.delete(id);
}
}
5. 编写 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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.spri