MybatisPlus的CRUD入门操作

默认环境springboot,2.2.1.RELEASE,默认你已经完成了主启动类,并扫描了mapper包
1,首先配置日志,我们好查看sql执行

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

2,编写实体类

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

3,编写Mapper接口UserMapper.java

public interface UserMapper extends BaseMapper<User> {
    
}

一,插入操作

@RunWith(SpringRunner.class)
@SpringBootTest
public class CRUDTests {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testInsert(){

        User user = new User();
        user.setName("Helen");
        user.setAge(18);
        user.setEmail("55317332@qq.com");

        int result = userMapper.insert(user);
        System.out.println(result); //影响的行数
        System.out.println(user); //id自动回填
    }
}

二,重点,主键策略
(1)ID_WORKER
MyBatis-Plus默认的主键策略是:ID_WORKER 全局唯一ID
2)自增策略
要想主键自增需要配置如下主键策略
1,需要在创建数据表的时候设置主键自增
2,实体字段中配置 @TableId(type = IdType.AUTO)
3,最后注意:数据空中id要设置自增。

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

要想影响所有实体的配置,可以设置全局主键配置

#全局设置主键生成策略
mybatis-plus.global-config.db-config.id-type=auto

其它主键策略:分析 IdType 源码可知

@Getter
public enum IdType {
    /**
     * 数据库ID自增
     */
    AUTO(0),
    /**
     * 该类型为未设置主键类型
     */
    NONE(1),
    /**
     * 用户输入ID
     * 该类型可以通过自己注册自动填充插件进行填充
     */
    INPUT(2),

    /* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */
    /**
     * 全局唯一ID (idWorker)
     */
    ID_WORKER(3),
    /**
     * 全局唯一ID (UUID)
     */
    UUID(4),
    /**
     * 字符串全局唯一ID (idWorker 的字符串表示)
     */
    ID_WORKER_STR(5);

    private int key;

    IdType(int key) {
        this.key = key;
    }
}

三、update

1、根据Id更新操作

@Test
    public void testUpdateById(){

        User user = new User();
        user.setId(1L);
        user.setAge(28);

        int result = userMapper.updateById(user);
        System.out.println(result);

    }

2、自动填充
项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。
我们可以使用MyBatis Plus的自动填充功能,完成这些字段的赋值工作:

(1)数据库表中添加自动填充字段
在User表中添加datetime类型的新的字段 create_time、update_time

(2)实体上添加注解

@Data
public class User {

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

    private String name;

    private Integer age;

    private String email;

    //表示在插入时进行自动填充
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

(3)实现元对象处理器接口

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);

    @Override
    public void insertFill(MetaObject metaObject) {
        LOGGER.info("start insert fill ....");
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        LOGGER.info("start update fill ....");
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

四、select基本查询,比较简单

 /**
     * 测试基本查询
     */
    @Test
    public void testBaseSelect(){
        //根据id查询记录
        /*User user = userMapper.selectById(1328284132802895878l);
        System.out.println(user);*/

        //通过多个id批量查询
        /*List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
        users.forEach(user -> System.out.println(user));*/

        //简单条件查询
        /*HashMap<String, Object> map = new HashMap<>();
        map.put("name", "销户");
        map.put("age", 33);
        List<User> users1 = userMapper.selectByMap(map);
        users1.forEach(user -> System.out.println(user));*/

        //分页查询
        //IPage<User> page = new Page<>(1, 3); //如果写成接口类型引用则没有page.hasNext(),page.hasPrevious()这两个方法
        Page<User> page = new Page<>(1, 3);
        //IPage<User> iPage = userMapper.selectPage(page, null); //这是第一种写法
        //这是第二种写法,查询过后,值就自动赋值给page对象了
        userMapper.selectPage(page, null);
        List<User> records = page.getRecords();
        records.forEach(System.out::println);
        System.out.println(page.getCurrent());
        System.out.println(page.getPages());
        System.out.println(page.getSize());
        System.out.println(page.getTotal());
        System.out.println(page.hasNext());
        System.out.println(page.hasPrevious());

    }

在上面的分页查询上我们要注意以下几点:
1,创建配置类(MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能)
此时可以删除主类中的 @MapperScan 扫描注解

/**
 * 分页插件
 */
@Bean
public PaginationInterceptor paginationInterceptor() {
    return new PaginationInterceptor();
}

注意:map中的key对应的是数据库中的列名。例如数据库user_id,实体类是userId,这时map的key需要填写user_id

五、条件查询

/**
     * 实现条件查询
     */
    @Test
    public void selectByInfo(){
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //(1)  eq、ne
        //wrapper.eq("name", "让帝");
        //(2)  ge、gt、le、lt
        //wrapper.ge("age", 33).like("name", "小");
        //(3)  like
        //wrapper.ge("age", 33).like("name", "小");
        //(4)  between
        //wrapper.between("age", 18, 21);
        //(5)  orderByDesc
        //wrapper.orderByDesc("age");
        //(6)  select
        wrapper.select("id", "name", "age", "email").ge("age", 33).like("name", "小");

        List<User> users = userMapper.selectList(wrapper);
        users.forEach(user -> System.out.println(user));
    }

六、delete

/**
     * 测试删除
     */
    @Test
    public void testDelete(){
        //根据id删除记录
        //userMapper.deleteById(1328284132802895881l)

        //批量删除
        //userMapper.deleteBatchIds(Arrays.asList(1328284132802895881l, 1328284132802895880l));

        //简单的条件查询删除
        HashMap<String, Object> map = new HashMap<>();
        map.put("id", 1328284132802895883l);
        userMapper.deleteByMap(map);
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值