javascript
SpringData核心数据访问接口--CrudRepository示例
1.Spring Data JPA可以極大地簡化JPA的寫法,在幾乎不用寫接口實現的情況下完成對數據的訪問和操作。
2.Spring Data通過提供Repository接口來約定數據訪問的統一標準。
3.Repository接口下包含一些常用的子接口:
???CrudRepository、PagingAndSortingRepository、JpaRepository
4.在進行spring boot 項目的開發中,開發者只需要定義自己項目的數據訪問接口,然后實現Spring Data提供的這些接口,就可以實現對數據的CRUD操作。
?
CrudRepository提供了最基本的對實體類的增刪改查操作
新建新的Maven項目,命名SpringBoot_crudrepositorytest,按照Maven項目的規范,在src/main下新建一個名為resource的文件夾
①修改pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
? <modelVersion>4.0.0</modelVersion>
? <groupId>com.ysh</groupId>
? <artifactId>crudrepositorytest</artifactId>
? <version>0.0.1-SNAPSHOT</version>
? <packaging>jar</packaging>
? <name>crudrepositorytest</name>
? <url>http://maven.apache.org</url>
? <!--??
??spring-boot-starter-parent是Spring Boot的核心啟動器,
??包含了自動配置、日志和YAML等大量默認的配置,大大簡化了我們的開發。
??引入之后相關的starter引入就不需要添加version配置,
???? spring boot會自動選擇最合適的版本進行添加。
? -->
? <parent>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-parent</artifactId>
??<version>2.0.0.RELEASE</version>
??<relativePath/>
?</parent>
?
?? <properties>
??<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
??<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
??<java.version>1.8</java.version>
?</properties>
? <dependencies>
?
? ?<!-- 添加spring-boot-starter-web模塊依賴 -->
? ?<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-web</artifactId>
?</dependency>
?
? ?<!-- 添加spring-boot-starter-thymeleaf模塊依賴 -->
? ?<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-thymeleaf</artifactId>
?</dependency>
?
?<!-- 添加MySQL依賴 -->
??? <dependency>
??<groupId>mysql</groupId>
??<artifactId>mysql-connector-java</artifactId>
?</dependency>
???????
???????? <!-- 添加Spring Data JPA依賴 -->
???? <dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-data-jpa</artifactId>
?</dependency>
??
?
??? <dependency>
????? <groupId>junit</groupId>
????? <artifactId>junit</artifactId>
????? <scope>test</scope>
??? </dependency>
? </dependencies>
</project>
②配置基本屬性
在src/main/resource下新建一個全局配置文件,命名為application.properties,在該配置文件中配置數據源和JPA相關的屬性
########################################################
###
########################################################
spring.datasource.url=jdbc:mysql://localhost:3306/springdatajpa
spring.datasource.username=root
spring.datasource.password=
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
spring.jpa.database=MySQL
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
?
附:
#數據庫地址,其中springdatajpa是數據庫名稱
spring.datasource.url=jdbc:mysql://localhost:3306/springdatajpa
#數據庫用戶名
spring.datasource.username=root
#數據庫密碼,要改成自己的密碼
spring.datasource.password=yourpassword
#數據庫驅動,固定格式
spring.datasource.driverClassName=com.mysql.jdbc.Driver
#指定連接池中最大的活躍連接數
spring.datasource.max-active=20
#指定連接池最大的空閑連接
spring.datasource.max-idle=8
#指定必須保持連接的最小值
spring.datasource.min-idle=8
spring.datasource.initial-size=10
########################################################
### JPA持久化配置
########################################################
# 指定數據庫類型
spring.jpa.database=MySQL
# 指定是否需要在日志中顯示sql語句
spring.jpa.show-sql=true
# 指定自動創建|更新|驗證數據庫表結構等配置
# 表示如果數據庫中存在持久化類對應的表就不創建,不存在就創建對應的表
spring.jpa.hibernate.ddl-auto=update
# 指定命名策略
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
#指定數據庫方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
③創建持久化類
在com.ysh下新建4個包,bean(放置持久化類)、controller(控制器)、repository(定義數據訪問接口的類)、service(業務邏輯處理類)
在bean下創建持久化類User.java
packagecom.ysh.crudrepositorytest.bean;
importjava.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
importjavax.persistence.Table;
@Entity
// 用于標記持久化類,Spring Boot項目加載后會自動根據持久化類建表
@Table(name="tb_user")
public class User implementsSerializable{
?private static final long serialVersionUID =1L;
?/**
? * 使用@Id指定主鍵. 使用代碼@GeneratedValue(strategy=GenerationType.AUTO)
? * 指定主鍵的生成策略,mysql默認的是自增長。
? *
? */
?@Id
?@GeneratedValue(strategy = GenerationType.IDENTITY)
?private int id;//主鍵.
?private String username;// 姓名username
?private StringloginName;
?private char sex;//性別
?private int age; //年齡
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getUsername() {
??return username;
?}
?public void setUsername(String username) {
??this.username = username;
?}
?public String getLoginName() {
??return loginName;
?}
?public void setLoginName(String loginName) {
??this.loginName = loginName;
?}
?public char getSex() {
??return sex;
?}
?public void setSex(char sex) {
??this.sex = sex;
?}
?public int getAge() {
??return age;
?}
?public void setAge(int age) {
??this.age = age;
?}
}
④定義數據訪問層接口
在com.ysh.crudrepository.repository包下新建一個接口,命名為UserRepository,讓該接口繼承CrudRepository接口,以持久化對象User作為CrudRepository的第一個參數,表示當前操作的持久化對象類型,Integer作為CrudRepository的第二個參數,用于指定ID類型
packagecom.ysh.crudrepositorytest.repository;
importorg.springframework.data.repository.CrudRepository;
importcom.ysh.crudrepositorytest.bean.User;
public interface UserRepository extends CrudRepository<User,Integer>{
}
⑤定義業務層類
UserService.java
packagecom.ysh.crudrepositorytest.service;
importjava.util.Optional;
import javax.annotation.Resource;
importjavax.transaction.Transactional;
importorg.springframework.stereotype.Service;
import com.ysh.crudrepositorytest.bean.User;
importcom.ysh.crudrepositorytest.repository.UserRepository;
@Service
public class UserService{
?// 注入UserRepository
?@Resource
?private UserRepositoryuserRepository;
?/**
? * save,update ,delete 方法需要綁定事務. 使用@Transactional進行事務的綁定.
? *
? * 保存對象
? * @param User
? * @return 包含自動生成的id的User對象???????
? */
?@Transactional
?public User save(User User) {
??return userRepository.save(User);
?}
?/**
? * 根據id刪除對象
? *
? * @param id
? */
?@Transactional
?public void delete(int id) {
??userRepository.deleteById(id);
??
?}
?/**
? * 查詢所有數據
? *
? * @return 返回所有User對象
? */
?public Iterable<User> getAll() {
??return userRepository.findAll();
?}
?
?/**
? * 根據id查詢數據
? *
? * @return? 返回id對應的User對象
? */
?public User getById(Integer id) {
??// 根據id查詢出對應的持久化對象
??Optional<User> op = userRepository.findById(id);
?? return op.get();
?}
?/**
? * 修改用戶對象數據,持久化對象修改會自動更新到數據庫
? *
? * @param user
? */
?@Transactional
?public void update(User user) {
??// 直接調用持久化對象的set方法修改對象的數據
??user.setUsername("張三");
??user.setLoginName("zhangsan");
?}
}
在業務層需要注入數據訪問對象,使用@Resources注解將UserRepository接口對應的實現類注入進來的。
只要數據訪問層接口實現了CrudRepository,SpringBoot項目會自動掃描該類并為該類創建實習類對象。
⑥定義控制器類
UserController.java:
packagecom.ysh.crudrepositorytest.controller;
importjavax.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RestController;
import com.ysh.crudrepositorytest.bean.User;
importcom.ysh.crudrepositorytest.service.UserService;
@RestController
@RequestMapping("/user")
public class UserController {
?
?// 注入UserService
?@Resource
?private UserServiceuserService;
?@RequestMapping("/save")
?public String save() {
??User user = new User();
??user.setLoginName("badao");
??user.setUsername("霸道");
??user.setSex('男');
??user.setAge(3);
??user = userService.save(user);
??System.out.println("保存數據成功,返回的結果:" + user);
??return "保存數據成功!";
?}
?@RequestMapping("/update")
?public String update() {
??// 修改的對象必須是持久化對象,所以先從數據庫查詢出id為1的對象進行修改
??User user = userService.getById(1);
??userService.update(user);
??return "修改數據成功!";
?}
?@RequestMapping("/delete")
?public String delete() {
??userService.delete(1);
??return "刪除數據成功!";
?}
?@RequestMapping("/getAll")
?public Iterable<User> getAll() {
??return userService.getAll();
?}
}
⑦測試應用
打開Mysql服務,啟動Mysql數據庫,新建數據庫springdatajpa:
在crudrepository包下新建App.java啟動類
packagecom.ysh.crudrepositorytest;
import org.springframework.boot.SpringApplication;
importorg.springframework.boot.autoconfigure.SpringBootApplication;
/**
?* @SpringBootApplication指定這是一個 spring boot的應用程序.
?*/
@SpringBootApplication
public class App
{
??? public static void main( String[] args )
??? {
??? ?// SpringApplication 用于從main方法啟動Spring應用的類。
??????? SpringApplication.run(App.class, args);
??? }
}
運行項目
JPA會在數據庫中自動創建持久化類對應的tb_user表,按照JPA規范,實體類User的屬性loginName映射到數據庫的時候,自動生成的數據庫列名為login_name
在瀏覽器中輸入:http://localhost:8080/user/save
查看數據庫中的表,刷新一下
測試修改,在瀏覽器中輸入:http://localhost:8080/user/update
查看修改后的數據庫
測試查詢所有用戶數據,在瀏覽器中輸入:http://localhost:8080/user/getAll
請求會提交到UserController類的getAll方法進行處理,如果該方法執行查詢所有用戶成功,即可返回查詢到的所有用戶信息的JSON格式的字符串
測試刪除:http://localhost:8080/user/delete
?
?
附:項目目錄結構
示例代碼下載:
https://download.csdn.net/download/badao_liumang_qizhi/10548351
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的SpringData核心数据访问接口--CrudRepository示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hexo + github 搭建个人博客
- 下一篇: SpringBoot项目启动时:Fail