Spring boot 与 MybatisPlus 集成使用与拓展(来自凌晨二点得学习整理笔记 :一)

一、概述:

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

  • 特性:
    无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
    损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
    强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
    支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
    支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
    支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
    支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
    内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
    内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
    分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
    内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
    内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
二、创建Spring boot项目集成MP 常用方法
①:配置依赖文件:

spring.datasource.driver-class-	name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb_test?useSSL=true&useUnicode=true&serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=
spring.datasource.password=

#配置日志
mybatis-plus.configuration.log- impl=org.apache.ibatis.logging.stdout.StdOutImpl

说明:配置日志功能是为了在控制台显示出执行了哪些SQL 语句。(正式开发中一般时不配置得。。。)
②:在pom.xml 文件内加入所需要得依赖。
	<dependencies>	
    <!-- mysql数据库驱动依赖包 -->
    <dependency>
    <!-- mysql数据库驱动依赖包 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.22</version>
    </dependency>
    <!-- 引入LomBok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.2</version>
        <scope>provided</scope>
    </dependency>
    <!--阿里巴巴提供的JSON格式化工具-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.13</version>
    </dependency>
    <!--swagger2 依赖 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.7.0</version>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.0.5</version>
    </dependency>
③:创建实体类

在这里插入图片描述

④:创建dao层并继承实体类包:

在这里插入图片描述

⑤:测试常用方法
一、查询功能:
@SpringBootTest

class SpringbootStudyApplicationTests {		
@Autowired
private UserMapper userMapper;

@Test
void contextLoads() {
    //查询全部用户
    List<User> list = userMapper.selectList(null);
    list.forEach(System.out::println);
}
二、插入功能并实现主键自增:

注意点:
1、需要在数据库中开启主键自增
2、在对应数据中ID得实体类得主键加上注解:

@TableId(type = IdType.AUTO) //自增主键ID

//测试自动插入
@Test
public  void  InsertTest(){
    User user = new User();
    user.setName("志强学Spring");
    user.setAge(1);
    user.setEmail("2294506817@qq.com");
    user.setCreate_time(new Date());
    int result = userMapper.insert(user);
    if (result >0){
        System.out.println("插入成功!");
    }
    System.out.println(user);
}

在这里插入图片描述
查询数据库显示:
在这里插入图片描述

三、更新操作并实现时间自动填充功能:

①:在数据库加入创建时间、更新时间字段
②:在Java实体类中加入上面两个字段(类型为:java.util.Date)
③:加上注解:
在这里插入图片描述
④:编写处理器处理上面两个注解:’

注解:@Slf4j
@Component
在这里插入图片描述

四、乐观锁使用(拓展):

在这里插入图片描述

在数据库和内添加version字段:

sql 方式添加字段:
alter table user add version int;
为字段添加默认值:
ALTER TABLE user ADD versin int DEFAULT 1 COMMENT ‘版本号’;

在实体类中加入version字段:

在这里插入图片描述

添加后得结果:

在这里插入图片描述

乐观锁配置:

在这里插入图片描述

测试类编写:
/**
 * 乐观锁测试
 */
@Test
public  void  versionTest(){
    User user = userMapper.selectById(11L);
    user.setName("奔驰得小野马");
    user.setAge(8);
    user.setEmail("20878026333@qq.com");
   userMapper.updateById(user);
}

更新完成之后发现版本变为2 了。。。
在这里插入图片描述

五、查询操作:
根据ID 查询某位用户得信息:

在这里插入图片描述

根据ID查询多为用户得信息,封装为List

测试案例:
@Test
public void QueryIdBy2(){
List list = userMapper.selectBatchIds(Arrays.asList(1L,2L,3L,4L,5L));
for (User user : list) {
System.out.println(user);
}

  • 返回信息:
    在这里插入图片描述
根据条件查询用户信息,封装为Map
   /**
 * 根据Map查询多位用户得信息
 */
@Test
public void MapselectBatchIds(){
    HashMap<String, Object> map = new HashMap<>();
    map.put("name","贺老师");
    List<User> Users = userMapper.selectByMap(map);
    Users.forEach(System.out::println);
}
  • 返回信息:
    在这里插入图片描述
六、分页查询:

分页在网站使用得场景很多:

  • 1、原始得limit 进行分页
  • 2、pageHelper第三方插件
  • 3、Mp其实内置了分页插件
本次学习使用 Mp内置得分页插件:
  • 配置拦截器代码:
    在这里插入图片描述
  • 测试案例:

 /**
 *  分页查询
 */
@Test
public void PageTest(){
    Page page = new Page<>(0,5);
    userMapper.selectPage(page,null);
    page.getRecords().forEach(System.out::println);
     System.out.println(page.getTotal());
}
  • 返回结果
    在这里插入图片描述
七、删除操作:
/**
 *  删除操作
 */
@Test
public void DeleteTest(){
    userMapper.deleteById(10L);

}

注意点:传入得值时注意后面得L字符,因为实体类中id类型为Long类型得。

在这里插入图片描述
②:批量删除

/**
 * 根据id 批量删除用户!!
 */
@Test
public void DeleteTest2(){
    int i = userMapper.deleteBatchIds(Arrays.asList(7L, 5L));
    System.out.println("删除成功!!"+i);

}

在这里插入图片描述

逻辑删除操作学习:
  • 物理删除:直接从数据库中删除。
  • 逻辑删除:在数据库中没有被移除,而是通过一个变量让某条记录失效。
逻辑删除操作步骤:

1、在数据库表中增加deleted标记字段,并设置默认值为0。
在这里插入图片描述

2、在实体类中加入数据库字段。(integer类型)

@TableLogic //此注解代表逻辑删除
private  Integer deleted;

3、逻辑删除插件配置(配置类中加入)

@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}

4、在application.yml 中加入如下
#配置逻辑删除

mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

5、测试结果:

/**
 * 逻辑删除
 */
@Test
public void DeleteTest3(){
    int i = userMapper.deleteBatchIds(Arrays.asList(11L));
    System.out.println("删除成功!!"+i);
}
  • 返回结果:
    在这里插入图片描述

  • 查询数据库中得记录:有一个微妙得变化,11号id中得deleted字段变为了1,说明标记为逻辑删除了,但是我们在查询操作中依然能查询到此用户,但是会自动拼接为逻辑删除了!!
    在这里插入图片描述

  • 逻辑删除走得是更新操作!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值