Spring框架對JDBC的簡單封裝。提供了一個JDBCTemplate對象簡化JDBC的開發。
使用步驟
-
導入架包: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 -
創建JdbcTemplate對象。
JdbcTemplate template = new JdbcTemplate(new DataSource); // 創建JdbcTemplate對象,需要傳入數據庫連接池對象。
-
調用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
表中的數據如下:
案例2
有如下一個表格:emp表格
需求
-
修改id = 1001數據的 salary 字段記錄為 10000
-
添加一條記錄
-
刪除剛才添加的記錄
-
查詢id為1001的記錄,將其封裝為Map集合
-
查詢所有記錄,將其封裝為List
-
查詢所有記錄,將其封裝為Emp對象的List集合
-
查詢總記錄數
實現前,為了后續的實現方便:創建一個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);
}
}