springboot
这几天学了一下springboot, 直接讲一下怎么迅速搭建一个项目
创建项目
在https://start.spring.io/中创建好一个项目, 选好依赖, (如果没有你想要的spring版本, 随便选一个即可, 之后在pom.xml中更改), 生成一个压缩包, 解压, 用IDEA打开. 我的spring boot版本是2.5.4
导入依赖
有的依赖在https://start.spring.io/中找不到, 可以在https://mvnrepository.com/中搜索, 然后在pom.xml增加依赖, 以下是常用的需要增加的依赖
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.3version>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.2.6version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
配置项目
然后写配置文件application.yml, 以下是一个常用配置
server:
port: 80
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?servierTimezone=UTC
username: root
password: root
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_
id-type: auto
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
实体类
根据你的数据库的表来创建, 有多少表就有多少个类; 表中有几个字段, 就有几个类变量
一般在domain目录下
package com.itheima.domain;
// lombok简化开发, 无需手写setter, getter, tostring...方法
// 实体类
import lombok.Data;
@Data
public class Book {
private Integer id;
private String type;
private String name;
private String description;
}
数据层
对数据库CRUD的函数
一般在dao目录下, 继承BaseMapper, 就自动有CRUD功能!
package com.itheima.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.itheima.domain.Book;
import org.apache.ibatis.annotations.Mapper;
// 用MP就可以自动增删改查, 不用写其他代码!!!
// 数据层
@Mapper
public interface BookDao extends BaseMapper {
}
分页
这里有一个特殊操作, 建立configMpConfig类
package com.itheima.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
// 必须有, 不然分页不行, 不用细究
@Configuration
public class MPConfig {
@Bean
public MybatisPlusInterceptor mpInterceptor() {
MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mpInterceptor;}}
条件查询
LambdaQueryWrapper对象了解一下
业务层
要实现的功能(登录, 注册...)
在service目录下写接口IBookService, 直接继承IService即可
package com.itheima.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.itheima.domain.Book;
// 就像数据层一样, 业务层也可以用mybatisplus提供的接口, 这样基本的增删改查...就不用自己写
public interface IBookService extends IService {
IPage getPage(int currentPage, int pageSize);
}
然后在service.impl目录下创建BookServiceImpl类实现接口, 直接继承ServiceImpl即可
package com.itheima.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.dao.BookDao;
import com.itheima.domain.Book;
import com.itheima.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
// 实现业务层的接口
@Service
public class BookServiceImpl extends ServiceImpl implements IBookService {
@Autowired
private BookDao bookDao;
@Override
public IPage getPage(int currentPage, int pageSize) {
Page page = new Page(currentPage,pageSize);
bookDao.selectPage(page,null);
return page;
}
}
当然自己在接口里定义方法, 然后在类里实现也是完全可以的
表现层
表现层就是进行路由, postman测试接口的时候, 就是直接和表现层的方法交互
表现层在controller目录下
package com.itheima.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.itheima.controller.utils.R;
import com.itheima.domain.Book;
import com.itheima.service.BookService;
import com.itheima.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
// 表现层
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private IBookService bookService;
@GetMapping
public R getAll() {
return new R(true, bookService.list());
}
@PostMapping
public R save(@RequestBody Book book) { //请求体参数@RequestBody
return new R(bookService.save(book));
}
@PutMapping
public R update(@RequestBody Book book) {
return new R(bookService.updateById(book));
}
@GetMapping("{id}")
public R delete(@PathVariable Integer id) {// 表示从路径中获取的变量
return new R(bookService.removeById(id));
}
@GetMapping("{id}")
public R getById(@PathVariable Integer id) {
return new R(true,bookService.getById(id));
}
@GetMapping("{currentPage}/{pageSize}")
public R getPage(@PathVariable int currentPage,@PathVariable int pageSize) {
return new R(true, bookService.getPage(currentPage,pageSize));
}
}
注意这里的url名, 是restful风格
还有注意这里的R类, 实现在controller.utils里, 是为了统一返回给前端的格式
package com.itheima.controller.utils;
import lombok.Data;
// 用一个R对象, 统一向前端的返回值
// {"flag":"true","data":...}
@Data
public class R {
private Boolean flag;
private Object data;
public R(){}
public R(Boolean flag) {
this.flag=flag;
}
public R(Boolean flag, Object data) {
this.flag=flag;
this.data=data;
}
}
测试
不表
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果