Spring JDBC 的簡單使用


Spring框架對JDBC的簡單封裝。提供了一個JDBCTemplate對象簡化JDBC的開發。

使用步驟

  1. 導入架包:commons-logging-1.2.jar、spring-beans-5.0.0.RELEASE.jar、spring-core-5.0.0.RELEASE.jar、
    spring-jdbc-5.0.0.RELEASE.jar、spring-tx-5.0.0.RELEASE.jar

  2. 創建JdbcTemplate對象。

    JdbcTemplate template = new JdbcTemplate(new DataSource);
    // 創建JdbcTemplate對象,需要傳入數據庫連接池對象。
    
  3. 調用JdbcTemplate的方法,對數據庫進行操作:

    update()
    // 執行insert into、delete、set語句(增、刪、改)
    
    queryForMap()
    // 查詢結果將結果集封裝為map集合,將列名作為key,將值作 value 將這條記錄封裝為一個map集合
    
    備注:這個方法查詢的結果集長度只能是1
    
    queryForList()
    // 查詢結果將結果集封裝為list集合
    
    備注:將每一條記錄封裝為一個Map集合,再將Map集合裝載到List集合中
    
    query()
    // 查詢結果,將結果封裝為JavaBean對象
    
    queryForObject()
    // 查詢結果,將結果封裝為對象
    
    備注:一般用於聚合函數的查詢
    

實例1

有如下一個數據庫表格:

CREATE TABLE account (
    id INT PRIMARY KEY AUTO_INCREMENT,   -- id
    NAME VARCHAR(10),                    -- 名字
    balance DOUBLE                       -- 余額
);

INSERT INTO account (NAME, balance) VALUES ('LeeHua', 1000), ('Tom', 1000), ('WanWu', 2000);

配置文件如下:druid-1.0.9.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://MySQL地址/數據庫名稱
username=登錄mysql的用戶名
password=密碼
initialSize=初始化數據庫連接池連接數量
maxActive=最大數據庫連接池連接數量
maxWait=最大超時時間(/ms)

Java代碼操作數據庫表:把id=3的用戶的賬戶余額修改為5000

package my.view.jdbctemplate;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;

public class JdbcTemplateDemo01 {

    public static void main(String[] args) throws Exception {
        // 獲取加載配置文件的對象
        Properties properties = new Properties();

        // 獲取類的類加載器
        ClassLoader classLoader = JdbcTemplateDemo01.class.getClassLoader();

        // 獲取druid-1.0.9.properties配置文件資源輸入流
        InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");

        // 加載配置文件
        properties.load(resourceAsStream);

        // 獲取連接池對象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);

        // 創建JdbcTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯SQL語句
        String sql = "UPDATE account SET balance = 5000 WHERE id = ?";

        // 調用JdbcTemplate對象的update()方法,給SQL語句的?賦值,並執行SQL語句。該方法返回值是一個int類型的數。
        int update = jdbcTemplate.update(sql, 3);

        // 輸出執行的SQL語句,影響表格中的行數。
        System.out.println(update);
    }

}

運行程序,控制台輸出:

1

表中的數據如下:

img

案例2

有如下一個表格:emp表格

img

需求

  1. 修改id = 1001數據的 salary 字段記錄為 10000

  2. 添加一條記錄

  3. 刪除剛才添加的記錄

  4. 查詢id為1001的記錄,將其封裝為Map集合

  5. 查詢所有記錄,將其封裝為List

  6. 查詢所有記錄,將其封裝為Emp對象的List集合

  7. 查詢總記錄數

實現前,為了后續的實現方便:創建一個Emp類,封裝Emp表數據的JavaBean。創建一個工具類,用來獲取數據庫連接池對象。

Emp.java

package my.view.domain;

import java.util.Date;

public class Emp {

    /** 員工id */
    private int id;
    /** 員工姓名 */
    private String ename;
    /** 職務id */
    private int job_id;
    /** 上級領導 */
    private int mgr;
    /** 入職日期 */
    private Date joindate;
    /** 工資 */
    private double salary;
    /** 獎金 */
    private double bonus;
    /** 所在部門編號 */
    private int dept_id;

    public Emp() {
    }

