国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Data JPA例子代碼[基于Spring Boot、Mysql]

Spring Data JPA例子代碼[基于Spring Boot、Mysql]

2021-04-19 14:05風一樣的碼農 Java教程

這篇文章主要介紹了Spring Data JPA例子代碼[基于Spring Boot、Mysql],小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

關于Spring Data

Spring社區的一個頂級工程,主要用于簡化數據(關系型&非關系型)訪問,如果我們使用Spring Data來開發程序的話,那么可以省去很多低級別的數據訪問操作,如編寫數據查詢語句、DAO類等,我們僅需要編寫一些抽象接口并定義相關操作即可,Spring會在運行期間的時候創建代理實例來實現我們接口中定義的操作。

關于Spring Data子項目

Spring Data擁有很多子項目,除了Spring Data Jpa外,還有如下子項目。

Spring Data Commons

Spring Data MongoDB

Spring Data Redis

Spring Data Solr

Spring Data Gemfire

Spring Data REST

Spring Data Neo4j

關于Spring Data Jpa

Spring Data Jpa是Spring Data的一個子項目,主要用于簡化數據訪問層的實現,使用Spring Data Jpa可以輕松實現增刪改查、分頁、排序等。

例子,Spring Boot + Spring Data Jpa

1、添加POM.XML文件

如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?xml version="1.0" encoding="UTF-8"?>
<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.example</groupId>
  <artifactId>demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>spring-data-jpa-example</name>
  <description>Demo project for Spring Boot</description>
 
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.4.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
  </parent>
 
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.7</java.version>
  </properties>
 
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
 
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
 
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>
 
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-cache</artifactId>
    </dependency>
  </dependencies>
 
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

其中,spring-boot-starter-parent會加載Spring Boot應用所需的所有默認配置;

spring-boot-starter-data-jpa會下載所有Spring Data Jpa所需的依賴;

添加spring-boot-starter-web是因為我們的工程是一個Web應用;

另外我們的數據庫是mysql,所以還需要mysql-connector-java依賴;

由于使用了緩存,所以再添加一個spring-boot-starter-cache依賴;

2、編寫實體類User

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package com.example.domain;
 
import java.io.Serializable;
 
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQuery;
 
@Entity
@NamedQuery(name = "User.findByName", query = "select name,address from User u where u.name=?1")
public class User implements Serializable
{
  private static final long serialVersionUID = 1L;
  @Id
  long id;
  @Column(name = "name")
  String name;
  @Column(name = "address")
  String address;
 
  public long getId()
  {
    return id;
  }
 
  public void setId(long id)
  {
    this.id = id;
  }
 
  public String getName()
  {
    return name;
  }
 
  public void setName(String name)
  {
    this.name = name;
  }
 
  public String getAddress()
  {
    return address;
  }
 
  public void setAddress(String address)
  {
    this.address = address;
  }
}

其它沒啥好說的,注意下這里的@NamedQuery注解,大致意思就是讓我們在Repository接口中定義的findByName方法不使用默認的查詢實現,取而代之的是使用這條自定義的查詢語句去查詢,如果這里沒有標注的話,會使用默認實現的。

3、編寫Repository接口

這里將編寫兩個Repository接口,僅僅用于示例,實際中可以合并成一個:

UserJpaRepository

?
1
2
3
4
5
6
7
8
9
10
package com.example.repository;
 
import org.springframework.data.jpa.repository.JpaRepository;
 
import com.example.domain.User;
 
 
public interface UserJpaRepository extends JpaRepository<User,Long> {
 
}

這里的UserJpaRepository接口實現了JpaRepository接口;

實際上JpaRepository實現了PagingAndSortingRepository接口,PagingAndSortingRepository接口實現了CrudRepository接口,CrudRepository接口實現了Repository接口;

簡單說明下:

Repository接口是一個標識接口,里面是空的;

CrudRepository接口定義了增刪改查方法;

PagingAndSortingRepository接口用于分頁和排序;

由于JpaRepository接口繼承了以上所有接口,所以擁有它們聲明的所有方法;

另外注意下,以findAll方法為例,JpaRepository接口返回的是List, PagingAndSortingRepository和CrudRepository返回的是迭代器;

UserRepository

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.example.repository;
 
import java.util.List;
 
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.query.Param;
 
import com.example.domain.User;
 
public interface UserRepository extends Repository<User, Long>
{
 
  List<User> findByNameAndAddress(String name, String address);
 
  @Query(value = "from User u where u.name=:name")
  List<User> findByName1(@Param("name") String name);
 
  @Query(value = "select * from #{#entityName} u where u.name=?1", nativeQuery = true)
  List<User> findByName2(String name);
 
  List<User> findByName(String name);
}

這里的UserRepository接口主要定義了一些查詢方法;

比如這里的findByNameAndAddress和findByName方法,我們是不需要額外定義其它查詢語句就可以直接執行的,Spring Data Jpa會根據實體類的屬性名字以及方法名自動實現該方法;PS:由于我們在實體類中聲明了@NamedQuery注解,實際上findByName方法會使用@NamedQuery注解標注的查詢語句去查詢;

另外這里的findByName1方法使用了HQL語句查詢;

findByName2方法使用了原始的sql語句查詢;

4、編寫Service

service接口:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.example.service;
 
import java.util.List;
 
import com.example.domain.User;
 
public interface IUserService
{
  public List<User> findAll();
 
  public void saveUser(User book);
  
