Maven

下载maven并创建mvn_repository文件夹

image-20211115223735880

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

image-20211115224224581

image-20211115224156870

  1. <mirror> <!-- 阿里云镜像 -->
  2. <id>nexus-aliyun</id>
  3. <name>Nexus aliyun</name>
  4. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  5. <mirrorOf>central</mirrorOf>
  6. </mirror>

在系统变量中添加maven的路径

image-20211115223904768

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

image-20211115224017789

创建spring boot 项目

image-20211115224422172

image-20211115224609028

整合JUnit

在test目录下有一个与源码启动类同包名下的测试test类

其上有一个@SpringBootTest注解整合了JUnit,故可以在该类方法上直接添加的@Test注解进行测试

image-20211115141933086

  1. 如果不在同个包路径下,则可以在test目录下的有@SpringTest类上加上classes属性,显示指定引导类是谁
  2. 例如:
  3. @SpringBootTest(classes = Boot01Application.class)
  4. class Boot01ApplicationTests {
  5. ...
  6. }

在源码的启动类中存在@SpringBootApplication

image-20211115142143865

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

image-20211115142234807

整合Mybatis

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

image-20211115144708283

也可以手动在pom.xml插入依赖

  1. <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
  2. <dependency>
  3. <groupId>org.mybatis.spring.boot</groupId>
  4. <artifactId>mybatis-spring-boot-starter</artifactId>
  5. <version>1.3.2</version>
  6. </dependency>
  1. # 应用名称
  2. spring.application.name=boot_02
  3. #下面这些内容是为了让MyBatis映射
  4. #指定Mybatis的Mapper文件
  5. mybatis.mapper-locations=classpath:mappers/*xml
  6. #指定Mybatis的实体目录
  7. mybatis.type-aliases-package=com.example.boot_02.mybatis.entity
  8. # 数据库驱动:
  9. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  10. # 数据源名称
  11. spring.datasource.name=defaultDataSource
  12. # 数据库连接地址
  13. spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
  14. # 数据库用户名&密码:
  15. spring.datasource.username=root
  16. spring.datasource.password=root

查看数据库表格

image-20211115161648112

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

image-20211115150649268

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

image-20211115150827557

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

image-20211115150507689

整合Druid

  1. 在配置文件中添加
  2. #阿里druid连接池驱动配置信息
  3. spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

整合Mybatis-Plus

在pom导入maven的依赖

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-boot-starter</artifactId>
  4. <version>3.4.2</version>
  5. </dependency>

在有@Mapper注解的接口类中继承baseMapper<?>类,可以查看到BaseMapper类中定义了许多常用的实现方法,其中有对应的sql语句和数据库操作。

image-20211115155013370

创建yaml文件,在其中配置mp的一些基本配置属性

  1. mybatis-plus:
  2. global-config:
  3. db-config:
  4. table-prefix: tbl_ 表统一的前缀
  5. id-type: auto
  6. configuration:
  7. log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 使用标准的日志文件

开启mp的标准日志信息文件输出时,会把查询时的信息一并输出,可以省略输出到控制信息的步骤

注意:服务器上线运行的时候,需要把输出到控制台信息的操作关闭

image-20211115160551632

分页

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

image-20211115161035140

image-20211115161601064

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

image-20211115162411789

  1. @Configuration
  2. public class MPConfig {
  3. @Bean
  4. public MybatisPlusInterceptor mybatisPlusInterceptor(){
  5. //创建拦截器的壳
  6. MybatisPlusInterceptor mybatisPlusInterceptor=new MybatisPlusInterceptor();
  7. //添加分页拦截器
  8. mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
  9. return mybatisPlusInterceptor;
  10. }
  11. }

在test目录下使用junit进行测试

image-20211115162619955

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

image-20211115162932125

条件查询

  1. QueryWrapper<Book> qw = new QueryWrapper<>();
  2. qw.方法

QueryWrapper中封装了很多方法,like模糊,ne不等,eq等于….

image-20211115163746149

测试样例如下

image-20211115163705465

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

image-20211115165201535

业务层开发

基于CRUD

先查看目录文件

dao:数据库操作

domain:存储各种表对应是实体类

service:业务逻辑

image-20211115185412204

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

image-20211115185627914

image-20211115185710043

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

image-20211115185756182

基于mp

在mybatis-plus中不仅有dao层的BaseMapper<?>

还有IService<?>类,其中实现常见的业务方法

也可以在类下面追加的操作与原始操作通过名称区分,功能类似

插入save

删除remove,removeById,removeByIds,removeByMap,

修改update,updateById

查询getById,listByIds,listByMap,getOne,list

分页page

和部分lambda表达式,例如lambdaUpdate,lambdaQuery

例如

image-20211115190021767

实现类定义,除了引用接口,还需要继承MP的ServiceImpl<?,?>类

使用MyBatisPlus提供有业务层通用接口(ISerivce)与业务层通用实现类(ServiceImpl

在通用类基础上做功能重载或功能追加

注意重载时不要覆盖原始操作,避免原始提供的功能丢失

image-20211115191818181

  1. public class BookServiceImpl2 extends ServiceImpl<BookDao, Book> implements IBookService {
  2. }

表现层开发

表现层即controller层

@controller

  1. 在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面
  2. 若返回json等内容到页面,则需要加@ResponseBody注解
  3. 其中@ResponseBody,将java对象转为json格式的数据
  1. @CrossOrigin
  2. @Controller
  3. public class FileUploadController {
  4. //跳转到上传文件的页面
  5. @RequestMapping(value="/gouploadimg", method = RequestMethod.GET)
  6. public String goUploadImg() {
  7. //跳转到 templates 目录下的 uploadimg.html
  8. return "uploadimg";
  9. }
  10. //处理文件上传
  11. @RequestMapping(value="/testuploadimg", method = RequestMethod.POST)
  12. public @ResponseBody String uploadImg(@RequestParam("file") MultipartFile file,HttpServletRequest request) {
  13. System.out.println("调用文件上传方法");
  14. String contentType = file.getContentType();
  15. String fileName = file.getOriginalFilename();
  16. }

@RestController

  1. 相当于@Controller+@ResponseBody两个注解的结合,返回json数据,不需要在方法前面加@ResponseBody注解
  2. 不能返回jsp,html页面,视图解析器无法解析jsp,html页面

Restful风格

对于url跳转映射分为不同类型方法有不同的Mapping

例如查询@GetMapping,添加@PostMapping,删除@DeleteMapping,修改@PutMapping

路径匹配参数需要使用路径变量@PathVariable 注解

image-20211115194436217

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

image-20211115194836510

数据一致性处理

统一格式

由于前端通过url请求获取的信息渲染,为了方便,需要尽可能使用统一的格式

设置表现层返回结果的模型类

在controller包下创建utils工具包下存放模型类R,使用lombok为R类添加get,set,全参构造方法等

image-20211115222512204

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

image-20211115222748932

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

image-20211115222920128

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

image-20211115223431449