Spring Boot中使用JdbcTemplate訪問數(shù)據(jù)庫

Spring

之前介紹了很多Web層的例子届腐,包括構(gòu)建RESTful API使用Thymeleaf模板引擎渲染W(wǎng)eb視圖碳抄,但是這些內(nèi)容還不足以構(gòu)建一個動態(tài)的應(yīng)用。通常我們做App也好场绿,做Web應(yīng)用也好剖效,都需要內(nèi)容,而內(nèi)容通常存儲于各種類型的數(shù)據(jù)庫焰盗,服務(wù)端在接收到訪問請求之后需要訪問數(shù)據(jù)庫獲取并處理成展現(xiàn)給用戶使用的數(shù)據(jù)形式璧尸。

本文介紹在Spring Boot基礎(chǔ)下配置數(shù)據(jù)源和通過JdbcTemplate編寫數(shù)據(jù)訪問的示例。

數(shù)據(jù)源配置

在我們訪問數(shù)據(jù)庫的時候熬拒,需要先配置一個數(shù)據(jù)源爷光,下面分別介紹一下幾種不同的數(shù)據(jù)庫配置方式。

首先澎粟,為了連接數(shù)據(jù)庫需要引入jdbc支持蛀序,在pom.xml中引入如下配置:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

嵌入式數(shù)據(jù)庫支持

嵌入式數(shù)據(jù)庫通常用于開發(fā)和測試環(huán)境,不推薦用于生產(chǎn)環(huán)境活烙。Spring Boot提供自動配置的嵌入式數(shù)據(jù)庫有H2徐裸、HSQL、Derby啸盏,你不需要提供任何連接配置就能使用重贺。

比如,我們可以在pom.xml中引入如下配置使用HSQL

<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <scope>runtime</scope>
</dependency>

連接生產(chǎn)數(shù)據(jù)源

以MySQL數(shù)據(jù)庫為例回懦,先引入MySQL連接的依賴包气笙,在pom.xml中加入:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.21</version>
</dependency>

src/main/resources/application.properties中配置數(shù)據(jù)源信息

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

連接JNDI數(shù)據(jù)源

當你將應(yīng)用部署于應(yīng)用服務(wù)器上的時候想讓數(shù)據(jù)源由應(yīng)用服務(wù)器管理,那么可以使用如下配置方式引入JNDI數(shù)據(jù)源粉怕。

spring.datasource.jndi-name=java:jboss/datasources/customers

使用JdbcTemplate操作數(shù)據(jù)庫

Spring的JdbcTemplate是自動配置的健民,你可以直接使用@Autowired來注入到你自己的bean中來使用。

舉例:我們在創(chuàng)建User表贫贝,包含屬性name秉犹、age蛉谜,下面來編寫數(shù)據(jù)訪問對象和單元測試用例。

  • 定義包含有插入崇堵、刪除型诚、查詢的抽象接口UserService
public interface UserService {

    /**
     * 新增一個用戶
     * @param name
     * @param age
     */
    void create(String name, Integer age);

    /**
     * 根據(jù)name刪除一個用戶高
     * @param name
     */
    void deleteByName(String name);

    /**
     * 獲取用戶總量
     */
    Integer getAllUsers();

    /**
     * 刪除所有用戶
     */
    void deleteAllUsers();

}
  • 通過JdbcTemplate實現(xiàn)UserService中定義的數(shù)據(jù)訪問操作
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void create(String name, Integer age) {
        jdbcTemplate.update("insert into USER(NAME, AGE) values(?, ?)", name, age);
    }

    @Override
    public void deleteByName(String name) {
        jdbcTemplate.update("delete from USER where NAME = ?", name);
    }

    @Override
    public Integer getAllUsers() {
        return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class);
    }

    @Override
    public void deleteAllUsers() {
        jdbcTemplate.update("delete from USER");
    }
}
  • 創(chuàng)建對UserService的單元測試用例,通過創(chuàng)建鸳劳、刪除和查詢來驗證數(shù)據(jù)庫操作的正確性狰贯。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class ApplicationTests {

    @Autowired
    private UserService userSerivce;

    @Before
    public void setUp() {
        // 準備,清空user表
        userSerivce.deleteAllUsers();
    }

    @Test
    public void test() throws Exception {
        // 插入5個用戶
        userSerivce.create("a", 1);
        userSerivce.create("b", 2);
        userSerivce.create("c", 3);
        userSerivce.create("d", 4);
        userSerivce.create("e", 5);

        // 查數(shù)據(jù)庫赏廓,應(yīng)該有5個用戶
        Assert.assertEquals(5, userSerivce.getAllUsers().intValue());

        // 刪除兩個用戶
        userSerivce.deleteByName("a");
        userSerivce.deleteByName("e");

        // 查數(shù)據(jù)庫涵紊,應(yīng)該有5個用戶
        Assert.assertEquals(3, userSerivce.getAllUsers().intValue());

    }

}

上面介紹的JdbcTemplate只是最基本的幾個操作,更多其他數(shù)據(jù)訪問操作的使用請參考:JdbcTemplate API

通過上面這個簡單的例子幔摸,我們可以看到在Spring Boot下訪問數(shù)據(jù)庫的配置依然秉承了框架的初衷:簡單摸柄。我們只需要在pom.xml中加入數(shù)據(jù)庫依賴,再到application.properties中配置連接信息既忆,不需要像Spring應(yīng)用中創(chuàng)建JdbcTemplate的Bean驱负,就可以直接在自己的對象中注入使用。

本文完整示例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末患雇,一起剝皮案震驚了整個濱河市跃脊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苛吱,老刑警劉巖酪术,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異又谋,居然都是意外死亡拼缝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門彰亥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衰齐,你說我怎么就攤上這事任斋。” “怎么了耻涛?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵废酷,是天一觀的道長。 經(jīng)常有香客問我抹缕,道長澈蟆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任卓研,我火速辦了婚禮趴俘,結(jié)果婚禮上睹簇,老公的妹妹穿的比我還像新娘。我一直安慰自己寥闪,他們只是感情好太惠,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疲憋,像睡著了一般凿渊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缚柳,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天埃脏,我揣著相機與錄音,去河邊找鬼秋忙。 笑死彩掐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的翰绊。 我是一名探鬼主播佩谷,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼监嗜!你這毒婦竟也來了谐檀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤裁奇,失蹤者是張志新(化名)和其女友劉穎桐猬,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刽肠,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡溃肪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了音五。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惫撰。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖躺涝,靈堂內(nèi)的尸體忽然破棺而出厨钻,到底是詐尸還是另有隱情,我是刑警寧澤坚嗜,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布夯膀,位于F島的核電站,受9級特大地震影響苍蔬,放射性物質(zhì)發(fā)生泄漏诱建。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一碟绑、第九天 我趴在偏房一處隱蔽的房頂上張望俺猿。 院中可真熱鬧茎匠,春花似錦、人聲如沸辜荠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伯病。三九已至造烁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間午笛,已是汗流浹背惭蟋。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留药磺,地道東北人告组。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像癌佩,于是被迫代替她去往敵國和親木缝。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容