mybatis-plus

目录

一、mybatis-plus环境搭建

二、了解mybatis-plus提供的各种增删改查方法

三、自定义方法

四、mysql乐观锁

五、逻辑删除


一、mybatis-plus环境搭建

springboot+mybatis-plus

1、mybatis-plus-boot-starter

2、application.yml 配置文件

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/yan9
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
  type-aliases-package: com.hl.mybatisplus.entity
  mapper-locations: classpath*:/com/hl/mybatisplus/mapper/*.xml
logging:
  level:
    com.hl.mybatisplus.mapper: debug

3、创建Service接口

extends IService<Message>

创建ServiceImpl实现类

extends ServiceImpl<MessageMapper, Message>
    implements MessageService

创建Mapper接口

extends BaseMapper<Message>

4、使用mybatis-plus提供的增删改查方法

package com.hl.mybatisplus;
​
import com.hl.mybatisplus.entity.Message;
import com.hl.mybatisplus.mapper.MessageMapper;
import com.hl.mybatisplus.service.MessageService;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
​
import java.util.List;
​
@SpringBootTest
@MapperScan(basePackages = "com.hl.mybatisplus.mapper")
class MybatisPlusApplicationTests {
    @Autowired
    private MessageService messageService;
    @Autowired
    private MessageMapper messageMapper;
​
    @Test
    void contextLoads() {
        List<Message> list = messageService.list();
        System.out.println(list);
​
        List<Message> list2 = messageMapper.selectList(null);
        System.out.println(list);
    }
​
}

二、了解mybatis-plus提供的各种增删改查方法

package com.hl.mybatisplus;
​
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.hl.mybatisplus.entity.Message;
import com.hl.mybatisplus.mapper.MessageMapper;
import com.hl.mybatisplus.service.MessageService;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
​
import java.util.*;
​
@SpringBootTest
@MapperScan(basePackages = "com.hl.mybatisplus.mapper")
class MybatisPlusApplicationTests {
    @Autowired
    private MessageService messageService;
    @Autowired
    private MessageMapper messageMapper;
​
    @Test
    void contextLoads() {
        List<Message> list = messageService.list();
        System.out.println(list);
​
        List<Message> list2 = messageMapper.selectList(null);
        System.out.println(list2);
    }
    @Test
    public void save(){
        Message message = new Message();
        message.setMsg("hello ...1");
        message.setStatus(0);
        message.setUserId(1);
        message.setType1("异常类型通知1");
        message.setCreateTime(new Date());
​
        Message message2 = new Message();
        message2.setMsg("hello ...2");
        message2.setStatus(0);
        message2.setUserId(1);
        message2.setType1("异常类型通知2");
        message2.setCreateTime(new Date());
​
//        boolean flag = messageService.save(message);
​
        List<Message> list = new ArrayList<>();
        list.add(message);
        list.add(message2);
        boolean flag = messageService.saveBatch(list);
        System.out.println("新增状态:"+flag);
    }
​
    @Test
    public void saveOrUpdate(){
        Message message = new Message();
        message.setMsg("hello ...4");
        message.setStatus(0);
        message.setUserId(1);
        message.setType1("异常类型通知4");
        message.setCreateTime(new Date());
        message.setId(8);
        //id存在为更新  id不存在为新增
        boolean flag = messageService.saveOrUpdate(message);
//        messageService.saveOrUpdateBatch(null);
        System.out.println("新增或者更新:"+flag);
    }
​
    @Test
    public void delete(){
        messageService.removeById(-1971798015);
//        messageService.removeByIds(null);
    }
​
    @Test
    public void query(){
        QueryWrapper wraper = new QueryWrapper();
        wraper.ge("id",2);
        wraper.like("type","通知");
        wraper.orderByDesc("id");
//        wraper.select("id","type");
        wraper.select("type","count(id)");
        wraper.groupBy("type");
        messageService.list(wraper);
​
        Map map = new HashMap();
        map.put("id",1);
        map.put("type",2);
        messageService.listByMap(map);
​
        QueryWrapper wraper2 = new QueryWrapper();
        wraper2.eq("id",1);
        Message message = messageService.getOne(wraper2);
​
​
    }
​
}

三、自定义方法

public interface MessageMapper extends BaseMapper<Message> {
    @Select("select * from message where msg like concat('%',msg,'%')")
    public List<Message> queryByMsg(String msg);
​
    public Message findById(Integer id);
}
<?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.hl.mybatisplus.mapper.MessageMapper">
​
    <resultMap id="BaseResultMap" type="com.hl.mybatisplus.entity.Message">
            <id property="id" column="id" />
            <result property="type" column="type" />
            <result property="msg" column="msg" />
            <result property="createTime" column="create_time" />
            <result property="userId" column="user_id" />
            <result property="status" column="status" />
    </resultMap>
​
    <sql id="Base_Column_List">
        id,type,msg,create_time,user_id,status
    </sql>
​
    <!-- public Message findById(Integer id);-->
    <select id="findById" resultType="Message">
        select * from message where id = #{id}
    </select>
</mapper>

四、mysql乐观锁

1、数据库表中添加版本号字段 version

2、该字段默认初始值为0

3、实体类中添加版本号字段 并使用@Version注解

/*
版本号字段  用于乐观锁
 */
@Version
private Integer version;

4、执行更新操作 version自动加1

@Test
public void version(){
    Message message = messageMapper.findById(1);
    message.setCreateTime(new Date());
    message.setMsg("hello 11111111 ");
    messageMapper.updateById(message);
}

5、测试乐观锁

使用数据时不加锁,当更新时,判断版本号是否一致,一致了,更新,不一致不更新。

加断点,手动更新version测试。

package com.hl.mybatisplus;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@MapperScan(basePackages = "com.hl.mybatisplus.mapper")
public class MybatisPlusApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class, args);
    }

    @Bean
    public MybatisPlusInterceptor myBatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); // 乐观锁插件
        return interceptor;
    }
}

五、逻辑删除

物理删除:直接从数据库表中删除数据

逻辑删除:更新状态位为删除状态,并非真的删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值