SpringBoot中使用JdbcTemplate訪問Oracle數據庫的案例詳解
Oracle相信大家都不陌生吧,一個大型的數據庫,至于數據庫,我相信各位都比較熟悉了,一個軟件系統,不論是我們常做的App、小程序、還是傳統的web站點,我們都有用戶的信息,相關業(yè)務的數據,通常都會存儲在相關數據庫中,比如:MySQL,Oracle,SQL server 等等。
在你看到這篇文章的時候,我相信你對Spring Boot已經有足夠的了解了,我在這篇文檔中將會采用Oracle數據庫進行數據存儲,PS:Oracle數據庫和MySQL有語法差別,雖然總體是一樣的,但是還是存在不一樣的語法。
接下來我們正式開始:
JdbcTemplate
JdbcTemplate是Spring框架中的一個核心類,用于簡化Java應用程序與關系型數據庫的交互操作。它提供了一種簡單而靈活的方式來執(zhí)行SQL查詢、更新和存儲過程調用等數據庫操作。
JdbcTemplate封裝了一些常見的數據庫操作,如查詢單行或多行數據、插入、更新和刪除數據等。它通過使用JDBC(Java Database Connectivity)來與數據庫進行通信,并提供了一些方便的方法來處理結果集、處理異常以及執(zhí)行事務操作。
使用JdbcTemplate可以減少編寫重復的JDBC代碼的工作量,提高開發(fā)效率。它還提供了一些高級功能,如命名參數、批處理操作和查詢結果的映射等,使得數據庫操作更加方便和易于維護。
數據源配置
在此,我說明一下,由于今年我寫這篇文章的時候,發(fā)現Oracle11早已停止更新,Oracle 21的又是官網比較新的,故而我采用了Oracle 19c,如果你自己用的Oracle還是比較舊的版本, 請改為你所對應的版本,不同的版本,會有相應的差別:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--導入jdbc依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.oracle.ojdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.3.0.0</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
接下來,在我們Spring Boot創(chuàng)建的src/main/resources/application.properties添加數據源信息。
# Mysql的配置 #spring.datasource.url=jdbc:mysql://localhost:3306/test #spring.datasource.username=root #spring.datasource.password=123456 #spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # Oracle的配置 spring.datasource.url=jdbc:oracle:thin:@localhost:1521/orcl spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
PS: 在Spring Boot 2.x中默認采用MySQL 8的驅動,故而上邊加了cj
使用JdbcTemplate操作數據庫
Spring 的JdbcTemplate是自動配置的,我們可以使用@Autowried 或者構造函數,或者set方法來注入到我們想要的bean中使用。
我們在Oracle 中創(chuàng)建的數據庫實際上就是我們創(chuàng)建的相關用戶,我們利用我們創(chuàng)建的用戶的賬號和密碼進行登錄,然后再用戶下創(chuàng)建表的。
以下是我創(chuàng)建了root用戶后,然后利用root用戶的賬號密碼進行登錄創(chuàng)建的表的SQL語句
CREATE TABLE useradd ( name varchar2 (100) NOT NULL, age integer NOT NULL )
接下來,我們根據數據庫中創(chuàng)建的表然后創(chuàng)建實體對象:
public class User {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public User() {
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return Objects.equals(name, user.name) && Objects.equals(age, user.age);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}創(chuàng)建相關接口
public interface UserService {
/**
* 新增一個用戶
*
* @param name
* @param age
*/
int create(String name, Integer age);
/**
* 根據name查詢用戶
*
* @param name
* @return
*/
List<User> getByName(String name);
/**
* 根據name刪除用戶
*
* @param name
*/
int deleteByName(String name);
/**
* 獲取用戶總量
*/
int getAllUsers();
/**
* 刪除所有用戶
*/
int deleteAllUsers();
}之后,我們通過jdbcTemplate實現接口中的數據訪問操作:
@Service
public class UserServiceImpl implements UserService {
private JdbcTemplate jdbcTemplate;
UserServiceImpl(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public int create(String name, Integer age) {
return jdbcTemplate.update("insert into USERADD(NAME, AGE) values(?, ?)", name, age);
}
@Override
public List<User> getByName(String name) {
List<User> users = jdbcTemplate.query("select NAME, AGE from USERADD where NAME = ?", (resultSet, i) -> {
User user = new User();
user.setName(resultSet.getString("NAME"));
user.setAge(resultSet.getInt("AGE"));
return user;
}, name);
return users;
}
@Override
public int deleteByName(String name) {
return jdbcTemplate.update("delete from USERADD where NAME = ?", name);
}
@Override
public int getAllUsers() {
return jdbcTemplate.queryForObject("select count(1) from USERADD", Integer.class);
}
@Override
public int deleteAllUsers() {
return jdbcTemplate.update("delete from USERADD");
}
}然后我們采用Spring Boot的單元測試創(chuàng)建一個測試用例,通過創(chuàng)建,刪除,以及查詢來看我們是否正確的對數據庫進行操作。
@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter31ApplicationTests {
@Autowired
private UserService userSerivce;
@Before
public void setUp() {
// 準備,清空user表
userSerivce.deleteAllUsers();
}
@Test
public void test() throws Exception {
// 插入5個用戶
userSerivce.create("miaow", 10);
userSerivce.create("jjkeo", 11);
userSerivce.create("cfase", 30);
userSerivce.create("okeda", 21);
userSerivce.create("joke", 17);
// 查詢名為Oscar的用戶,判斷年齡是否匹配
List<User> userList = userSerivce.getByName("joke");
Assert.assertEquals(17, userList.get(0).getAge().intValue());
// 查數據庫,應該有5個用戶
Assert.assertEquals(5, userSerivce.getAllUsers());
// 刪除兩個用戶
userSerivce.deleteByName("jjkeo");
userSerivce.deleteByName("cfase");
// 查數據庫,應該有5個用戶
Assert.assertEquals(3, userSerivce.getAllUsers());
}
}
我們發(fā)現成功了,通過上面這個簡單的例子,我們可以看到在Spring Boot下訪問數據庫的配置依然秉承了框架的初衷:簡單。
我們只需要在pom.xml中加入數據庫依賴,再到application.properties中配置連接信息,不需要像Spring應用中創(chuàng)建JdbcTemplate的Bean,就可以直接在自己的對象中注入使用。
到此這篇關于SpringBoot中使用JdbcTemplate訪問Oracle數據庫的案例詳解的文章就介紹到這了,更多相關SpringBoot JdbcTemplate訪問Oracle數據庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot集成ElasticSearch實現搜索功能
本文主要介紹了Spring Boot 集成ElasticSearch實現搜索功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2025-03-03
詳解spring cloud config實現datasource的熱部署
這篇文章主要介紹了詳解spring cloud config實現datasource的熱部署,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01
解決Springboot-application.properties中文亂碼問題
這篇文章主要介紹了解決Springboot-application.properties中文亂碼問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Mybatis3中方法返回生成的主鍵:XML,@SelectKey,@Options詳解
這篇文章主要介紹了Mybatis3中方法返回生成的主鍵:XML,@SelectKey,@Options,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01

