本节内容

我们对上一节中实现的项目进行改写,将其修改称为注解的方式进行配置。
但是我们要注意的是由于数据库的相关类都是封装在别人jar包中的类,因此无法改写别人的代码,对这种类型的配置只能通过xml的方式进行配置,或者是我们后续学习的使用config class类进行配置。

bean.xml

<?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
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">

    <!--告知spring在创建容器时要扫描的包,配置所需要的标签不是在bean约束中,
       而是在一个名称为context的名称空间和约束中-->

    <context:component-scan base-package="com.lujuan"/>

    <!--没有办法改-->
    <bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner" scope="prototype">
        <constructor-arg name="ds" ref = "dataSource"> </constructor-arg>
    </bean>

    <!--没有办法改-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

        <property name="driverClass" value="com.mysql.jdbc.Driver"> </property>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/eesy?characterEncoding=utf8"> </property>
        <property name="user" value="root"> </property>
        <property name="password" value="Admin@123"> </property>

    </bean>

</beans>

dao-impl 文件

@Repository("accountDao")
public class AccountDaoImpl implements IAccountDao {


    @Resource(name = "queryRunner")
    private QueryRunner queryRunner;//这是commons.dbutils提供的

    public void setQueryRunner(QueryRunner queryRunner) {
        this.queryRunner = queryRunner;
    }




    public List<Account> findAllAccount() {


        List<Account> reV = null;
        try{
            //查询之后顺便映射为实体类
            reV = queryRunner.query("select * from account", new BeanListHandler<Account>(Account.class));

        }catch (Exception e){
            throw new RuntimeException(e);
        }

        return reV;
    }

    public Account findAccountById(Integer id) {

        Account reV = null;
        try{
            reV = queryRunner.query("select * from account where id = ?", new BeanHandler<Account>(Account.class), id);
        }catch (Exception e){
            throw new RuntimeException(e);
        }
        return reV;
    }

    public void addAccount(Account account) {

        try{
            queryRunner.update("insert into account(name, money) values (?, ?)", account.getName(), account.getMoney());
        }catch (Exception e){
            throw new RuntimeException(e);
        }

    }

    public void deleteAccountById(Integer id) {
        try{
            queryRunner.update("delete  from account where id = ?", id);
        }catch (Exception e){
            throw new RuntimeException(e);
        }
    }

    public void updateAccount(Account account) {

        try{
            queryRunner.update("update account set name= ?, money = ? where id = ?", account.getName(), account.getMoney(), account.getId());
        }catch (Exception e){
            throw new RuntimeException(e);
        }

    }
}

主要是增加了上面两行内容,主要是bean定义了依赖注入

service-impl修改

@Service(value="accountService")
public class AccountServiceImpl implements IAccountService {



    @Resource(name = "accountDao")
    private IAccountDao accountDao;


    public void setAccountDao(IAccountDao accountDao) {
        this.accountDao = accountDao;
    }


    public List<Account> findAllAccount() {
        return accountDao.findAllAccount();
    }

    public Account findAccountById(Integer id) {
        return accountDao.findAccountById(id);
    }

    public void addAccount(Account account) {
        accountDao.addAccount(account);
    }

    public void deleteAccountById(Integer id) {

        accountDao.deleteAccountById(id);
    }

    public void updateAccount(Account account) {
        accountDao.updateAccount(account);
    }

    public void saveAccount() {

        System.out.println("AccountServiceImpl: saveAccount");
    }

    @PostConstruct
    public void init(){

        System.out.println("init......");
    }

    @PreDestroy
    public void destroy(){

        System.out.println("destroy......");
    }
}

主要bean定义和依赖注入。
至此更改还是很简单的。
本节完结。