目录

前言

前两章我们简单讲解了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,也爽多了,谁不想少写几行代码。 SpringBoot - SpringDataJPA的使用

源代码

https://github.com/FlickerMi/SpringBoot-Learn