Primeiro, o conceito
1. Qual é a dados Primavera
Primavera de Dados O objetivo é simplificar a construção de aplicações baseado no framework Spring com os dados de acesso
de suporte de acesso para bancos de dados relacionais que incluem um banco de dados não-relacional Map-Reduce estrutura para serviços de dados em nuvem, etc. Há também está incluído
Mola dados abaixo existem muitos sub-projectos:
– Spring Data Commons
– Spring Data JPA
– Spring Data KeyValue
– Spring Data LDAP
– Spring Data MongoDB
– Spring Data Gemfire
– Spring Data REST
– Spring Data Redis
– Spring Data for Apache Cassandra
– Spring Data for Apache Solr
– Spring Data Couchbase (community module)
– Spring Data Elasticsearch (community module)
– Spring Data Neo4j (community module)
SpringData proporciona a utilização de uma API unificada para operar sobre uma camada de acesso a dados
é composta principalmente de mola de dados comuns projecto para atingir os
mola de dados comuns quando se utiliza a tecnologia de acesso de dados relacional ou não-relacional é baseado num padrão unificado proporcionada pela mola
que inclui o padrão CRUD (create para obter atualizações excluir) consulta de classificação e paginação operações conexas
Mola Dados fornecidos alguns interface de repositório unificado
Estas funções de interface ter funções CRUD paging funcionalidade e mecanismo de bloqueio optimista
CrudRepository<T, ID extends Serializable> :基本CRUD操作
PagingAndSortingRepository<T, ID extends Serializable> :基本CRUD及分页
RevisionRepository<T, ID extends Serializable, N extends Number & Comparable<N>> :乐观锁机制
Utilize apenas para escrever suas próprias interfaces para herdar estes built-in interfaces para ter as funções correspondentes sem se preocupar com a sua realização concreta
Primavera de dados também fornece modelo de classe de acesso de dados Template
exemplo RedisTemplate MongoTemplate etc.
Assim, com dados da Primavera é o equivalente a " programação orientada SpringData "
2. O que é JPA
APP não é um quadro, mas uma J2EE- norma : J AVA P ersistence Um PI
da especificação também se refere a especificações JSR
JSR é J AVA S pecification P & lt equests sigla que significa proposta especificação Java
da especificação existem muitas implementações, por exemplo, conhecidos Hibernate
também Toplink OpenJPA etc.
Dados mola que é equivalente à soma destes quadros são reembalados
Dados Primavera subjacente ao padrão Hibernate
Dois, SpringBoot integração JPA
Primeiro, crie um projeto
se um assistente para criar SpringBoot Initializer deve adicionar Primavera de dados JPA
Se você precisa criar manualmente dependente da introdução de:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
E em seguida, escrever o arquivo de configuração de fonte de dados:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springboot_jpa?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root
password: 123456
Desde especificação JPA é baseado ORM (Object Relational Mapping) O pensamento
, portanto, ser escrito e a entidade de dados feijão mesa classe de mapeamento e mapeamento de uma
Preparação de uma classe de entidades:
a base de dados, se não na tabela, correspondente mola de dados APP também fornece a função de criação automática de tabela (claro, a premissa é configurado
// 使用JPA注解来配置映射关系
// @Entity注解:告诉JPA该类是一个实体类 是和数据表进行映射的类
@Entity
// @Table注解:主动指定和数据库中的哪个数据表进行映射 若省略 则默认表名为该类的类名小写
@Table(name = "tb_user")
public class User {
// @Id注解:表明该属性是一个主键
@Id
// @GeneratedValue注解:指定该属性的主键生成策略 IDENTITY代表自增主键
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
// @Column注解:表明该属性是和数据表对应的一个列 还可指定列名和最大长度
@Column(name = "last_name",length = 20)
private String lastName;
// 若不指定列名 则默认列名为该属性的属性名
@Column
private String email;
getter()和setter()方法省略...
}
Finalmente, algumas configurações básicas simples no arquivo de configuração:
jpa:
hibernate:
# 数据表的生成策略:update代表更新或创建数据表 若无该数据表 则创建 若有该数据表 则更新
ddl-auto: update
# 显示每次执行的sql语句
show-sql: true
Propriedades da APP em JpaProperties
esta classe se eu não sei o que os atributos disponíveis para configuração com referência à classe
até agora toda a configuração é concluída
teste simples:
@RestController
public class UserController {
@Autowired
UserRepository userRepository;
@GetMapping("/user/{id}")
public User getUser(@PathVariable("id") Integer id)
{
// 在2.x的新版本的Spring Data JPA中 findById()返回值有可能是空值 须用orElse()进行判断
return (User) userRepository.findById(id).orElse(null);
}
@GetMapping("/addUser")
public User insertUser(User user)
{
// 返回该储存的对象
return userRepository.save(user);
}
}
Resultados: O
teste for bem sucedido sem escrever qualquer instrução SQL