02) SpringBoot 中Controller的使用、数据库操作、事物管理、修改banner

1 Controller的使用

  特点:编程技巧和SpringMVC几乎完全一样

  注意:@RestController = @Controller + @ResponseBody

  注意:读取路径参数和请求参数是利用的不通的注解实现,其中请求参数是可以设定默认值的

 

package cn.xinagxu.girl02.controller;

import cn.xinagxu.girl02.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@RestController
public class HelloController {

    @Value("${character}")
    private String character;
    @Value("${age}")
    private Integer age;
    @Value("${content}")
    private String content;

    @Autowired
    private Student student;

    @RequestMapping(value = "/")
    public String hello() {
//        return "Hello World!" + "性格:" + character + " 年龄:" + age + " 详细信息为:" + content;
        return student.toString();
    }

    /**
     * GET请求
     * @return
     */
    @GetMapping(value = "/param")
    public String param02() {
        return "测试GET请求,@GetMapping是GET请求的专属";
    }

    /**
     * POST请求
     * @return
     */
    @PostMapping(value = "/param")
    public String param03() {
        return "测试POST请求,@PostMapping是POST请求的专属";
    }

    /**
     * 获取GET请求路径中的参数
     * @param id
     * @return
     */
    @GetMapping(value = "/param/{id}")
    public String param04(@PathVariable("id") Integer id) {
        return "获取到的ID数据为:" + id;
    }

    /**
     * 获取GET请求路径的参数
     * @param id
     * @return
     */
    @GetMapping(value = "/{id}/param")
    public String param05(@PathVariable("id") Integer id) {
        return "获取到的ID数据为:" + id;
    }

    /**
     * 获取POST路径中的参数
     * @param id
     * @return
     */
    @PostMapping(value = "/param/{id}")
    public String param06(@PathVariable("id") Integer id) {
        return "从POST路径中获取到的ID数据为:" + id;
    }


    /**
     * 获取GET请求的请求参数(这种写法必须写上参数,参数可以为空)
     * @param id
     * @return
     */
    @GetMapping(value = "/requestParam")
    public String param07(@RequestParam("id") Integer id) {
        return "从GET请求中获取到的请求参数为:" + id;

    }

    /**
     * 获取GET请求参数(这种写法支持默认值)
     * @param id
     * @return
     */
    @GetMapping(value = "/requestParam/2")
    public String param08(@RequestParam(value = "id", required = false, defaultValue = "0") Integer id) {
        return "从GET请求中获取到的参数为(支持默认参数): " + id;
    }
//    注意:POST请求的请求参数和GET请求的请求参数的获取方式完全一样,在这里就不在做演示



}

 

2 数据库操作

  2.1 前提准备

    安装好MySQL数据库

    在pom文件中引入MySQL的驱动包    

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

 

    在pom文件中引入jpa

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

 

  2.2 创建一个实体类

    利用@Entity标注这个类是一个实体类

    利用@Id标注这个字段是主键

    利用@GeneratedValue标注这个字段是自增的

 

package cn.xiangxu.cloud.springCloud01.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.io.Serializable;

/**
 * 学生实体类
 */
@Entity
public class Student {
    @Id
    @GeneratedValue
    private Integer id;
    private String name;
    private String address;
    private String subject;
    private String description;

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    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 String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

 

    注意:实体的属性名不能和数据库的某些关键字冲突,如:不能用desc作为属性名

 

  3.3 创建一个与实体类对应的持久层接口

    该接口必须继承于JpaRepository,其中JpaRepository的第一个参数是对应的实体类名,第二个参数是对应的实体类标有@Id注解的那个属性

 

 

package cn.xiangxu.cloud.springCloud01.repository;

import cn.xiangxu.cloud.springCloud01.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;

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

}

 

  3.4 数据库配置文件

    

 

 

server:
  context-path: /student
  port: 8888

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/springboot
    username: dev
    password: 182838
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

 

  3.4 测试一下

    完成上述步骤后就可以启动项目,如果在数据库中创建了一个与实体类名一直的表,就说明数据库环境搭建成功

    注意:如果实体类名采用的是驼峰命名法,那么创建的表明会将大写字母转化成下划线,但是首字母会转化成小写字母

  3.5 在控制层调用持久层

    注意:应该在服务层调用控制层,因为这里的例子太简单了,所以直接跳过服务层在控制层调用持久层

    

 

 