    public Emp(int id, String ename, int job_id, int mgr, Date joindate, double salary, double bonus, int dept_id) {
        this.id = id;
        this.ename = ename;
        this.job_id = job_id;
        this.mgr = mgr;
        this.joindate = joindate;
        this.salary = salary;
        this.bonus = bonus;
        this.dept_id = dept_id;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public int getJob_id() {
        return job_id;
    }

    public void setJob_id(int job_id) {
        this.job_id = job_id;
    }

    public int getMgr() {
        return mgr;
    }

    public void setMgr(int mgr) {
        this.mgr = mgr;
    }

    public Date getJoindate() {
        return joindate;
    }

    public void setJoindate(Date joindate) {
        this.joindate = joindate;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public int getDept_id() {
        return dept_id;
    }

    public void setDept_id(int dept_id) {
        this.dept_id = dept_id;
    }

    public double getBonus() {
        return bonus;
    }

    public void setBonus(double bonus) {
        this.bonus = bonus;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "id=" + id +
                ", ename='" + ename + '\'' +
                ", job_id=" + job_id +
                ", mgr=" + mgr +
                ", joindate=" + joindate +
                ", salary=" + salary +
                ", bonus=" + bonus +
                ", dept_id=" + dept_id +
                '}';
    }

}
package my.view.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.util.Properties;

public class JdbcUtils {

    /**
     * 數據庫連接對象
     */
    private static DataSource dataSource;

    /*
     獲取數據庫連接池對象
     */
    static {

        try {
            // 獲取加載配置文件的對象
            Properties properties = new Properties();
            // 獲取類的類加載器
            ClassLoader classLoader = JdbcUtils.class.getClassLoader();
            // 獲取druid-1.0.9.properties配置文件資源輸入流
            InputStream resourceAsStream = classLoader.getResourceAsStream("druid-1.0.9.properties");
            // 加載配置文件
            properties.load(resourceAsStream);
            // 獲取連接池對象
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /**
     * 獲取連接池對象
     */
    public static DataSource getDataSource() {
        return dataSource;
    }

    /**
     * 獲取數據庫連接對象
     */
    public static Connection getConnection() throws Exception {
        return dataSource.getConnection();
    }

    /**
     * 歸還連接 或 釋放資源
     * @param t 要被歸還到熟即可連接池對象的數據庫連接對象 或 要被釋放的資源
     * @param <T> 數據庫連接對象的類型 或 要被釋放的資源對象的類型
     */
    public static <T> void releaseResources (T t){
        if(t != null){
            try {
                // 利用反射,獲取class對象
                Class<?> aClass = t.getClass();
                // 獲取class對象中的方法對象
                Method close = aClass.getMethod("close");
                // 執行方法
                close.invoke(t);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

} 

需求1的實現

package my.view.jdbctemplate;

import my.view.utils.JdbcUtils;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

public class JdbcTemplateDemoTest {

    /**
     * 修改id = 1001數據的 salary 字段記錄為 10000
     */
    @Test
    public void updateSetTest01() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "UPDATE emp SET salary = ? WHERE id = ?";

        // 執行SQL語句
        int update = jdbcTemplate.update(sql, 10000, 1001);

        // 輸出執行SQL語句后的返回值
        System.out.println(update);
    }

}

需求2的實現

package my.view.jdbctemplate;

import my.view.utils.JdbcUtils;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

public class JdbcTemplateDemoTest {

    /**
     * 添加一條數據
     */
    @Test
    public void updateInsertTest01() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "INSERT INTO emp (id, ename, salary) VALUE (?, ?, ?)";

        // 執行SQL語句
        int insert = jdbcTemplate.update(sql, 1015, "LeeHua", 8000);

        // 輸出執行SQL語句后的返回值
        System.out.println(insert);
    }

}

需求3的實現

package my.view.jdbctemplate;

import my.view.utils.JdbcUtils;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;

public class JdbcTemplateDemoTest {

    /**
     * 刪除剛才添加的記錄
     */
    @Test
    public void updateDeleteTest03() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "DELETE FROM emp WHERE id = ?";

        // 執行SQL語句
        int delete = jdbcTemplate.update(sql, 1015);

        // 輸出執行SQL語句后的返回值
        System.out.println(delete);
    }

}

需求4的實現

package my.view.jdbctemplate;

import my.view.utils.JdbcUtils;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class JdbcTemplateDemoTest {

    /**
     * 查詢id為1001的記錄,將其封裝為Map集合
     */
    @Test
    public void queryForMapTest01() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "SELECT * FROM emp WHERE id = ?;";

        // 執行SQL語句
        Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql, 1001);

        // 獲取Key值,即列名稱
        Set<String> stringKey = stringObjectMap.keySet();

        // 獲取Set集合的迭代器對象,並遍歷該迭代器對象
        Iterator<String> ite = stringKey.iterator();
        while (ite.hasNext()) {
            // 通過迭代器對象中的每一個值(Map集合中的鍵),獲取key-value
            String key = ite.next();
            System.out.println(
                    "Key:" + key +
                            "    Value:" + stringObjectMap.get(key)
            );
        }
    }
    
}

進行測試,控制台輸出:

Key:id    Value:1001
Key:ename    Value:Sun Wukong
Key:job_id    Value:4
Key:mgr    Value:1004
Key:joindate    Value:2000-12-17
Key:salary    Value:10000.00
Key:bonus    Value:null
Key:dept_id    Value:20

需求5的實現

package my.view.jdbctemplate;

import my.view.utils.JdbcUtils;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.util.List;
import java.util.Map;

public class JdbcTemplateDemoTest {

    /**
     * 查詢所有記錄,將其封裝為List
     */
    @Test
    public void queryForListTest01() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "SELECT * FROM emp;";

        // 執行SQL語句
        List<Map<String, Object>> stringObjectList = jdbcTemplate.queryForList(sql);

        // 輸出查詢結果
        stringObjectList.forEach(System.out::println);
    }
}

進行測試,控制台輸出:

{id=1001, ename=Sun Wukong, job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.00, bonus=null, dept_id=20}
{id=1002, ename=Lu Junyi, job_id=3, mgr=1006, joindate=2001-02-20, salary=16000.00, bonus=3000.00, dept_id=30}
{id=1003, ename=Lin Chong, job_id=3, mgr=1006, joindate=2001-02-22, salary=12500.00, bonus=5000.00, dept_id=30}
{id=1004, ename=Tang Monk, job_id=2, mgr=1009, joindate=2001-04-02, salary=29750.00, bonus=null, dept_id=20}
{id=1005, ename=Li Yan, job_id=4, mgr=1006, joindate=2001-09-28, salary=12500.00, bonus=14000.00, dept_id=30}
{id=1006, ename=Song Jiang, job_id=2, mgr=1009, joindate=2001-05-01, salary=28500.00, bonus=null, dept_id=30}
{id=1007, ename=Liu Bei, job_id=2, mgr=1009, joindate=2001-09-01, salary=24500.00, bonus=null, dept_id=10}
{id=1008, ename=Zhu Bajie, job_id=4, mgr=1004, joindate=2007-04-19, salary=30000.00, bonus=null, dept_id=20}
{id=1009, ename=Luo Guanzhong, job_id=1, mgr=null, joindate=2001-11-17, salary=50000.00, bonus=null, dept_id=10}
{id=1010, ename=Wu Yong, job_id=3, mgr=1006, joindate=2001-09-08, salary=15000.00, bonus=0.00, dept_id=30}
{id=1011, ename=sand monk, job_id=4, mgr=1004, joindate=2007-05-23, salary=11000.00, bonus=null, dept_id=20}
{id=1012, ename=Li Yan, job_id=4, mgr=1006, joindate=2001-12-03, salary=9500.00, bonus=null, dept_id=30}
{id=1013, ename=Little White Dragon, job_id=4, mgr=1004, joindate=2001-12-03, salary=30000.00, bonus=null, dept_id=20}
{id=1014, ename=Guan Yu, job_id=4, mgr=1007, joindate=2002-01-23, salary=13000.00, bonus=null, dept_id=10}

需求6的實現

package my.view.jdbctemplate;

import my.view.domain.Emp;
import my.view.utils.JdbcUtils;
import org.junit.Test;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class JdbcTemplateDemoTest {

    /**
     * 查詢所有記錄,將其封裝為Emp對象的List集合
     */
    @Test
    public void queryTest06() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "SELECT * FROM emp;";

        // 執行SQL語句,將其封裝為Emp對象的List集合
        List<Emp> empList = jdbcTemplate.query(sql, new RowMapper<Emp>() {
            @Override
            public Emp mapRow(ResultSet resultSet, int i) throws SQLException {
                return new Emp(
                        // 員工ID
                        resultSet.getInt("id"),
                        // 員工姓名
                        resultSet.getString("ename"),
                        // 職務ID
                        resultSet.getInt("job_id"),
                        // 上級領導
                        resultSet.getInt("mgr"),
                        // 入職日期
                        resultSet.getDate("joindate"),
                        // 工資
                        resultSet.getDouble("salary"),
                        // 獎金
                        resultSet.getDouble("bonus"),
                        // 所在部門編號
                        resultSet.getInt("dept_id")
                );
            }
        });
        empList.forEach(System.out::println);
    }
}

