天天看點

idea__Spring5架構15——JdbcTmplate的操作

JdbcTmplate的操作

    • 一、JdbcTmplate的CRUD操作。
    • 二、JdbcTmplate在Dao中的使用。
    • 三、JdbcDaoSupport的使用以及Dao的兩種編寫方法。
        • ————————
        • 創作不易,如覺不錯,随手三連點贊,收藏,關注,謝謝~~

項目案例代碼及資料庫:

連結:https://pan.baidu.com/s/14m8pXAAOnPZx5FEj2QaRQA

提取碼:f88e

一、JdbcTmplate的CRUD操作。

之前我們在javaweb已經學習過了JdbcTmplate的操作,但是現在我們在spring中使用。

idea__Spring5架構15——JdbcTmplate的操作

建立maven工程,導入坐标。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>day04_eesy_01jdbctemplate</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
    </dependencies>
</project>
           

配置資料源

idea__Spring5架構15——JdbcTmplate的操作

建立Account實體類

/**
 * 賬戶的實體類
 */
public class Account implements Serializable {

    private Integer id;
    private String name;
    private Float 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 Float getMoney() {
        return money;
    }

    public void setMoney(Float money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                '}';
    }
}

           

接着,我們進行測試查詢

/**
 * JdbcTemplate的CRUD操作
 */
public class JdbcTemplateDemo3 {

    public static void main(String[] args) {
        //1.擷取容器
        ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
        //2.擷取對象
        JdbcTemplate jt = ac.getBean("jdbcTemplate",JdbcTemplate.class);
        //3.執行操作
        //儲存
//        jt.update("insert into account(name,money)values(?,?)","eee",3333f);
        //更新
//        jt.update("update account set name=?,money=? where id=?","test",4567,7);
        //删除
//        jt.update("delete from account where id=?",8);
        //查詢所有
//        List<Account> accounts = jt.query("select * from account where money > ?",new AccountRowMapper(),1000f);
//        List<Account> accounts = jt.query("select * from account where money > ?",new BeanPropertyRowMapper<Account>(Account.class),1000f);
//        for(Account account : accounts){
//            System.out.println(account);
//        }
        //查詢一個
//        List<Account> accounts = jt.query("select * from account where id = ?",new BeanPropertyRowMapper<Account>(Account.class),1);
//        System.out.println(accounts.isEmpty()?"沒有内容":accounts.get(0));

        //查詢傳回一行一列(使用聚合函數,但不加group by子句)
        Long count = jt.queryForObject("select count(*) from account where money > ?",Long.class,1000f);
        System.out.println(count);
    }
}
           

在這裡,我們需要注意兩個問題:

一、查詢所需的方法

idea__Spring5架構15——JdbcTmplate的操作

二、jdbctemplate和queryrunner的差別

idea__Spring5架構15——JdbcTmplate的操作

二、JdbcTmplate在Dao中的使用。

我們的資料庫操作肯定是在dao層完成的,是以我們在dao中使用。

1、建立Dao接口。

/**
 * 賬戶的持久層接口
 */
public interface IAccountDao {

    /**
     * 根據Id查詢賬戶
     * @param accountId
     * @return
     */
    Account findAccountById(Integer accountId);

    /**
     * 根據名稱查詢賬戶
     * @param accountName
     * @return
     */
    Account findAccountByName(String accountName);

    /**
     * 更新賬戶
     * @param account
     */
    void updateAccount(Account account);
}
           

2、建立dao實作類。

/**
 * 賬戶的持久層實作類
 */
public class AccountDaoImpl extends JdbcDaoSupport implements IAccountDao {


    public Account findAccountById(Integer accountId) {
        List<Account> accounts = super.getJdbcTemplate().query("select * from account where id = ?",new BeanPropertyRowMapper<Account>(Account.class),accountId);
        return accounts.isEmpty()?null:accounts.get(0);
    }


    public Account findAccountByName(String accountName) {
        List<Account> accounts = super.getJdbcTemplate().query("select * from account where name = ?",new BeanPropertyRowMapper<Account>(Account.class),accountName);
        if(accounts.isEmpty()){
            return null;
        }
        if(accounts.size()>1){
            throw new RuntimeException("結果集不唯一");
        }
        return accounts.get(0);
    }


    public void updateAccount(Account account) {
        super.getJdbcTemplate().update("update account set name=?,money=? where id=?",account.getName(),account.getMoney(),account.getId());
    }
}
           

3、配置持久層ioc。

idea__Spring5架構15——JdbcTmplate的操作

4、測試

idea__Spring5架構15——JdbcTmplate的操作

三、JdbcDaoSupport的使用以及Dao的兩種編寫方法。

我們發現我們這裡有很多重複的代碼,那如果有多個類,是不是都要把它給寫上去呢?

idea__Spring5架構15——JdbcTmplate的操作

第一種編寫方式:使用注解的方式。

idea__Spring5架構15——JdbcTmplate的操作

第二種編寫方式:

繼承JdbcDaoSupport,就可以把它給省略掉了。

idea__Spring5架構15——JdbcTmplate的操作

但是用了它就不能用注解了,用注解就很麻煩,因為我們看源碼的時候,我們發現這裡是有注解的。

idea__Spring5架構15——JdbcTmplate的操作

用第二種方式的話,那我們就要修改一下bean.xml檔案了。直接配上,即可

idea__Spring5架構15——JdbcTmplate的操作

————————

創作不易,如覺不錯,随手三連點贊,收藏,關注,謝謝~~