SpringBoot JPA

定義

JPA是Java Persistence API的簡稱更振,中文名Java持久層API,是JDK 5.0注解或XML描述對象-關(guān)系表的映射關(guān)系斯嚎,并將運(yùn)行期的實(shí)體對象持久化到數(shù)據(jù)庫中利虫。

JPA的總體思想和現(xiàn)有Hibernate、TopLink堡僻、JDO等ORM框架大體一致糠惫。總的來說钉疫,JPA包括以下3方面的技術(shù):

1.ORM映射元數(shù)據(jù)

JPA支持XML和JDK注解兩種元數(shù)據(jù)的形式硼讽,元數(shù)據(jù)描述對象和表之間的映射關(guān)系,框架據(jù)此將實(shí)體對象持久化到數(shù)據(jù)庫表中陌选;

2.API

用來操作實(shí)體對象理郑,執(zhí)行CRUD操作蹄溉,框架在后臺替代我們完成所有的事情咨油,開發(fā)者從繁瑣的JDBC和SQL代碼中解脫出來。

3.查詢語言

這是持久化操作中很重要的一個方面柒爵,通過面向?qū)ο蠖敲嫦驍?shù)據(jù)庫的查詢語言查詢數(shù)據(jù)役电,避免程序的SQL語句緊密耦合。

Spring-data-JPA的MAVEN

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

數(shù)據(jù)庫和JPA配置

SpringBoot默認(rèn)是使用tomcat的數(shù)據(jù)源
intellij有自動提示棉胀,spring.datasource.tomcat開頭的配置)
application.properties:

###數(shù)據(jù)庫配置信息
############################
##基礎(chǔ)信息
spring.datasource.url=jdbc:mysql://localhost:3306/db_jianshu?      useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##連接池中最大的活躍連接數(shù)
spring.datasource.tomcat.max-active=20  
##連接池中最大法瑟、最小的空閑連接數(shù)
 spring.datasoure.max-idle=8
spring.datasoure.min-idle=8
##初始化連接數(shù)
spring.datasoure.initial=10
###Spring Data JPA配置信息
############################
spring.jpa.database=mysql
# 顯示SQL語句
spring.jpa.show-sql=true
##指定DDL mode (none, validate, update, create, create-drop)
spring.jpa.properties.hibernate.hbm2ddl.auto=update
##頁面屬性配置
spring.thymeleaf.cache=false

Entity配置

這里使用了Lombok簡化代碼加入了@Data注解

@Entity
@Data
@Builder
public class SysUser {
    @Id
    @GeneratedValue
    private Integer userId;
    @Column(nullable = false)
    private String email;
    @Column(nullable = false)
    private String password;
    private String nickname;
    private String avatar;
    private String description;
    private Integer wordsCount;
    private Integer likeCount;
}

強(qiáng)大的Spring JpaRepository

SpringBoot創(chuàng)建DAO層很多種方法其中japrepository是最強(qiáng)大的而且最有特色的一種,我們可以針對不同的實(shí)體創(chuàng)建repository接口唁奢。Spring會根據(jù)方法名稱的規(guī)則進(jìn)行自動生成實(shí)現(xiàn)霎挟。在SpringBoot中默認(rèn)已經(jīng)提供了非常多的常規(guī)CRUD操作的repository。

package org.springframework.data.jpa.repository;

import java.util.List;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();

    List<T> findAll(Sort var1);

    List<T> findAllById(Iterable<ID> var1);

    <S extends T> List<S> saveAll(Iterable<S> var1);

    void flush();

    <S extends T> S saveAndFlush(S var1);

    void deleteInBatch(Iterable<T> var1);

    void deleteAllInBatch();

    T getOne(ID var1);

    <S extends T> List<S> findAll(Example<S> var1);

    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}

使用

package com.soft1611.jianshu.dao;

import com.soft1611.jianshu.entity.SysUser;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

public interface UserRepositry extends JpaRepository<User, Integer> {
    /**
     * 根據(jù)郵箱查找用戶
     * @param email
     * @return
     */
    User findUserByEmail(String email);

