个人技术博客--Springboot中MybatisPlus的使用

这个作业属于哪个课程 2021春软件工程实践|S班
这个作业要求在哪里 作业要求的链接
这个作业的目标 个人技术总结
其他参考文献 本人所有博客

个人技术总结--Springboot中MybatisPlus的使用

第一部分 技术概述

  • 使用情景及学习原因:Mybatis需要在xml中通过编写SQL语句实现数据库的操作,对于一个博客网站来说其实不需要那么灵活的实现方式,所用到的操作也大多是增删改查罢了,因此就选用集成Mybatis的MybatisPlus来简化开发。使用MybatisPlus可以进行快速的开发。
  • 技术实现难点:需要进行详细的配置,整合到SpringBoot中,除此之外MybatisPlus是对Mybatis的增强工具,封装好了一些CRUD的方法,不需要再编写xml文件,因此在实现难点上是相对减少的。

第二部分 技术详述

具体实现建议看博客:Springboot整合MybatisPlus

  1. 在pom.xml文件中添加依赖

    <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.3.2</version>
    </dependency>         
    
  2. 配置数据库

    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://47.100.89.20:3306/salt_hub?serverTimezone=Etc/GMT-8&useUnicode=true&characterEncoding=utf-8&useSSL=true
        username: root
        password: lw091211
        # 数据源其他配置
        initialSize: 5 #初始化时池中建立的物理连接个数。
        minIdle: 3
        maxActive: 20  #最大的可活跃的连接池数量
        maxWait: 60000  #获取连接时最大等待时间,单位毫秒,超过连接就会失效。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
        timeBetweenEvictionRunsMillis: 60000 #连接回收器的运行周期时间,时间到了清理池中空闲的连接,testWhileIdle根据这个判断
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL #用来检测连接是否有效的sql,要求是一个查询语句。
        testWhileIdle: true #建议配置为true,不影响性能,并且保证安全性。 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis, 执行validationQuery检测连接是否有效。
        testOnBorrow: false #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。设置为false
        testOnReturn: false #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能,设置为flase
        poolPreparedStatements: true #是否缓存preparedStatement,也就是PSCache。
        maxPoolPreparedStatementPerConnectionSize: 200 #池中能够缓冲的preparedStatements语句数量
        filters: stat #属性类型的字符串,通过别名的方式配置扩展插件, 监控统计用的stat 日志用log4j 防御sql注入:wall
    
  3. 添加扫描Mapper的注解

    在启动类上添加@MapperScan("com.team_five.salthub.dao")的注解,""内的内容是mapper文件所在。

  4. 编写Dao文件

    package com.team_five.salthub.dao;
    
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.team_five.salthub.model.Account;
    
    public interface AccountDao extends BaseMapper<Account> {
    
    }
    
  5. 编写Mapper文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.team_five.salthub.dao.AccountDao">
    
    </mapper>
    
    

    可以看到,Dao文件和Mapper文件并不需要具体的去实现,只需要定义即可。

  6. 在serviceImpl中使用@Autowired注解注入Dao,并在serviceImpl中调用dao的封装好的方法进行开发即可。

    @Autowired
    	private NoticeDao noticeDao;
    
    @Override
    	public void publishNotice(Notice notice) {
    		noticeDao.insert(notice);
    	}
    

第三部分 技术使用中遇到的问题和解决过程

  • 遇到的问题:开启Mybatis的原生缓存导致分页失效,首次调用分页接口后,继续调用该接口返回的数据都与第一次查询的一样,并且iPage对象的total属性是0.

  • 解决过程:一开始并不知道是开启缓存导致的,于是去百度,发现是缓存问题,只需要将cache-enabled改为false就可以了。

    mybatis-plus:
        configuration:
            map-underscore-to-camel-case: true
            cache-enabled: false
    

第四部分 总结

个人技术也是团队的一部分,只有完善了个人技术,才能准时地完成团队的任务,不至于拖累团队的进度,并且在开发的过程中也不能停下对自己的技术的学习,因为随着开发的进行,势必会对新技术有需求,例如博客需要加一个上传文件的功能,需要加一个邮箱验证,这都是需要马上学习的。

  1. MybatisPlus整合到Spring只需要配置pom.xml以及在application.yml文件中进行配置即可。
  2. MybatisPlus并不需要在Dao和Mapper文件中实现XML代码,只需用@Autowired注解注入到service中即可。MP已经封装好了基本的CRUD方法,极大简化了开发流程。
  3. 对于多表关联查询的支持较差,需要手动编写SQL代码。

总体来说MybatisPlus的开发相对Mybatis来说要更为简洁。

posted @ 2021-06-28 15:44  t0p1Crayon  阅读(201)  评论(2编辑  收藏  举报