Maven
下载maven并创建mvn_repository文件夹

进入maven的conf目录下的setting.xml文件中添加阿里云镜像


<mirror> <!-- 阿里云镜像 --><id>nexus-aliyun</id><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror>
在系统变量中添加maven的路径

进入到idea设置界面修改maven配置的路径

创建spring boot 项目


整合JUnit
在test目录下有一个与源码启动类同包名下的测试test类
其上有一个@SpringBootTest注解整合了JUnit,故可以在该类方法上直接添加的@Test注解进行测试

如果不在同个包路径下,则可以在test目录下的有@SpringTest类上加上classes属性,显示指定引导类是谁例如:@SpringBootTest(classes = Boot01Application.class)class Boot01ApplicationTests {...}
在源码的启动类中存在@SpringBootApplication

在@SpringBootApplication注解中有@SpringBootConfiguration,标识为配置类,即在容器中

整合Mybatis
勾选MySQL Driver和mybatis framake,进入到配置文件即可看见

也可以手动在pom.xml插入依赖
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency>
# 应用名称spring.application.name=boot_02#下面这些内容是为了让MyBatis映射#指定Mybatis的Mapper文件mybatis.mapper-locations=classpath:mappers/*xml#指定Mybatis的实体目录mybatis.type-aliases-package=com.example.boot_02.mybatis.entity# 数据库驱动:spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# 数据源名称spring.datasource.name=defaultDataSource# 数据库连接地址spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC# 数据库用户名&密码:spring.datasource.username=rootspring.datasource.password=root
查看数据库表格

创建service层domain实体类,此处采用lombok的@Data创建get和set方法,用@ToString创建类的goString方法

创建dao层操作数据接口类,在dao层接口类上加上@Mapper注解,表示这是一个mybatis操作数据库的映射代理对象,能被容器识别,具体方法可以在类函数声明的上面采用对应的注解进行操作,例如@Select,@Insert,@Update

最后在test目录下,使用jUnit进行测试,可在控制台上看见输出

整合Druid
在配置文件中添加#阿里druid连接池驱动配置信息spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
整合Mybatis-Plus
在pom导入maven的依赖
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency>
在有@Mapper注解的接口类中继承baseMapper<?>类,可以查看到BaseMapper类中定义了许多常用的实现方法,其中有对应的sql语句和数据库操作。

创建yaml文件,在其中配置mp的一些基本配置属性
mybatis-plus:global-config:db-config:table-prefix: tbl_ 表统一的前缀id-type: autoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 使用标准的日志文件
开启mp的标准日志信息文件输出时,会把查询时的信息一并输出,可以省略输出到控制信息的步骤
注意:服务器上线运行的时候,需要把输出到控制台信息的操作关闭

分页
在mp中有selectPage分页的操作,其中第一个参数是E继承IPage类,其中IPage类的实现类是Page类,故第一个参数可以是Page


想要在mp实现分页,还需要配置拦截器

@Configurationpublic class MPConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){//创建拦截器的壳MybatisPlusInterceptor mybatisPlusInterceptor=new MybatisPlusInterceptor();//添加分页拦截器mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mybatisPlusInterceptor;}}
在test目录下使用junit进行测试

可以使用IPage对象查看页相关的信息,Current当前页号,Size当前页大小,Total总有多少数据,Records总共有多少页

条件查询
QueryWrapper<Book> qw = new QueryWrapper<>();qw.方法
QueryWrapper中封装了很多方法,like模糊,ne不等,eq等于….

测试样例如下

还有一种查询条件 LambdaQueryWrapper,支持使用Lambda表达式进行匹配,但是匹配的参数不能为null,若为空,则会直接把字符串null带入到sql语句中,所以需要判断是否为空。

业务层开发
基于CRUD
先查看目录文件
dao:数据库操作
domain:存储各种表对应是实体类
service:业务逻辑

业务层开发一般分为定义接口和实现接口的impl类


需要区分dao层注入和业务层service注入的对象实体

基于mp
在mybatis-plus中不仅有dao层的BaseMapper<?>类
还有IService<?>类,其中实现常见的业务方法
也可以在类下面追加的操作与原始操作通过名称区分,功能类似
插入save
删除remove,removeById,removeByIds,removeByMap,
修改update,updateById
查询getById,listByIds,listByMap,getOne,list
分页page
和部分lambda表达式,例如lambdaUpdate,lambdaQuery
例如

实现类定义,除了引用接口,还需要继承MP的ServiceImpl<?,?>类
使用MyBatisPlus提供有业务层通用接口(ISerivce)与业务层通用实现类(ServiceImpl
在通用类基础上做功能重载或功能追加
注意重载时不要覆盖原始操作,避免原始提供的功能丢失

public class BookServiceImpl2 extends ServiceImpl<BookDao, Book> implements IBookService {}
表现层开发
表现层即controller层
@controller
- 在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面
- 若返回json等内容到页面,则需要加@ResponseBody注解
- 其中@ResponseBody,将java对象转为json格式的数据
@CrossOrigin@Controllerpublic class FileUploadController {//跳转到上传文件的页面@RequestMapping(value="/gouploadimg", method = RequestMethod.GET)public String goUploadImg() {//跳转到 templates 目录下的 uploadimg.htmlreturn "uploadimg";}//处理文件上传@RequestMapping(value="/testuploadimg", method = RequestMethod.POST)public @ResponseBody String uploadImg(@RequestParam("file") MultipartFile file,HttpServletRequest request) {System.out.println("调用文件上传方法");String contentType = file.getContentType();String fileName = file.getOriginalFilename();}
@RestController
- 相当于@Controller+@ResponseBody两个注解的结合,返回json数据,不需要在方法前面加@ResponseBody注解
- 不能返回jsp,html页面,视图解析器无法解析jsp,html页面
Restful风格
对于url跳转映射分为不同类型方法有不同的Mapping
例如查询@GetMapping,添加@PostMapping,删除@DeleteMapping,修改@PutMapping
路径匹配参数需要使用路径变量@PathVariable 注解

其中多个参数用@PathVariable可以使用字符串标识,但必须与url的参数名相同

数据一致性处理
统一格式
由于前端通过url请求获取的信息渲染,为了方便,需要尽可能使用统一的格式
设置表现层返回结果的模型类
在controller包下创建utils工具包下存放模型类R,使用lombok为R类添加get,set,全参构造方法等

注意,测试时需要把原先的BookController类移除容器,即是删掉@RestController注解

在BookController2类,使之变成新的表现层类,把返回的json对象换成模型类R

测试在浏览器中查询接口返回类型效果如下:

