Spring(三):JDBC Template,声明式事务

目录

1. Spring 的 JdbcTemplate

1.1 JdbcTemplate 是什么?

1.2 Spring 整合 JdbcTemplate

1.3 实现转账案例

2. Spring 的事务

2.1 Spring 中的事务控制方式

2.2 编程式事务控制相关对象

2.3 基于 XML 的声明式事务控制

2.3.1 快速入门

2.3.2 事务参数的配置详解

2.3.3 小结

2.4 基于注解的声明式事务控制

2.4.1 常用注解

2.4.2 纯注解

2.4.3 小结

3. Spring 集成 web 环境

3.1 ApplicationContext 应用上下文获取方式

3.2 Spring 提供获取应用上下文的工具

3.3 实现


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 案例
步骤分析:

  1. 创建 java 项目,导入坐标
  2. 编写 Account 实体类
  3. 编写 AccountDao 接口和实现类
  4. 编写 AccountService 接口和实现类
  5. 编写 spring 核心配置文件
  6. 编写测试代码

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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值