springboot~JPA把(ba)ORM統一(yi)起來
JPA介紹
JPA(Java Persistence API)是Sun官方提出的Java持久化規范。它為Java開發人員提供了一種對象/關聯映射工具來管理Java應用中的關系數據。他的出現主要是為了簡化現有的持久化開發工作和整合ORM技術,結束現在Hibernate,TopLink,JDO等ORM框架各自為營的局面。值得注意的是,JPA是在充分吸收了現有Hibernate,TopLink,JDO等ORM框架的基礎上發展而來的,具有易于使用,伸縮性強等優點。從目前的開發社區的反應上看,JPA受到了極大的支持和贊揚,其中就包括了Spring與EJB3.0的開發團隊。JPA是(shi)一套(tao)(tao)規范,不是(shi)一套(tao)(tao)產(chan)品,那么像Hibernate,TopLink,JDO他(ta)們是(shi)一套(tao)(tao)產(chan)品,如果說這(zhe)些產(chan)品(pin)(pin)實(shi)現了這(zhe)個JPA規范(fan),那么(me)我們(men)就可以叫他們(men)為(wei)JPA的實(shi)現產(chan)品(pin)(pin)。
Spring Data JPA
Spring Data JPA 是 Spring 基(ji)于 ORM 框架、JPA 規范的(de)基(ji)礎上封裝的(de)一套JPA應(ying)用框架,可(ke)使開發者用極簡的(de)代碼即可(ke)實(shi)(shi)現(xian)對數據的(de)訪問和操作。它提(ti)供了包括增刪改查等在(zai)內的(de)常用功能,且(qie)易于擴展!學習并(bing)使用 Spring Data JPA 可(ke)以極大(da)提(ti)高開發效率!spring data jpa讓我(wo)們解(jie)脫了DAO層的(de)操作,基(ji)本(ben)上所有CRUD都可(ke)以依賴于它來(lai)實(shi)(shi)現(xian),自己寫(xie)個倉儲接口后繼(ji)承JpaRepository即可(ke)實(shi)(shi)現(xian)最(zui)基(ji)本(ben)的(de)增刪改查功能!
在項目中引用Spring JPA
1 在build.gradle文件(jian)中添(tian)加包引用(yong)
compile('org.springframework.boot:spring-boot-starter-data-jpa') runtime('mysql:mysql-connector-java')
2 在source的(de)配(pei)置文件中(zhong)添加mysql和(he)jpa的(de)相關設置
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&createDatabaseIfNotExist=true username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver jpa: database: MYSQL show-sql: true #顯示后臺(tai)處(chu)理(li)的SQL語句(ju) hibernate: ddl-auto: update #自動檢查實體和數據庫表是否一致,如果不一致則會進行更新數據庫表
上面代碼中我們(men)開啟了數據庫SQL代碼的(de)顯示功能,我們(men)在控制(zhi)臺上可以看到對應的(de)SQL語句。
Hibernate: select next_val as id_val from hibernate_sequence for update Hibernate: update hibernate_sequence set next_val= ? where next_val=? Hibernate: insert into t_userinfo (password, user_name, id) values (?, ?, ?) Hibernate: select next_val as id_val from hibernate_sequence for update Hibernate: update hibernate_sequence set next_val= ? where next_val=? Hibernate: insert into t_accountinfo (balance, user_info, account_id) values (?, ?, ?)
3 添加數據庫表實體,注意一些注解,@Entity表示數據表實體,@Table可以指定數據表名稱,@Id表示是主鍵,@GeneratedValue主鍵升成規(gui)則,@Column表示數據列名稱等等。
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import lombok.Data; @Data @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "Id") private int id; @Column(name = "Name") private String name; }
4 為數據(ju)表實體(ti)添加(jia)倉(cang)儲接口,因為JPA已經有(you)了(le)自己的(de)標準實例,所以簡單的(de)CURD實例我們不需要(yao)寫(xie)了(le),如果(guo)有(you)個性化的(de)操作,再去定(ding)義接口和實現(xian)。
import com.example.springdemo.model.User; import org.springframework.data.jpa.repository.JpaRepository; public interface SqlUserRepository extends JpaRepository<User, Integer> { }
5 最后(hou)在controller中添加(jia)依賴注入(ru)的(de)字段,一般使用@Autowired即可(ke)
@RestController @RequestMapping("/mysql") public class MysqlController { @Autowired private SqlUserRepository repository; /** * return list. * * @return */ @RequestMapping("/list") public List<User> dataList() { return repository.findAll(); } }
有時間,再(zai)和大家聊(liao)(liao)聊(liao)(liao)個(ge)性化接口和實現(xian)的設計!
感謝閱讀!