JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它又不限于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。Hibernate3.2+、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。
package com.programb;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@SpringBootApplication
@EnableJpaRepositories("com.programb.repository")
public class JpaApplication {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
}
public static void main(String[] args) {
SpringApplication.run(JpaApplication.class, args);
}
}
package com.programb.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.programb.entity.R;
import com.programb.service.UserService;
@RestController
@RequestMapping("/user/*")
public class UserController {
@Autowired
UserService userService;
@GetMapping("list")
public R list() {
try {
return R.isOk().data(userService.list());
} catch (Exception e) {
return R.isFail(e);
}
}
@GetMapping("list/{username}")
public R listbyname(@PathVariable("username") String username) {
try {
return R.isOk().data(userService.findByUsername(username));
} catch (Exception e) {
return R.isFail(e);
}
}
@GetMapping("get/{userId}")
public R get(@PathVariable("userId") String userId) {
try {
return R.isOk().data(userService.get(userId));
} catch (Exception e) {
return R.isFail(e);
}
}
}
package com.programb.entity;
import java.io.Serializable;
public class R<T> implements Serializable {
private static final long serialVersionUID = -4577255781088498763L;
private static final int OK = 0;
private static final int FAIL = 1;
private static final int UNAUTHORIZED = 2;
private T data; //服务端数据
private int status = OK; //状态码
private String msg = ""; //描述信息
public static R isOk(){
return new R();
}
public static R isFail(){
return new R().status(FAIL);
}
public static R isFail(Throwable e){
return isFail().msg(e);
}
public R msg(Throwable e){
this.setMsg(e.toString());
return this;
}
public R data(T data){
this.setData(data);
return this;
}
public R status(int status){
this.setStatus(status);
return this;
}
public R() {
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
package com.programb.entity;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "T_USER")
@JsonIgnoreProperties({"handler","hibernateLazyInitializer"})
public class User {
@Id
@Column(name = "USER_ID")
private String userId;
@Column(name = "USERNAME")
private String username;
@Column(name = "PASSWORD")
private String password;
public User() {
}
public User(String userId, String username, String password) {
this.userId = userId;
this.username = username;
this.password = password;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"userId='" + userId + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
package com.programb.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.programb.entity.User;
import java.util.List;
public interface UserRepository extends JpaRepository<User, String> {
List<User> findByUsername(String username);
}
package com.programb.service;
import java.util.List;
import com.programb.entity.User;
public interface UserService {
List<User> list();
List<User> findByUsername(String username);
User get(String userId);
}
package com.programb.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.programb.entity.User;
import com.programb.repository.UserRepository;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserRepository userRepository;
@Override
public List<User> list() {
return userRepository.findAll();
}
@Override
public List<User> findByUsername(String username) {
return userRepository.findByUsername(username);
}
@Override
public User get(String userId) {
return userRepository.getOne(userId);
}
}
spring:
datasource:
url: jdbc:mysql://localhost:3306/socks?useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
DROP DATABASE IF EXISTS `socks`;
CREATE DATABASE `socks`;
USE `SOCKS`;
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`USER_ID` varchar(50) ,
`USERNAME` varchar(50) ,
`PASSWORD` varchar(50)
) ;
INSERT INTO `t_user` VALUES ('1', 'admin', 'admin');
INSERT INTO `t_user` VALUES ('2', 'programb', '123456');
<?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.hehe</groupId>
<artifactId>springboot-data-jpa</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot-data-jpa</name>
<description>SpringBoot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.M4</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</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>
</dependency>
</dependencies>
<repositories>
<repository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
<snapshots><enabled>true</enabled></snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<url>http://repo.spring.io/snapshot</url>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<url>http://repo.spring.io/milestone</url>
</pluginRepository>
</pluginRepositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>