  public User findOne(long id);
 
  public void delete(long id);
 
  public List<User> findByName(String name);
 
}

接口實現類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.example.service.impl;
 
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import com.example.domain.User;
import com.example.repository.UserRepository;
import com.example.repository.UserJpaRepository;
import com.example.service.IUserService;
 
@Service
@Transactional
public class UserServiceImpl implements IUserService
{
  @Autowired
  private UserJpaRepository userJpaRepository;
  @Autowired
  private UserRepository userRepository;
 
  public List<User> findAll()
  {
    return userJpaRepository.findAll();
  }
 
  public List<User> findByName(String name)
  {
    List<User> userList1 = userRepository.findByName1(name);
    List<User> userList2 = userRepository.findByName2(name);
    List<User> userList3 = userRepository.findByNameAndAddress(name, "3");
    System.out.println("userList1:" + userList1);
    System.out.println("userList2:" + userList2);
    System.out.println("userList3:" + userList3);
    return userRepository.findByName(name);
  }
 
  public void saveUser(User book)
  {
    userJpaRepository.save(book);
  }
 
  @Cacheable("users")
  public User findOne(long id)
  {
    System.out.println("Cached Pages");
    return userJpaRepository.findOne(id);
  }
 
  public void delete(long id)
  {
    userJpaRepository.delete(id);
  }
}

這個沒啥好說的,調用Repository接口接口的方法即可。

5、編寫Controller

Controller也沒啥好說的,調用Service即可,注意下這里的Controller使用@RestController注解來標注,另外URL路徑命名按照RESTful風格來命名;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package com.example.web;
 
import java.util.List;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import com.example.domain.User;
import com.example.service.IUserService;
 
@RestController
@RequestMapping(value = "/users")
public class UserController
{
  @Autowired
  private IUserService userService;
 
  @RequestMapping(value = "/add/{id}/{name}/{address}")
  public User addUser(@PathVariable int id, @PathVariable String name,
    @PathVariable String address)
  {
    User user = new User();
    user.setId(id);
    user.setName(name);
    user.setAddress(address);
    userService.saveUser(user);
    return user;
  }
 
  @RequestMapping(value = "/delete/{id}")
  public void deleteBook(@PathVariable int id)
  {
    userService.delete(id);
  }
 
  @RequestMapping(value = "/")
  public List<User> getBooks()
  {
    return userService.findAll();
  }
 
  @RequestMapping(value = "/{id}")
  public User getUser(@PathVariable int id)
  {
    User user = userService.findOne(id);
    return user;
  }
 
  @RequestMapping(value = "/search/name/{name}")
  public List<User> getBookByName(@PathVariable String name)
  {
    List<User> users = userService.findByName(name);
    return users;
  }
 
}

6、配置datasource

在application.properties文件中添加如下配置:

?
1
2
3
4
5
6
7
8
9
spring.jpa.show-sql = true
logging.level.org.springframework.data=DEBUG
spring.jpa.hibernate.ddl-auto=
 
 
spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

如果你使用STS IDE的話,這些屬性配置都會自動提示的,省的去查找。

想查看spring.datasource的配置,可以參考這個類:DataSourceProperties.java

7、編寫啟動類

比較簡單,注意下該類所屬的包級別要大于或等于其它類,以保證其它類的注解可以被掃描到。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.example;
 
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
 
@SpringBootApplication
@EnableCaching
public class SpringDataJpaExampleApplication {
 
  public static void main(String[] args) {
    SpringApplication.run(SpringDataJpaExampleApplication.class, args);
  }
}

運行、測試程序

啟動main方法,或打成jar包運行;

瀏覽器輸入以下URL,測試即可:

http://localhost:8080/users/

http://localhost:8080/users/add/100/110/111

http://localhost:8080/users/delete/100

http://localhost:8080/users/2

http://localhost:8080/users/search/name/2

程序源碼

https://github.com/peterchenhdu/spring-data-jpa-example

參考資料

http://docs.spring.io/spring-data/jpa/docs/1.11.0.RELEASE/reference/html/

http://javabeat.net/spring-data-jpa/

https://spring.io/guides/gs/caching/

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/chenpi/p/6357527.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: av一级久久| 午夜成人免费电影 | 婷婷午夜激情网 | 婷婷狠狠 | 亚洲国产91 | 看av网站 | 亚洲网站在线观看 | 亚洲综合中文 | 国产精品不卡一区二区三区 | 亚洲电影免费 | 日韩av在线免费 | 毛片在线免费 | 成人a视频片观看免费 | 成人日日夜夜 | 亚洲免费在线播放 | 欧美激情综合五月色丁香小说 | 久久伊人国产 | 成人免毛片| 中文字幕乱码亚洲精品一区 | 精品国产乱码久久久久久丨区2区 | 中文字幕视频在线观看 | 久久久亚洲国产美女国产盗摄 | 精品色 | 北条麻妃在线一区二区免费播放 | 国产毛片毛片毛片 | 精品人成 | 日韩欧美国产一区二区 | 黄色永久网站 | 日本在线一区二区三区 | 亚洲精品二区三区 | 色接久久 | 91精品欧美久久久久久动漫 | 亚洲一一在线 | av久草 | 亚洲国产精品久久久久婷婷老年 | 精品久久av| 欧美日韩91 | 久久精品播放 | 中文字幕一区二区在线观看 | 人人插人 | 国产精品一区二区三区免费视频 |