为了账号安全,请及时绑定邮箱和手机立即绑定

第11章—使用对象关系映射持久化数据—SpringBoot+SpringData+Jpa进行查询修改数据库

标签:
SpringBoot

SpringBoot+SpringData+Jpa进行查询修改数据库

JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它又不限于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化标准规范,由此可见,经过这几年的实践探索,能够脱离容器独立运行,方便开发和测试的理念已经深入人心了。Hibernate3.2+、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。

JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:

ORM映射元数据

JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

API

用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

查询语言

这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

例子:SpringBoot+SpringData+Jpa

这里我的Demo的结构图如下:

ddf.gif

相关的代码如下:

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.beacon</groupId>
    <artifactId>springdata-jpa</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.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-configuration-processor</artifactId>
            <optional>true</optional>
        </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>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--//添加AOP-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <!-- Spring boot 引用Thymeleaf模板依赖包(Thymeleaf模板如果不适用,这里也可以不添加这段配置,Thymeleaf模板使用在下面会讲到) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build></project>

StudentController:

package com.example.springdatajpa.controller;import com.example.springdatajpa.entity.Student;import com.example.springdatajpa.service.StudentService;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.RestController;import java.util.List;@RestControllerpublic class StudentController {    @Autowired
    private StudentService studentService;    @GetMapping("/getAllStu")    public List<Student> getAllStu(){        return studentService.findAll();


    }    @GetMapping("/findById/{id}")    public Student findById(@PathVariable("id")Integer id){        return studentService.findById(id);


    }    //根据money查询 再根据age排序
    @GetMapping("/findByMoney/{money}")    public List<Student> findByMoney(@PathVariable("money")Integer money,Integer age){        return studentService.findByMoneyOrAgeOrderByAgeDesc(money,age);


    }    @GetMapping("/findByName/{name}")    public Student findByNameIgnoresCase(@PathVariable("name")String name){        return studentService.findByName(name);


    }
}

StudentDao:

package com.example.springdatajpa.dao;import com.example.springdatajpa.entity.Student;import org.springframework.data.jpa.repository.JpaRepository;import java.util.List;public interface StudentDao extends JpaRepository<Student,Object> {    Student findById(Integer id);    public List<Student> findByMoneyOrAgeOrderByAgeDesc(Integer money, Integer age) ;    Student findByName(String name);
}

Student:

package com.example.springdatajpa.entity;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name="student")public class Student {    private Integer id;    private String name;    private Integer age;    private String password;    private Integer money;    //注意:这里一定要在主键的get方法上加上这两个注解
    //  @Id
    //  @GeneratedValue
    // 不然会报错找不到
    @Id
    @GeneratedValue
    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;
    }    public String getPassword() {        return password;
    }    public void setPassword(String password) {        this.password = password;
    }    public Integer getMoney() {        return money;
    }    public void setMoney(Integer money) {        this.money = money;
    }    @Override
    public String toString() {        return "Student{" +                "id=" + id +                ", name='" + name + '\'' +                ", age=" + age +                ", password='" + password + '\'' +                ", money=" + money +                '}';
    }
}

StudentService

package com.example.springdatajpa.service;import com.example.springdatajpa.entity.Student;import java.util.List;public interface StudentService {    List<Student> findAll();    Student findById(Integer id);    List<Student> findByMoneyOrAgeOrderByAgeDesc(Integer money, Integer age);    Student findByName(String name);
}

StudentServiceImpl

package com.example.springdatajpa.service.impl;import com.example.springdatajpa.dao.StudentDao;import com.example.springdatajpa.entity.Student;import com.example.springdatajpa.service.StudentService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.web.bind.annotation.PathVariable;import java.util.List;@Servicepublic class StudentServiceImpl  implements StudentService {    @Autowired
    private StudentDao studentDao;    @Override
    public List<Student> findAll() {        return studentDao.findAll();
    }    @Override
    public Student findById(Integer id) {        return studentDao.findById(id);
    }    @Override
    public List<Student> findByMoneyOrAgeOrderByAgeDesc(Integer money, Integer age) {        return studentDao.findByMoneyOrAgeOrderByAgeDesc(money,age);
    }    @Override
    public Student findByName(String name) {        return studentDao.findByName(name);
    }

}

application.yml:

server:
  port: 8089spring:
  datasource:
        url: jdbc:mysql://localhost:3306/test?useSSL=false
        username: root
        password: root
        driver-class-name: com.mysql.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        initialSize: 20
        minIdle: 50
        maxActive: 80
        maxWait: 10000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMills: 300000
  jpa:
    hibernate:
     ddl-auto: update
    generate-ddl: true
    show-sql: true#    thymeleaf
  thymeleaf:
    prefix: classpath:templates/
    suffix: .html
    mode: HTML5
    encoding: utf-8
    servlet:
      content-type: text/html
    cache: false

这里我们可以使用的是JPA的定义查询,相应的方法名的规则如下:

image.png

相应的演示如下:

访问:http://localhost:8089/getAllStu

image.png

访问:http://localhost:8089/findByMoney/9(这个地方可以把相应的数据查出来并按照相应的字段进行排序)

image.png



作者:Dream城堡
链接:https://www.jianshu.com/p/dce1ef3a1e21

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消