本人是一名物联网工程专业的学生,即将进入大三,写博客即是为了记录自己的学习历程,又希望能够帮助到很多和自己一样处于起步阶段的萌新。临渊羡鱼,不如退而结网。一起加油!
博客主页:
SpringBoot 集成 MyBatis
1、添加依赖
添加MyBtis整合SpringBoot的起步依赖
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.0.0
MySQL驱动
mysql
mysql-connector-java
版本号继承父项目的版本号
怎么指定mysql驱动的版本呢
properties 中间添加版本号->修改父项目指定的版本号
8.0.19
2. 指定驱动时就添加版本号
mysql
mysql-connector-java
8.0.19
2、使用逆向工程生成对应的mapper文件(dao接口、xml映射文件)以及实体类
具体操作参考《SpringBoot 工程下使用 Mybatis “偷懒”工程(反向工程)》
拷贝 Mybatis 反向工程配置文件到项目的根目录下
修改 GeneratorMapper.xml 配置
在 pom.xml文件中添加 mysql 反向工程依赖
双击运行
3、在 Springboot 的核心配置文件 application.properties 中配置数据源
注意: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
4、编写代码(控制层,service层,mapper层添加注解)
创建web 包并创建 StudentController
@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 包下创建 service 接口并编写代码
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;
}
}
在 Mybatis 反向工程生成的StudentMapper 接口上加一个 @Mapper 注解
@Mapper 作用:mybatis 自动扫描数据持久层的映射文件及 DAO 接口的关系
注意:默认情况下,Mybatis 的 xml 映射文件不会编译到 target 的 class 目录下,所以我们需要在 pom.xml 文件中配置 resource
src/main/java
**/*.xml
DAO 其它开发方式
@MapperScan
在 运 行 的 主 类 上 添 加
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
SpringBoot 事务支持
在入口类中使用注解 @EnableTransactionManagement 开启事务支持(springboot是默认开启的,可以不用加此注解)
在访问数据库的 Service 方法上添加注解 @Transactional 即可
SpringBoot 下的 SpringMVC
@Controller
Spring MVC 的注解,处理 http 请求
@RestController
Spring 4 后新增注解,是@Controller 注解功能的增强是 @Controller 与@ResponseBody 的组合注解
如果一个 Controller 类添加了@RestController,那么该 Controller 类下的所有方法都相当于添加了@ResponseBody 注解
用于返回字符串或 json 数据
对请求方式限制的注解
@RequestMapping
支持 Get 请求,也支持 Post 请求
@GetMapping
RequestMapping 和 Get 请求方法的组合
只支持 Get 请求 Get 请求主要用于查询操作
@PostMapping
RequestMapping 和 Post 请求方法的组合
只支持 Post 请求 Post 请求主要用户新增数据
@PutMapping
RequestMapping 和 Put 请求方法的组合
只支持 Put 请求 Put 通常用于修改数据
@DeleteMapping
RequestMapping 和 Delete 请求方法的组合
只支持 Delete 请求通常用于删除数据
//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 注解,通常删除数据时使用";
}
}
SpringBoot 实现 RESTful
什么是RESTFul ?
RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。
比如我们要访问一个 http 接口:http://localhost:8080/springboot?id=1021&name=yky
采用 RESTFul 风格则 http 地址为:http://localhost:8080/springboot/1001/yky
Spring Boot 开发 RESTFul
@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;
}
请求冲突的问题
解决请求冲突
1、改路径
@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;
}
2、改请求方式
@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;
}
RESTful 原则
增 post 请求、删 delete 请求、改 put 请求、查 get 请求
请求路径不要出现动词
分页、排序等操作,不需要使用斜杠传参数
例如:
/boot/orders?page=1&sort=desc
一般传的参数不是数据库表的字段,可以不采用斜杠
SpringBoot 集成 Redis
1、添加redis的起步依赖
org.springframework.boot
spring-boot-starter-data-redis
2、配置核心配置文件
#redis的配置
spring.redis.port=6379
spring.redis.host=localhost
#密码:
#spring.redis.password=yky
3、使用springboot提供的操作redis的模板类
@Autowired
private RedisTemplate redisTemplate;
4、实体类序列化
实现Serializable接口
public class Student implements Serializable
启动redis服务
/**
* 通过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;
}