SpringBoot - SpringDataJPA的使用
前言
前两章我们简单讲解了SpringBoot的易用性,SpringBoot框架内部提供了很多我们需要用到的组件,需要什么你就可以拿到项目里。
在我们平时的项目中,数据的存储以及访问都是最为核心的关键部分,现在有很多企业采用主流的数据库,如关系型数据库:MySQL,oracle,sqlserver。非关系型数据库:redis,mongodb等。
SpringBoot已经为我们提供了很多种的数据库来做数据存储以及读取,上面只是简单的几种,这里我用mysql来完成JPA的使用。
Maven依赖
<!--jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
配置数据源及JPA
spring:
datasource:
driver-classname: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test3?characterEncoding=utf8
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: true
这里注意:ddl-auto: 还有一个属性是create,如果是create,那么每次项目运行都会将原有的数据表删除,然后创建新的表。update就会在原有的基础上更新。
创建数据库
创建test3数据库,建不建表呢,你可以建也可以不建,因为我们可以使用JPA进行自动建表,来!
新建一个实体类:
package cn.notemi.po;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.Min;
/**
* Title:User
* Description:
*
* @author Flicker
* @create 2017-08-03 下午 5:10
**/
@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
private String name;
private Integer age;
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public User() {
}
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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
建立与数据库对应的类,JPA的@Entity注解会将属性值会映射出数据库的字段。
@Id标示为主键,@GeneratedValue自增。
运行项目,你就会发现数据库已经有表了。
创建JPA
package cn.notemi.repository;
import cn.notemi.po.User;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* Title:UserRepository
* Description:
*
* @author Flicker
* @create 2017-08-03 下午 5:22
**/
public interface UserRepository extends JpaRepository<User,Integer> {
//Integer是id的类型
}
编写Controller
/**
* Title:UserController
* Description:
*
* @author Flicker
* @create 2017-08-03 下午 5:19
**/
@RestController
public class UserController {
@Autowired
UserRepository userRepository;
/**
* 查询全部
* @return
*/
@GetMapping(value = "/users")
public List<User> getUser(){
return userRepository.findAll();
}
/**
* 新增用户
* @return
*/
@PostMapping(value = "/users")
public User addUser(User user){
user.setAge(user.getAge());
user.setName(user.getName());
return userRepository.save(user);
}
/**
* 根据id 查询
* @param id
* @return
*/
@GetMapping(value = "/users/{id}")
public User selectOne(@PathVariable("id") Integer id){
return userRepository.findOne(id);
}
/**
* 更新用户
* @param id
* @param name
* @param age
* @return
*/
@PutMapping(value = "/users/{id}")
public User updateOne(@PathVariable("id") Integer id,
@RequestParam("name") String name,
@RequestParam("age") Integer age){
User user = new User();
user.setName(name);
user.setAge(age);
user.setId(id);
return userRepository.save(user);
}
/**
* 根据id删除
* @param id
*/
@DeleteMapping(value = "/users/{id}")
public void delectOne(@PathVariable("id") Integer id){
userRepository.delete(id);
}
}
我们使用@GetMapping、@PostMapping、@PutMapping、@DeleteMapping,也爽多了,谁不想少写几行代码。 :grin: