SpringBoot 数据库的基本操作

来源:互联网 发布:ubuntu12.04安装mysql 编辑:程序博客网 时间:2024/06/16 14:56

SpringBoot 数据库的基本操作

本博文将记录下SpringBoot 关于数据库的基本操作,比较简单哈,但也有一些知识点需要我们注意。

假设数据库中有一个Student表,本文实现如下几个需求:

1、通过Get请求,获取Student表中全部学生的信息。

2、通过Post请求,存储一个学生的信息到Student表中

3、通过Get请求查询指定Id(name)的学生信息。

4、通过Put请求更新指定Id的学生信息.

5、通过Delete请求删除指定Id的学生信息。

准备工作

1、新建一个SpringBoot项目

2、添加数据库和JPA的相关Jar包依赖,
其中,本文使用MySQL数据库

        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-jpa</artifactId>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>        </dependency>

pom.xml完整内容如下:

<?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.wrh</groupId>    <artifactId>springbootdemo</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>jar</packaging>    <name>springbootdemo</name>    <description>Demo project for Spring Boot</description>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.2.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <!--        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-thymeleaf</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>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

3、为Spring-data-jpa和MySQL做相关的配置

spring:  profiles:    active: dev  datasource:    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/dbstudent?characterEncoding=utf8&useSSL=false    username: root    password: 123456  jpa:    hibernate:      ddl-auto: update    show-sql: true

其中,spirng-jpa-hibernate-ddl-auto有如下图所示的几种可选项。

在以上的配置中,如果在url中不添加useSSL=false,则在控制台我们会看到如下的警告。

Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false’. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

4、利用MySQL创建一个新的数据库:dbstudent。

本文使用squel pro这个可视化工具来完成,如下图所示。

5、在项目中添加一个Student类。

具体代码如下:

package com.wrh;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;/** * Created by wuranghao on 2017/4/10. */@Entitypublic class Student {    @Id    @GeneratedValue    private Integer id;    private String name;    private Integer age;    public Student() {    }    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;    }}

6、编写抽象接口StudentRepository:继承Repository接口,或继承Repository系列接口(CurdRepository/JpaRepository等)。在这个接口中定义抽象方法。

public interface StudentRepository extends JpaRepository<Student,Integer> {// nothing
}

关于Repositroy接口,多说一点,如下:

Repository接口
1. Repository是一个标识接口,即是一个空接口不提供任何方法,开发者需要在自己定义的接口中声明需要的方法。
2. 继承Repository的接口,则该接口会被IOC容器识别为一个Repository Bean纳入到IOC容器中,进而可以在改接口中定义满足一定规范的方法。
3. 与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。两种方式是完全等价的
Repository子接口
1. Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类。
2. CrudRepository: 继承 Repository,实现了一组 CRUD 相关的方法。
3. PagingAndSortingRepository: 继承 CrudRepository,实现了一组分页排序相关的方法。
4. JpaRepository: 继承PagingAndSortingRepository,实现一组 JPA 规范相关的方法。
5. 自定义的 XxxxRepository 需要继承 JpaRepository,这样的 XxxxRepository 接口就具备了通用的数据访问控制层的能力。
6. JpaSpecificationExecutor: 不属于Repository体系,实现一组 JPA Criteria查询相关的方法

6、添加一个控制类,取名为StudentController

待以上准备工作完成之后,则可以来一一在控制器中完成相关的内容。

1、通过Get请求,获取Student表中全部学生的信息

首先借助于Sequel pro工具为student表添加两行数据,如下图所示:

通过Get请求,获取Student表中全部学生的信息的实现代码如下:

@RestController@RequestMapping("/student")public class StudentController {    @Autowired    private StudentRepository studentRepository;    @GetMapping(value = "/allstudent")    public List<Student> getAllStudentInfo(){//        Iterable iterable = studentRepository.findAll();//        Iterator iterator = iterable.iterator();//        List<Student> students = new ArrayList<Student>();//        while(iterator.hasNext()){//            students.add((Student) iterator.next());//        }////        return students;        return studentRepository.findAll();    } } //注释掉的代码为StudentRepository接口继承CurdRepository接口时,获取全部学生列表的代码

测试结果如下:

是不是比较简单,直接一行代码就可以从数据库中获取到数据,而不需要写一条SQL语句。

2、通过Post请求,存储一个学生的信息到Student表中

具体实现也相当简单,代码如下:

@PostMapping(value="/save")    public Student saveOne(@RequestParam("id") Integer age,@RequestParam("name") String name){        Student student = new Student();        student.setAge(age);        student.setName(name);        return studentRepository.save(student);    }

借助于Postman来以put方式发送请求,返回结果如下图所示。

并且通过Sequel pro工具可以看到确实将数据插入到了数据库中的student表中。

3、通过Get请求查询指定Id(name)的学生信息。

查询数据库中指定Id学生的信息实现代码如下:

@GetMapping(value="/findById/{id}")    public Student findById(@PathVariable(value = "id") Integer id){        return studentRepository.findOne(id);    }

如果要查询数据库中指定name的学生信息,则首先需要在我们之前定义的SudentReposirory接口中添加一个findByName(String name),如下:

public interface StudentRepository extends JpaRepository<Student,Integer> {    public List<Student> findByName(String name);}

这样,通过指定name来查询学生的信息的代码如下:

@GetMapping(value="/findByName/{name}")    public List<Student> findByName(@PathVariable("name") String name){        return studentRepository.findByName(name);    }

同样,如果我们想根据age来查询,则首先需要在StudentRepository接口中添加相应的方法即可。

经测试工作良好。

4、通过Put请求更新指定Id的学生信息

实现代码如下:

@PutMapping(value="/update")    public Student update(@RequestParam("id") Integer id,                       @RequestParam("age") Integer age,                       @RequestParam("name") String name){        Student s = new Student();        s.setId(id);        s.setAge(age);        s.setName(name);        return studentRepository.save(s);    }

5、通过Delete请求删除指定Id的学生信息

实现代码如下:

    @DeleteMapping(value = "/delete/{id}")    public void delete(@PathVariable("id") Integer id){        studentRepository.delete(id);    }

小结

这篇博文就记录了下关于SpringBoot 的数据库的相关操作,确实比较简单哈。完整的项目地址在这里:https://github.com/wojiushimogui/SpringBoot_MySQL。

参考资料

1、慕课网《2小时学习SpringBoot》视频

2、http://blog.csdn.net/dfsaggsd/article/details/50622878

3、http://blog.csdn.net/linzhiqiang0316/article/details/52609162

0 0
原创粉丝点击