本人是一名物联网工程专业的学生,即将进入大三,写博客即是为了记录自己的学习历程,又希望能够帮助到很多和自己一样处于起步阶段的萌新。临渊羡鱼,不如退而结网。一起加油!
博客主页:https://blog.csdn.net/qq_44895397
<!--MyBatis 整合 SpringBoot 的起步依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<!--MySQL 的驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<mysql.version>8.0.19</mysql.version>
<!--mysql,mybatis-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
具体操作参考《SpringBoot 工程下使用 Mybatis “偷懒”工程(反向工程)》
注意:mysql版本问题:低版本的driver、url配置和8的不一样
#tomcat
server.port=80
server.servlet.context-path=/
#mysql数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=yky
@Controller
//@RestController
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping("/student.do")
@ResponseBody
public Student selectStudent(Integer id){
Student student = studentService.queryStudentById(id);
return student;
}
}
service接口:
public interface StudentService {
Student queryStudentById(Integer id);
}
service的实现:
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper;
@Override
public Student queryStudentById(Integer id) {
Student student = studentMapper.selectByPrimaryKey(id);
return student;
}
}
@Mapper 作用:mybatis 自动扫描数据持久层的映射文件及 DAO 接口的关系
注意:默认情况下,Mybatis 的 xml 映射文件不会编译到 target 的 class 目录下,所以我们需要在 pom.xml 文件中配置 resource
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml
在 运 行 的 主 类 上 添 加
Mybatis 提供的注解:扫描数据持久层的 mapper 映谢配置文件,DAO 接口上就不用加@Mapper
basePackages 通常指定到数据持久层包即可
@SpringBootApplication
@MapperScan("com.yky.springboot.mapper")
public class Springbootdemo07Application {
public static void main(String[] args) {
SpringApplication.run(Springbootdemo07Application.class, args);
}
}
在resources目录下新建目录mapper存放映射文件,将StudentMapper.xml文件移到resources/mapper目录下
在 application.properties 配置文件中指定映射文件的位置,这个配置只有接口和映射文件不在同一个包的情况下,才需要指定
# 指定 Mybatis 映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml
@EnableTransactionManagement
开启事务支持(springboot是默认开启的,可以不用加此注解)@Transactional
即可Spring MVC 的注解,处理 http 请求
Spring 4 后新增注解,是@Controller 注解功能的增强是 @Controller
与@ResponseBody
的组合注解
//RestController 注解相当于加了给方法加了@ResponseBody 注解,所以是不能跳转页面的,
只能返回字符串或者 json 数据
@RestController
public class MVCController {
@GetMapping(value = "/query")
public String get() {
return "@GetMapping 注解,通常查询时使用";
}
@PostMapping(value = "/add")
public String add() {
return "@PostMapping 注解,通常新增时使用";
}
@PutMapping(value = "/modify")
public String modify() {
return "@PutMapping 注解,通常更新数据时使用";
}
@DeleteMapping(value = "/remove")
public String remove() {
return "@DeleteMapping 注解,通常删除数据时使用";
}
}
RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP
,可以使用XML格式
定义或JSON格式
定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
比如我们要访问一个 http 接口:http://localhost:8080/springboot?id=1021&name=yky
采用 RESTFul 风格则 http 地址为:http://localhost:8080/springboot/1001/yky
@PathVariable:获取 url 中的数据
该注解是实现 RESTFul 最主要的一个注解
@RequestMapping("/student/{stuid}/{stuname}")
public Student selectStudentrestful(@PathVariable("stuid") Integer id,
@PathVariable("stuname") String name){
Student student = studentService.queryStudentById(id);
return student;
}
@GetMapping("/student/{stuid}/class/{stuname}")
public Student selectStudentrestful(@PathVariable("stuid") Integer id,
@PathVariable("stuname") String name){
Student student = studentService.queryStudentById(id);
return student;
}
@GetMapping("/student/class/{stuid}/{stuname}")
public Student selectStudentrestful2(@PathVariable("stuid") Integer id,
@PathVariable("stuname") String name){
Student student = studentService.queryStudentById(id);
return student;
}
@PostMapping
接收和处理 Post 方式的请求
@DeleteMapping
接收 delete 方式的请求,可以使用 GetMapping 代替
@PutMapping
接收 put 方式的请求,可以用 PostMapping 代替
@GetMapping
接收 get 方式的请求
@GetMapping("/student/{stuid}/{stuname}")
public Student selectStudentrestful(@PathVariable("stuid") Integer id,
@PathVariable("stuname") String name){
Student student = studentService.queryStudentById(id);
return student;
}
@PostMapping("/student/{bookid}/{bookname}")
public Student selectBookrestful(@PathVariable("bookid") Integer id,
@PathVariable("bookname") String name){
Student student = studentService.queryStudentById(id);
return student;
}
增 post 请求、删 delete 请求、改 put 请求、查 get 请求
请求路径不要出现动词
分页、排序等操作,不需要使用斜杠传参数
例如:
/boot/orders?page=1&sort=desc
一般传的参数不是数据库表的字段,可以不采用斜杠
<!-- 加载 spring boot redis 包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
#redis的配置
spring.redis.port=6379
spring.redis.host=localhost
#密码:
#spring.redis.password=yky
@Autowired
private RedisTemplate<Object,Object> redisTemplate;
实现Serializable
接口
public class Student implements Serializable
/**
* 通过id查询学生,先在redis内部找,
* 如果redis内没有就在数据库查,
* 查找完成后返回并放入redis
* @param id
* @return
*/
@Override
@Transactional
public Student queryStudentById(Integer id) {
Object stu = redisTemplate.opsForValue().get(id);
if(stu != null){
return (Student)stu;
}
Student student = studentMapper.selectByPrimaryKey(id);
redisTemplate.opsForValue().set(id,student);
return student;
}