翟高粵
摘 要:Spring是當(dāng)今流行的Java Web開發(fā)框架,它能解決大部分企業(yè)應(yīng)用開發(fā)的復(fù)雜性問題。對于Java開發(fā)人員來說,掌握Spring框架數(shù)據(jù)庫開發(fā)的基本方法,是進(jìn)行編寫應(yīng)用軟件的必備技能之一。本文主要介紹Spring框架數(shù)據(jù)庫開發(fā)的基本方法及應(yīng)用,并通過一個實(shí)例說明Spring框架數(shù)據(jù)庫編程的基本使用方法,從而感受Spring數(shù)據(jù)庫編程的便利。
關(guān)鍵詞:Spring框架;MySQL;JDBC;數(shù)據(jù)庫編程
Spring 是在2003年興起的一個輕量級的Java應(yīng)用開發(fā)框架,它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring框架降低了Java EE API的使用難度,特別是數(shù)據(jù)庫編程方面,Spring集成了JDBC,JDBC是Spring數(shù)據(jù)訪問/集成中的重要模塊,它負(fù)責(zé)數(shù)據(jù)庫資源管理和錯誤處理,大大簡化了開發(fā)人員對數(shù)據(jù)庫的操作,使得開發(fā)人員可以從煩瑣的數(shù)據(jù)庫操作中解脫出來,從而將更多的精力投入到編寫業(yè)務(wù)邏輯中。
1.相關(guān)理論
1.1 SpringJDBC
Spring JDBC是對傳統(tǒng)JDBC訪問的簡單封裝,使用Spring JDBC之后,可以省去一部分以前需要開發(fā)人員編寫的訪問數(shù)據(jù)的底層操作,比如注冊驅(qū)動、獲得連接、執(zhí)行查詢等等。Spring JDBC相當(dāng)于一個簡單封裝的持久層框架,原始功能比較簡單,使用起來也比較簡單,如果開發(fā)一些小型項(xiàng)目,是可以直接使用的,如果是一些大型項(xiàng)目,由于它并不是真正的orm框架,因此需要自己封裝一些工具,如果有能力封裝的話,那么Spring JDBC用起來是非常舒服的,性能也很強(qiáng),不比mybatis差。
1.2 MySQL
MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件之一。
MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi),這樣就增加了速度并提高了靈活性。
MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型和大型網(wǎng)站的開發(fā)都選擇MySQL作為網(wǎng)站數(shù)據(jù)庫。
MySQL和Spring JDBC進(jìn)行配合使用,兼容性好,開發(fā)效率高。
2.SpringJDBC模塊詳解
2.1 Spring JdbcTemplate
針對數(shù)據(jù)庫的操作,Spring框架提供了JdbcTemplate類,該類是Spring框架數(shù)據(jù)抽象層的基礎(chǔ),其他更高層次的抽象類卻是構(gòu)建于JdbcTemplate類之上。也就是說JdbcTemplate類是SpringJDBC的核心類。JdbcTemplate類的繼承關(guān)系如圖1所示。
從圖1可以看出,JdbcTemplate繼承自抽象類JdbcAccessor,同時(shí)實(shí)現(xiàn)了JdbcOperations接口。其中JdbcTemplate類的直接父類是JdbcAccessor,該類為子類提供了一些訪問數(shù)據(jù)庫時(shí)使用的公共屬性,具體如下。
(1)DataSource屬性
其主要功能是獲取數(shù)據(jù)庫連接,具體實(shí)現(xiàn)時(shí)還可以引入對數(shù)據(jù)庫連接的緩沖池和分布式事務(wù)的支持,它可以作為訪問數(shù)據(jù)庫資源的標(biāo)準(zhǔn)接口。
(2)SQLExceptionTranslator屬性
其主要功能通過必要的設(shè)置或者獲取SQLExceptionTranslator中的方法,可以使JdbcException在需要處理SQLException時(shí),委托SQLExceptionTranslator的實(shí)現(xiàn)類來完成相關(guān)的轉(zhuǎn)譯工作。
(3)JdbcOperations接口
該接口定義了在JdbcTemplate類中可以使用的操作集合,包括添加、修改、查詢和刪
除等操作。
2.2 Spring JDBC的配置
Spring JDBC模塊主要由4個包組成,分別是core、dataSource、object和support包。Spring對數(shù)據(jù)庫的操作都封裝在這幾個包中,所以要想使用JDBC,就需要對其進(jìn)行配置。
具體含義見表1所示。
定義JdbcTemplate時(shí),需要將dataScource注入到JdbcTemplate中,而其他需要使用JdbcTemplate的Bean,也需要將JdbcTemplate注入到該Bean中。
3.SpringJDBC編程實(shí)現(xiàn)
在前面講到的JdbcTemplate類中,提供了大量的更新和查詢數(shù)據(jù)庫的方法,接下來本文使用這些方法來演示如何操作數(shù)據(jù)庫。
3.1 execute()方法
execute(String sql)方法能夠完成執(zhí)行SQL語句的功能。
(1)首先我們先在MySQL中創(chuàng)建一個名為spring的數(shù)據(jù)庫,如圖1所示。
(2)在MyEclipse中,創(chuàng)建一個名為firstDataBase的Web項(xiàng)目,將運(yùn)行Spring框架所需的5個基礎(chǔ)JAR包以及Spring事務(wù)處理的JAR包復(fù)制到項(xiàng)目的lib目錄并發(fā)布到類路徑中。
(3)在src目錄下,創(chuàng)建配置文件applicationContext.xml,在該文件中配置id為dataSource的數(shù)據(jù)源Bean和id為jdbcTemplate的JDBC模板Bean,并將數(shù)據(jù)源注入到JDBC模板中,具體代碼如下所示。
"org.springframework.jdbc.datasource.DriverManagerDataSource"> <!--數(shù)據(jù)庫驅(qū)動 --> <!--連接數(shù)據(jù)庫的url --> <!--連接數(shù)據(jù)庫的用戶名 --> <!--連接數(shù)據(jù)庫的密碼 -->
<!-- 2配置JDBC模板 -->
class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 默認(rèn)必須使用數(shù)據(jù)源 -->
(4)在src目錄下,創(chuàng)建一個com.szjm.jdbc包,在該包中創(chuàng)建測試類JdbcTemplateTest。在該類的main()方法中通過Spring容器獲取在配置文件中定義的JdbcTemplate實(shí)例,然后用該實(shí)例的execute方法執(zhí)行創(chuàng)建數(shù)據(jù)表的SQL語句,具體代碼如下。
@Test
public void mainTest() {
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdTemplate =
(JdbcTemplate) applicationContext.getBean("jdbcTemplate");
jdTemplate.execute("create table account(" +
"id int primary key auto_increment," +
"username varchar(50)," +
"balance double)");
System.out.println("創(chuàng)建成功”);
}
3.2 update方法
update方法可以完成插入、更新和刪除數(shù)據(jù)的操作。在JdbcTemplate類中,根據(jù)不同的參數(shù),提供了一系列update方法,接下來本文使用這些方法來演示如何進(jìn)行數(shù)據(jù)庫更新。
(1)創(chuàng)建實(shí)體類Account,在該類中定義id、username和balance屬性,以及其對應(yīng)的getter/setter方法。
(2)創(chuàng)建接口AccountDao,并在接口中定義添加、更新和刪除賬戶的方法,部分代碼如下所示。
public interface AccountDao {
public int addAccount(Account account);
public int updateAccount(Account account);
public int deleteAccount(int id);
public Account findAccountById(int id);
public List
}
(3)創(chuàng)建AccountDao接口的實(shí)現(xiàn)類AccountDaoImpl,并在類中實(shí)現(xiàn)添加、更新和刪除賬戶的方法。
public class AccountDaoImpl implements AccountDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public int addAccount(Account account) {
String sql = "insert into account(username,balance) value(?,?)";
Object[] obj = new Object[] {
account.getUsername(),
account.getBalance()
};
int num = this.jdbcTemplate.update(sql, obj);
return num;
}}
(4)在applicationContext.xml中,定義一個id為accountDao的Bean,該Bean用于將jadcTemplate注入到accountDao實(shí)例中,代碼如下所示。
<!-- 將jdbcTemplate注入到accountDao實(shí)例中 -->
4.結(jié)論
本文對Spring框架中使用JDBC進(jìn)行數(shù)據(jù)操作的理論、方法和步驟進(jìn)行詳細(xì)說明。首先了解了Spring JDBC中的核心類以及如何在Spring中配置JDBC,然后通過案例講解了Spring JDBC核心類JdbcTemplate中常用方法的使用,通過本文的學(xué)習(xí),讀者能夠?qū)W會使用Spring框架進(jìn)行數(shù)據(jù)庫開發(fā),并能深切地體會到Spring框架進(jìn)行數(shù)據(jù)庫編程的強(qiáng)大。
參考文獻(xiàn):
[1]沃爾斯. Spring實(shí)戰(zhàn) [M]. 人民郵電出版社,2016.
[2]卡內(nèi)爾. Spring開發(fā)三劍客[M],人民郵電出版社, 2020.
[3] 陳恒等. Spring Boot從入門到實(shí)戰(zhàn)[M]. 清華大學(xué)出版社出版社,2020.