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请求的请求参数的获取方式完全一样,在这里就不在做演示 }
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中,重启项目即可