A.2 springboot data jpa

springboot data jpa

1. 介紹

1.1 什么是jpa适室?

jpa是java persistence API。是java持久層的標(biāo)準(zhǔn)举瑰,起源于EJB3.0捣辆。描述的是領(lǐng)域模型和關(guān)系表的映射,并持久化到數(shù)據(jù)庫中此迅。實現(xiàn)該標(biāo)準(zhǔn)的廠商有:

  • hibernate
  • openjpa

1.2 什么是spring data jpa汽畴?

spring致力于減少數(shù)據(jù)訪問層(DAO)的開發(fā)工作量,對標(biāo)準(zhǔn)jpa的包裝耸序。開發(fā)者只需要生成持久層接口即可忍些。開發(fā)者不需要關(guān)注:

  • EntityManager如何創(chuàng)建
  • 基本的增刪改查方法不用編寫
  • 事物如何提交

1.3 本文的重點

本文主要講解如何在 springboot 中使用 spring data jpa,使用hibernate作為jpa的實現(xiàn)坎怪,使用mysql作為數(shù)據(jù)庫罢坝。

2. 修改工程

依據(jù)第一章節(jié)的樣例工程,進(jìn)行更改搅窿。

2.1 修改POM

在pom中增加jpa相關(guān)的maven依賴

<!-- jpa的pom插件 (包括了spring-jpa嘁酿、hibernate疾棵、spring jdbc)-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!-- DB -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

2.2 修改application.properties

主要是增加數(shù)據(jù)源和JPA相關(guān)的配置,具體內(nèi)容如下:

#數(shù)據(jù)源配置
spring.datasource.url=jdbc:mysql://localhost:3306/spring-boot-demo?characterEncoding=utf-8&autoReconnect=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=5
spring.datasource.max-idle=3
spring.datasource.test-on-borrow=true
spring.datasource.test-while-idle=true
spring.datasource.validation-query=SELECT 1;
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

#jpa屬性配置
spring.jpa.database = MYSQL
spring.jpa.show-sql = true
spring.jpa.hibernate.ddlAuto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
#hibernate實體類掃描包路徑
entitymanager.packagesToScan=pers.mateng

3. 業(yè)務(wù)編碼

3.1 創(chuàng)建領(lǐng)域模型

package pers.mateng.demo.springboot.domain;

@Entity
@Table(name="TB_USER")
public class User {
    
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="U_ID")
    private Long id;
    
    @Column(name="U_NAME", nullable = false, length=32, unique=true)
    private String name;
    
    @Column(name="U_AGE", length=4)
    private Integer age;

    get/set……
    
}

3.2 創(chuàng)建DAO

package pers.mateng.demo.springboot.dao;

import org.springframework.data.jpa.repository.JpaRepository;

import pers.mateng.springdemo.domain.User;

/**
 * 用戶管理增刪改查的dao
 * @author mateng
 *
 */
public interface UserDao extends JpaRepository<User, Long> {
    

}

3.3 創(chuàng)建controller

package pers.mateng.demo.springboot.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import pers.mateng.demo.springboot.dao.UserDao;
import pers.mateng.demo.springboot.domain.User;

/**
 * 用戶管理的controller
 * @author mateng
 */
@RestController
public class UserController {
    
    @Autowired
    private UserDao userDao;
    
    @RequestMapping(method=RequestMethod.GET)
    public List<User> findAll() {
        return userDao.findAll();
    }
    
    @RequestMapping(method=RequestMethod.POST)
    public User add(@ModelAttribute User user) {
        return userDao.save(user);
    }
    
    @RequestMapping(path="/{id}", method=RequestMethod.GET)
    public User findById(@PathVariable Long id) {
        return userDao.findOne(id);
    }
}

4. 驗證

使用eclipse的run as重新啟動Application的main函數(shù)

使用如下命令測試增加痹仙、查詢接口。注意:下面連接中的ip地址(當(dāng)前開發(fā)機(jī)器的ip地址)

1殉了、增加:

curl -X POST --header 'Content-Type: application/x-www-form-urlencoded' -d "name=zhansan&age=30" 'http://192.168.50.7:8888/user'

2开仰、查詢:

查詢?nèi)?/p>

curl -X GET 'http://192.168.50.7:8888/user'

根據(jù)id查詢

curl -X GET 'http://192.168.50.7:8888/user/1'

5. 源碼

springboot-demo-2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市薪铜,隨后出現(xiàn)的幾起案子众弓,更是在濱河造成了極大的恐慌,老刑警劉巖隔箍,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谓娃,死亡現(xiàn)場離奇詭異,居然都是意外死亡蜒滩,警方通過查閱死者的電腦和手機(jī)滨达,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俯艰,“玉大人捡遍,你說我怎么就攤上這事≈裎眨” “怎么了画株?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長啦辐。 經(jīng)常有香客問我谓传,道長,這世上最難降的妖魔是什么芹关? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任续挟,我火速辦了婚禮,結(jié)果婚禮上充边,老公的妹妹穿的比我還像新娘庸推。我一直安慰自己,他們只是感情好浇冰,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布贬媒。 她就那樣靜靜地躺著,像睡著了一般肘习。 火紅的嫁衣襯著肌膚如雪际乘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天漂佩,我揣著相機(jī)與錄音脖含,去河邊找鬼罪塔。 笑死,一個胖子當(dāng)著我的面吹牛养葵,可吹牛的內(nèi)容都是我干的征堪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼关拒,長吁一口氣:“原來是場噩夢啊……” “哼佃蚜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起着绊,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谐算,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后归露,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洲脂,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年剧包,在試婚紗的時候發(fā)現(xiàn)自己被綠了恐锦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡玄捕,死狀恐怖踩蔚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情枚粘,我是刑警寧澤馅闽,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站馍迄,受9級特大地震影響福也,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜攀圈,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一暴凑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赘来,春花似錦现喳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幌缝,卻和暖如春灸促,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工浴栽, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留荒叼,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓典鸡,卻偏偏與公主長得像被廓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子萝玷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348