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
@Controller
@ResponseBody
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请求的请求参数的获取方式完全一样,在这里就不在做演示 }

HelloController

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中,重启项目即可

    

SpringBoot02 Controller的使用、数据库操作、事物管理、修改banner的更多相关文章

  1. 数据库操作事物的四大特性以及MySQL数据库的四种隔离级别

    1 .事物操作数据库的四大特性(ACID) 1.原子性 (Atomicity) 原子性:就是事物的所包含的所有操作,要么全部成功,要么全部失败回滚. 2.一致性 (Consistency) 一致性:简 ...

  2. python事物管理及同步锁

    我们经常会遇到这样子的问题,我给朋友赚钱100,分为两步: 1)我的账户-100 2)朋友账户 +100 看似需求很简单,但是如果在上面的步骤1)结束后,系统崩溃了怎么办? 数据库中有事物管理,也就是 ...

  3. springboot数据库操作及事物管理操作例子

    一.配置文件 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifa ...

  4. Spring Boot学习——数据库操作及事务管理

    本文讲解使用Spring-Data-Jpa操作数据库. JPA定义了一系列对象持久化的标准. 一.在项目中使用Spring-Data-Jpa 1. 配置文件application.properties ...

  5. django的模型类管理器-----------数据库操作的封装

    模型实例方法 str():在将对象转换成字符串时会被调用. save():将模型对象保存到数据表中,ORM框架会转换成对应的insert或update语句. delete():将模型对象从数据表中删除 ...

  6. MySql常用操作语句(2:数据库、表管理以及数据操作)

    本文主要内容转自一博文. 另外可供参考资源: SQL语句教程 SQL语法 1.数据库(database)管理  1.1 create 创建数据库 mysql> create database f ...

  7. TP5对数据库操作的事物作用

    假如: 你写好了一段完整的代码,模型对数据库的操作,增删改查什么的,都没有问题,当然运行速度也是最快的,完全不用担心会出错, 前提肯定是已经写好的一整段代码, 但是,万一服务器中断了呢,执行一半,后面 ...

  8. Spring中的数据库事物管理

    Spring中的数据库事物管理 只要给方法加一个@Transactional注解就可以了 例如:

  9. sql server 2008 r2 数据库操作时提示 9002错误“事物日志已满”问题

    事务日志截断 若要避免数据库的事务日志被填满,例行备份至关重要.在简单恢复模式下,备份了数据库后会自动截断日志,而在完整恢复模式下,只有备份了事务日志后方才截断日志.但是,截断过程有时也可能发生延迟. ...

随机推荐

  1. iOS 在视图控制器里面判断 应用程序的前台 后台切换 UIViewController

    1.时机  用户点击home 键  应用退到后台 再次点击进入前台  在UIViewController里面 控制器如何获取相关的事件? 2.需求 (1)NSTimer   在应用程序进入后台 10秒 ...

  2. Flask框架的学习与实战(二):实战小项目

    昨天写了一篇flask开发环境搭建,今天继续,进行一个实战小项目-blog系统. blog系统很简单,只有一个页面,然而麻雀虽小五脏俱全.这里目的不是为了做项目而做项目,这篇文章本意是通过这次练习传达 ...

  3. Docker 单机网络

    Docker Network相关命令 root@ubuntu:~# docker network --help Usage: docker network COMMAND Manage network ...

  4. codeforces 686B

    题意:给出一个序列,只允许进行相邻的两两交换,给出使序列变为非降序列的操作方案. 思路:关键点是操作次数不限,冒泡排序. #include<iostream> #include<cs ...

  5. sqlite3简单教程整理

    一.Ubuntu下安装sqlite3 1.介绍:sqlite3是linux上的小巧的数据库,一个文件就是一个数据库. 2.安装:   要安装sqlite3,可以在终端提示符后运行下列命令:   sud ...

  6. Win7.窗口自动滚动回到屏幕

    PS:笔记本 ThinkPad E440 1.前提:窗口 的一部分位于在屏幕的外面,此窗口处于激活的状态 操作:鼠标放置在窗口内部,鼠标继续往屏幕外部移动,鼠标没有任何其他事件(只有 MouseMov ...

  7. 【Educational Codeforces Round 38】D. Buy a Ticket 堆优化Dijkstra

    题意 给定一张无向图,对每个点$i\in S$求$\min_{j\in S} {2\times d(i,j)+a_j}$ 考虑多源多汇最短路会超时,换个角度考虑每个$j$,如果$j=i$,那么答案为$ ...

  8. Ubuntu 16.10 中文环境 Shell输出英文提示

    /********************************************************************************** * Ubuntu 16.10 中 ...

  9. 2017-2018-1 20179215《Linux内核原理与分析》第五周作业

    一.视频学习 1.系统调用的三层皮:xyz(API).system call(中断向量).sys_xyz(不同种类的服务程序). 2.Libc库定义个一些API引用了封装例程(wrapper rout ...

  10. Linux 下使用 ssh 登录局域网其他电脑的方法

    Linux 下使用 ssh 登录局域网其他电脑的方法 首先查看电脑是否安装 ssh 客户端,如果没有执行下面命令安装客户端. sudo apt-get install openssh-client s ...