query()方法,參數說明:

query(String sql, RowMapper<T> rowMapper)

參數:
// String sql:SQL語句
// rowMapper:一般我們使用BeanPropertyRowMapper實現類。可以完成數據到
//            JavaBean的自動封裝,也可以覆蓋重寫RowMapper<T>函數式接口
//            的方法。

運行測試,控制台輸出:

Emp{id=1001, ename='Sun Wukong', job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.0, bonus=0.0, dept_id=20}
Emp{id=1002, ename='Lu Junyi', job_id=3, mgr=1006, joindate=2001-02-20, salary=16000.0, bonus=3000.0, dept_id=30}
Emp{id=1003, ename='Lin Chong', job_id=3, mgr=1006, joindate=2001-02-22, salary=12500.0, bonus=5000.0, dept_id=30}
Emp{id=1004, ename='Tang Monk', job_id=2, mgr=1009, joindate=2001-04-02, salary=29750.0, bonus=0.0, dept_id=20}
Emp{id=1005, ename='Li Yan', job_id=4, mgr=1006, joindate=2001-09-28, salary=12500.0, bonus=14000.0, dept_id=30}
Emp{id=1006, ename='Song Jiang', job_id=2, mgr=1009, joindate=2001-05-01, salary=28500.0, bonus=0.0, dept_id=30}
Emp{id=1007, ename='Liu Bei', job_id=2, mgr=1009, joindate=2001-09-01, salary=24500.0, bonus=0.0, dept_id=10}
Emp{id=1008, ename='Zhu Bajie', job_id=4, mgr=1004, joindate=2007-04-19, salary=30000.0, bonus=0.0, dept_id=20}
Emp{id=1009, ename='Luo Guanzhong', job_id=1, mgr=0, joindate=2001-11-17, salary=50000.0, bonus=0.0, dept_id=10}
Emp{id=1010, ename='Wu Yong', job_id=3, mgr=1006, joindate=2001-09-08, salary=15000.0, bonus=0.0, dept_id=30}
Emp{id=1011, ename='sand monk', job_id=4, mgr=1004, joindate=2007-05-23, salary=11000.0, bonus=0.0, dept_id=20}
Emp{id=1012, ename='Li Yan', job_id=4, mgr=1006, joindate=2001-12-03, salary=9500.0, bonus=0.0, dept_id=30}
Emp{id=1013, ename='Little White Dragon', job_id=4, mgr=1004, joindate=2001-12-03, salary=30000.0, bonus=0.0, dept_id=20}
Emp{id=1014, ename='Guan Yu', job_id=4, mgr=1007, joindate=2002-01-23, salary=13000.0, bonus=0.0, dept_id=10}