package cn.xiangxu.cloud.springCloud01.controller;

import cn.xiangxu.cloud.springCloud01.entity.Student;
import cn.xiangxu.cloud.springCloud01.repository.StudentRepository;
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;

@RestController
public class StudentController {
    @Autowired
    private StudentRepository studentRepository;

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

 

 

  3.6 在控制层实现数据的增删改查

    注意:虽然我们在持久层接口中没有定义任何方法,但是我们的接口继承了JpaRepository,所以我们可以用持久层接口来依赖注入一个对象,从而用一些默认的方法来实现数据库操作,例如:save(持久层对象)    delete(主键字段)   findAll()  findOne(主键字段)  

    注意:save方法可以实现插入和修改操作

    注意:PUT请求时的特别设定

    注意:我采用的是postMan工具进行测试

    

 

 

package cn.xiangxu.cloud.springCloud01.controller;

import cn.xiangxu.cloud.springCloud01.entity.Student;
import cn.xiangxu.cloud.springCloud01.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class StudentController {
    @Autowired
    private StudentRepository studentRepository;

    @PostMapping(value = "/insertOne")
    public Student inserOne(@RequestParam("name") String name,
                         @RequestParam("address") String address,
                         @RequestParam("subject") String subject,
                         @RequestParam("description") String description) {
//        从前端获取到的数据应该先做一下三个检查
//        检查变量类型
//        检查变量长度
//        检查变量格式
        Student student = new Student();
        student.setName(name);
        student.setAddress(address);
        student.setSubject(subject);
        student.setDescription(description);

        return studentRepository.save(student);

    }


    /**
     * 根据ID删除指定的记录
     * @param id
     */
    @DeleteMapping(value = "/deleteById/{id}")
    public void deleteById(@PathVariable("id") Integer id) {
        studentRepository.delete(id);
    }

    /**
     * 根据ID修改制定学生的信息
     * @param id
     * @param name
     * @param address
     * @param subject
     * @param description
     * @return
     */
    @PutMapping(value = "updateById/{id}")
    public Student updateById(@PathVariable("id") Integer id,
                           @RequestParam("name") String name,
                           @RequestParam(value = "address", required = false, defaultValue = "重庆市大足区") String address,
                           @RequestParam(value = "subject", required = false, defaultValue = "Java") String subject,
                           @RequestParam(value = "description", required = false, defaultValue = "大足是个好地方") String description) {
        Student student = new Student();
        student.setId(id);
        student.setName(name);
        student.setAddress(address);
        student.setSubject(subject);
        student.setDescription(description);

        return studentRepository.save(student);
    }
//    注意:put请求时body中设定:x-www-form-urlencoded

    /**
     * 查询所有的学生信息
     * @return
     */
    @GetMapping(value = "/findAll")
    public List<Student> findAllStudent() {
        return studentRepository.findAll();
    }

    /**
     * 根据学生ID查询单个的学生信息
     * @param id
     * @return
     */
    @GetMapping(value = "/findById/{id}")
    public Student findById(@PathVariable("id") Integer id) {
        return studentRepository.findOne(id);
    }
}

 

 

  3.7 自定义查询函数

    字需要在持久层接口中定义好函数就行啦

    注意:函数的名字使用规则的,比如你要按照name字段查询,那么函数名就必须是findByName

      

  3.8 在除查询意外的操作都应该有事物管理

    只需在相应的方法前添加@Transactional注解就行啦

      

 

源代码:点击前往

    

4 修改banner

  4.1 在springboot项目的resources下创建一个banner.txt文件

  4.2 打开连接:点击前往

     

  4.3 将生成的字符复制到banner.txt中,重启项目即可

    

 

 

 

 

关注公众号,将会有更多精彩每天送达:

公众号内有精彩内容,可以提现

 

 

原文链接:https://www.cnblogs.com/NeverCtrl-C/p/7690108.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值