简介:
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
第一步:引入我们需要的POM文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
</dependencies>
第二步:配置application.yml文件
server:
port: 8080
spring:
jpa:
database-platform: org.hibernate.dialect.MySQL5Dialect
show-sql: true
datasource:
url: jdbc:mysql:
driver-class-name: com.mysql.jdbc.Driver
username: root
password: root
第三步:创建一个简单的工具类ResponseResult
package com.feicheng.common;
public class ResponseResult {
private Integer code;
private String msg;
public void setCode(Integer code) {
this.code = code;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
public ResponseResult(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
}
第四步:创建一个test数据库和创建一个user表(字段有:id,username)
CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `test`;
/*Table structure for table `user` */
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`password` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
第五步:创建实体类User
package com.feicheng.entity;
import javax.persistence.*;
@Table(name = "user")
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
第六步:创建UserController
package com.feicheng.controller;
import com.feicheng.common.ResponseResult;
import com.feicheng.entity.User;
import com.feicheng.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Collections;
import java.util.List;
@Controller
@RequestMapping("user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("list")
public ResponseEntity<List<User>> list() {
List<User> users = this.userService.select();
if (CollectionUtils.isEmpty(users)) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(users);
}
@GetMapping("select/{userName}")
public ResponseEntity<User> selectUserByName(@PathVariable("userName") String userName) {
User user = this.userService.selectUserByName(userName);
if (user == null) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
}
return ResponseEntity.ok(user);
}
@PostMapping("edit")
public ResponseEntity<ResponseResult> edit(User user) {
ResponseResult responseResult = this.userService.edit(user);
return ResponseEntity.ok(responseResult);
}
@PostMapping("delete/{id}")
public ResponseEntity<ResponseResult> delete(@PathVariable("id") Integer id) {
ResponseResult responseResult = this.userService.delete(id);
return ResponseEntity.ok(responseResult);
}
}
第七步:创建UserService
package com.feicheng.service;
import com.feicheng.common.ResponseResult;
import com.feicheng.entity.User;
import java.util.List;
public interface UserService {
List<User> select();
User selectUserByName(String userName);
ResponseResult edit(User user);
ResponseResult delete(Integer id);
}
第八步:创建UserServiceImpl
package com.feicheng.service.impl;
import com.feicheng.common.ResponseResult;
import com.feicheng.entity.User;
import com.feicheng.repository.UserRepository;
import com.feicheng.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Optional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public List<User> select() {
List<User> users = this.userRepository.findAll();
if (CollectionUtils.isEmpty(users)) {
return null;
}
return users;
}
@Override
public User selectUserByName(String userName) {
User user = new User();
user.setName(userName);
Example<User> example = Example.of(user);
Optional<User> one = this.userRepository.findOne(example);
user = one.get();
return user;
}
@Override
public ResponseResult edit(User user) {
Integer count = this.userRepository.edit(user.getName(), user.getPassword(), user.getId());
if (count > 0) {
return new ResponseResult(200, "修改成功");
}
return new ResponseResult(500, "修改失败");
}
@Override
@Transactional
public ResponseResult delete(Integer id) {
try {
this.userRepository.deleteById(id);
return new ResponseResult(200, "删除成功");
} catch (Exception e) {
e.printStackTrace();
return new ResponseResult(500, "删除失败");
}
}
}
第九步:创建UserRepository
package com.feicheng.repository;
import com.feicheng.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
@Modifying
@Transactional
@Query("update User u set u.name = :name, u.password = :password where u.id = :id")
Integer edit(@Param("name") String name, @Param("password") String password, @Param("id") Integer id);
}
最后总结:
使用JPA操作数据库比较方便,把我们想要的代码都封装好了
操作起来还是比较简单快捷,容易上手
想继续了解JPA,可以去我的GitHub上做的一个权限管理系统,就是用的JPA来操作的数据库