需求7的實現

package my.view.jdbctemplate;

import my.view.domain.Emp;
import my.view.utils.JdbcUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class JdbcTemplateDemoTest {
    /**
     * 查詢總記錄數
     */
    @Test
    public void queryTest08() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "SELECT COUNT(*) FROM emp;";

        // 執行SQL語句,查詢的結果是一個Long類型的數,該方法傳入Long類作為參數
        Long aLong = jdbcTemplate.queryForObject(sql, Long.class);

        // 輸出查詢結果
        System.out.println(aLong);
    }
}

運行測試,控制台輸出:

14

1-7需求所有代碼如下:

package my.view.jdbctemplate;

import my.view.domain.Emp;
import my.view.utils.JdbcUtils;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @Author: YiHua Lee
 * @Version: 1.8.0_201       Java SE 8
 * @Application: IntelliJ IDEA
 * @CreateTime: 2020/2/19 20:42
 * @Description:
 */
public class JdbcTemplateDemoTest {

    /**
     * 修改id = 1001數據的 salary 字段記錄為 10000
     */
    @Test
    public void updateSetTest01() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "UPDATE emp SET salary = ? WHERE id = ?";

        // 執行SQL語句
        int update = jdbcTemplate.update(sql, 10000, 1001);

        // 輸出執行SQL語句后的返回值
        System.out.println(update);
    }

    /**
     * 添加一條數據
     */
    @Test
    public void updateInsertTest02() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "INSERT INTO emp (id, ename, salary) VALUE (?, ?, ?)";

        // 執行SQL語句
        int insert = jdbcTemplate.update(sql, 1015, "LeeHua", 8000);

        // 輸出執行SQL語句后的返回值
        System.out.println(insert);
    }

    /**
     * 刪除剛才添加的記錄
     */
    @Test
    public void updateDeleteTest03() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "DELETE FROM emp WHERE id = ?";

        // 執行SQL語句
        int delete = jdbcTemplate.update(sql, 1015);

        // 輸出執行SQL語句后的返回值
        System.out.println(delete);
    }

    /**
     * 查詢id為1001的記錄,將其封裝為Map集合
     */
    @Test
    public void queryForMapTest04() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "SELECT * FROM emp WHERE id = ?;";

        // 執行SQL語句
        Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql, 1001);

        // 獲取Key值,即列名稱
        Set<String> stringKey = stringObjectMap.keySet();

        // 獲取Set集合的迭代器對象,並遍歷該迭代器對象
        Iterator<String> ite = stringKey.iterator();
        while (ite.hasNext()) {
            // 通過迭代器對象中的每一個值(Map集合中的鍵),獲取key-value
            String key = ite.next();
            System.out.println(
                    "Key:" + key +
                            "    Value:" + stringObjectMap.get(key)
            );
        }
    }

    /**
     * 查詢所有記錄,將其封裝為List
     */
    @Test
    public void queryForListTest05() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "SELECT * FROM emp;";

        // 執行SQL語句
        List<Map<String, Object>> stringObjectList = jdbcTemplate.queryForList(sql);

        // 輸出查詢結果
        stringObjectList.forEach(System.out::println);
    }

    /**
     * 1、查詢所有記錄,將其封裝為Emp對象的List集合
     */
    @Test
    public void queryTest06() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "SELECT * FROM emp;";

        // 執行SQL語句,將其封裝為Emp對象的List集合
        List<Emp> empList = jdbcTemplate.query(sql, new RowMapper<Emp>() {
            @Override
            public Emp mapRow(ResultSet resultSet, int i) throws SQLException {
                return new Emp(
                        // 員工ID
                        resultSet.getInt("id"),
                        // 員工姓名
                        resultSet.getString("ename"),
                        // 職務ID
                        resultSet.getInt("job_id"),
                        // 上級領導
                        resultSet.getInt("mgr"),
                        // 入職日期
                        resultSet.getDate("joindate"),
                        // 工資
                        resultSet.getDouble("salary"),
                        // 獎金
                        resultSet.getDouble("bonus"),
                        // 所在部門編號
                        resultSet.getInt("dept_id")
                );
            }
        });

