zoukankan      html  css  js  c++  java
  • Mybatis Plus AR模式/主键策略/通用Service

    一、AR模式

    AR模式简单的说就是直接用实体操作数据库

    需要两步,首先继承 Model 类

    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.extension.activerecord.Model;
    import lombok.Data;
    import lombok.EqualsAndHashCode;
    
    import java.util.Date;
    
    @Data
    //@EqualsAndHashCode(callSuper = false)
    public class User extends Model<User> {
    }

    然后需要存在可以使用的Mapper

    public interface UserMapper extends BaseMapper<User> {
    }

    满足条件后可以使用实体类进行数据库操作,我认为使用 Mapper 就足够了

    @SpringBootTest
    public class ARTest {
        @Test
        public void insert() {
            User user = new User();
            user.setName("章草");
            user.setAge(24);
            user.setEmail("ZC@baomidou.com");
            user.setManagerId(1087982257332887553L);
            user.setCreateTime(new Date());
            boolean flag = user.insert();
            System.out.println(flag);
        }
    
        @Test
        public void selectById() {
            User user = new User();
            User user1 = user.selectById(1352099043086524417L);
            System.out.println(user == user1);// false
            System.out.println(user1);
        }
    
        @Test
        public void selectById2() {
            User user = new User();
            user.setId(1352099043086524417L);
            User user1 = user.selectById();
            System.out.println(user == user1);// false
            System.out.println(user1);
        }
    
        @Test
        public void updateById() {
            User user = new User();
            user.setId(1352099043086524417L);
            user.setName("章草草");
            boolean flag = user.updateById();
            System.out.println(flag);
        }
    
        @Test
        public void deleteById() {
            User user = new User();
            user.setId(1352099043086524417L);
            boolean flag = user.deleteById();
            System.out.println(flag);
        }
    
        @Test
        public void insertOrUpdate() {
            User user = new User();
            user.setName("张华");
            user.setAge(24);
            user.setEmail("zh@baomidou.com");
            user.setManagerId(1087982257332887553L);
            user.setCreateTime(new Date());
            // 没有设置主键,则插入到数据库
            // 如果设置了主键,首先根据主键查询记录是否存在,存在则更新,不存在则新增
            boolean flag = user.insertOrUpdate();
            System.out.println(flag);
        }
    }

    二、MP支持的主键策略

    1、局部主键策略

    @TableId(type= IdType.ID_WORKER)
    private Long id;

    官网介绍

    2、全局主键策略

    # Mybatis Plus配置
    mybatis-plus:
      mapper-locations: classpath*:mapper/**/*.xml
      global-config:
        db-config:
          id-type: id_worker

    三、基本配置

    官网介绍,内容很多,官网中文描述很详细

    四、通用Service

    在实际开发中,service 可以继承 ServiceImpl,来对 service 功能进行扩展,其中的批量操作给我们带来很大的方便

    package com.mp.service.impl;
    
    import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
    import com.mp.dao.UserMapper;
    import com.mp.entity.User;
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserServiceImpl extends ServiceImpl<UserMapper, User> {
    }

    使用lambda的代码演示

    @SpringBootTest
    public class ServiceTest {
        @Autowired
        private UserServiceImpl userServiceImpl;
    
        @Test
        public void chain(){
            List<User> list = userServiceImpl.lambdaQuery().gt(User::getAge, 25).like(User::getName, "雨").list();
            list.forEach(System.out::println);
        }
    
        @Test
        public void chain1(){
            boolean update = userServiceImpl.lambdaUpdate().eq(User::getAge, 25).set(User::getAge, 26).update();
            System.out.println(update);
        }
    
        @Test
        public void chain2(){
            boolean remove = userServiceImpl.lambdaUpdate().eq(User::getAge, 25).remove();
            System.out.println(remove);
        }
    }
  • 相关阅读:
    [置顶] Guava学习之Lists
    Study notes for B-tree and R-tree
    uva 620 Cellular Structure
    [置顶] 程序员面试之道(《程序员面试笔试宝典》)之看着别人手拿大把的offer,不淡定了怎么办?
    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
    有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。 请描述实现算法,并指出算法复杂度
    C# 未能加载文件或程序集“MySQLDriverCS..." 错误解决
    LA 3942 Remember the Word(前缀树&树上DP)
    原根-快速求解一个数的原根
    线程初步了解
  • 原文地址:https://www.cnblogs.com/jwen1994/p/14307689.html
Copyright © 2011-2022 走看看