     * 查詢用戶名稱包含username字符串的用戶對象
     * @param username
     * @return
     */

    List<User> findByUsernameContaining(String username);

    /**
     * 獲得單個用戶對象麻掸,根據(jù)username和pwd的字段匹配
     * @param username
     *@param pwd
     * @return
     */
   
    User getByUsernameIsAndUserpwdIs(String username,String pwd);
    /**
     * 精確匹配username的用戶對象
     * @param username
     * @return
     */

    User getByUsernameIs(String username)

}

Spring提供了非常大的自由度給開發(fā)者酥夭,我們可以在接口方法中通過定義@Query annotation自定義接口方法的JPQL語句。

public interface UserRepositry extends JpaRepository<User, Integer> {

    /**
     * 根據(jù)熱度降序排列
     * JPQL語句
     * @return
     */
    @Query("FROM SysUser  u ORDER BY u.likeCount DESC ")
    List<SysUser> findHotUsers();
}
public interface WeiboRepository extends JpaRepository<Weibo,Long>,JpaSpecificationExecutor<Weibo> {

    @Query("select w from Weibo w where w.user.username = :username")
    List<Weibo> searchUserWeibo(@Param("username") String username);

    @Query("select w from Weibo w where w.user.username = :username")
    List<Weibo> searchUserWeibo(@Param("username") String username, Sort sort);

    @Modifying
    @Transactional(readOnly = false)
    @Query("update Weibo w set w.weiboText = :text where w.user = :user")
    int setUserWeiboContent(@Param("text")String weiboText,@Param("user")User user);

}
/**
 *事務(wù)注解
 */
@Transactional(readOnly = false)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脊奋,一起剝皮案震驚了整個濱河市熬北,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诚隙,老刑警劉巖讶隐,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異久又,居然都是意外死亡巫延,警方通過查閱死者的電腦和手機(jī)效五,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炉峰,“玉大人火俄,你說我怎么就攤上這事〗补冢” “怎么了瓜客?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長竿开。 經(jīng)常有香客問我谱仪,道長,這世上最難降的妖魔是什么否彩? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任疯攒,我火速辦了婚禮,結(jié)果婚禮上列荔,老公的妹妹穿的比我還像新娘敬尺。我一直安慰自己,他們只是感情好贴浙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布砂吞。 她就那樣靜靜地躺著,像睡著了一般崎溃。 火紅的嫁衣襯著肌膚如雪蜻直。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天袁串,我揣著相機(jī)與錄音概而,去河邊找鬼。 笑死囱修,一個胖子當(dāng)著我的面吹牛赎瑰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播破镰,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼餐曼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了啤咽?” 一聲冷哼從身側(cè)響起晋辆,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宇整,沒想到半個月后瓶佳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳞青,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年霸饲,在試婚紗的時候發(fā)現(xiàn)自己被綠了为朋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡厚脉,死狀恐怖习寸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情傻工,我是刑警寧澤霞溪,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站中捆,受9級特大地震影響鸯匹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜泄伪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一殴蓬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蟋滴,春花似錦染厅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至球散,卻和暖如春尿赚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蕉堰。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悲龟,地道東北人屋讶。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像须教,于是被迫代替她去往敵國和親皿渗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

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

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,811評論 6 342
  • JPA全程:Java Persistence API.JPA通過JDK5.0注解或XML描述對象-關(guān)系表的映射關(guān)...
    AiPuff閱讀 639評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理轻腺,服務(wù)發(fā)現(xiàn)乐疆,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • SpringBoot JPA 一 JPA是什么 JPA(Java Persistence API)是Sun官方提...
    cctN閱讀 410評論 0 0
  • 畫丁老頭贬养,以前孩子們經(jīng)常湊在一起挤土,玩兒畫丁老頭兒。 作業(yè)本背面误算,地上仰美,墻上常常會看到這個圖案迷殿。[呲牙] 幾個小伙伴...
    劉現(xiàn)輝民俗畫閱讀 878評論 1 3