//        List<Emp> empList1 = jdbcTemplate.query(sql, (ResultSet resultSet, int i) -> new Emp(
//                // 員工ID
//                resultSet.getInt("id"),
//                // 員工姓名
//                resultSet.getString("ename"),
//                // 職務ID
//                resultSet.getInt("job_id"),
//                // 上級領導
//                resultSet.getInt("mgr"),
//                // 入職日期
//                resultSet.getDate("joindate"),
//                // 工資
//                resultSet.getDouble("salary"),
//                // 獎金
//                resultSet.getDouble("bonus"),
//                // 所在部門編號
//                resultSet.getInt("dept_id")
//        ));
        // 輸出查詢結果
        empList.forEach(System.out::println);
    }

    /**
     * 2、查詢所有記錄,將其封裝為Emp對象的List集合
     * BeanPropertyRowMapper<>() 類,實現了RowMapper<>()接口
     *
     * 使用BeanPropertyRowMapper<>() 類,將每一行數據存儲到BeanPropertyRowMapper對象中,
     * 傳入的類,用來存儲數據的數據類型,必須都是包裝類數據,如String、Integer
     */
    @Test
    public void queryTest07() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "SELECT * FROM emp;";

        // 執行SQL語句,將其封裝為Emp對象的List集合
        List<Emp> empList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));

        // 輸出查詢結果
        empList.forEach(System.out::println);
    }

    /**
     * 查詢總記錄數
     */
    @Test
    public void queryTest08() {
        // 調用自己定義的工具類JdbcUtils,獲取數據庫連接池對象
        DataSource dataSource = JdbcUtils.getDataSource();

        // 獲取JDBCTemplate對象
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // 定義預編譯的SQL語句
        String sql = "SELECT COUNT(*) FROM emp;";

        // 執行SQL語句,查詢的結果是一個Long類型的數,該方法傳入Long類作為參數
        Long aLong = jdbcTemplate.queryForObject(sql, Long.class);

        // 輸出查詢結果
        System.out.println(aLong);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM