MyBatis-Plus实现数据库的curd(增删改查)操作

MyBatis-Plus

MyBatis-Plus实现数据库的curd(增删改查)操作

1、mp是什么

mp入门

1、创建数据库 创建数据库表

2、创建工程 springBoot

3、在项目中引入mp和相关依赖 统一2.2.1版本

4、配置数据库信息 applicatiion.properties

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

5、编写核心代码

2、mp实现添加 修改 删除 查询

//修改数据
    @Test
    public void testUpdate(){
        //修改数据根据id修改 UPDATE user SET name=? WHERE id=? 
        User user = new User();
        user.setId(1383696365028196354L);
        user.setName("lucymaiy");
        int i = userMapper.updateById(user);
        System.out.println(i);
    }

    //添加数据
    @Test
    public void testAdd(){
        User user = new User();
        user.setName("lucy");
        user.setAge(20);
        user.setEmail("1234@qq.com");
        userMapper.insert(user);
    }

	//查询所有数据
    @Test
    public void findAll() {
        List<User> users = userMapper.selectList(null);
        System.out.println(users);
    }

3、mp自动填充 乐观锁

自动填充

  1. 准备工作

    1. 在表里添加两个datetime类型的字段 create_time、update_time

    2. 在表对应的实体类中添加对应属性

          private Date createTime;    //create_time
      
          private Date updateTime;    //update_time
      
  2. 在实体类要进行自动填充属性添加注解

     @TableField(fill = FieldFill.INSERT)
        private Date createTime;    //create_time
        @TableField(fill = FieldFill.INSERT_UPDATE)
        private Date updateTime;    //update_time
    
  3. 创建一个类,实现接口的两个方法,一个方法添加的时候执行,一个方法修改的时候执行,设置添加什么值

    package com.atguigu.demomptest.handler;
    
    import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    import org.apache.ibatis.reflection.MetaObject;
    import org.springframework.stereotype.Component;
    
    import java.util.Date;
    
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
    
        //mp执行添加操作时,这个方法执行
        @Override
        public void insertFill(MetaObject metaObject) {
            this.setFieldValByName("createTime",new Date(),metaObject);
            this.setFieldValByName("updateTime",new Date(),metaObject);
        }
    
        //mp执行修改操作时,这个方法执行
        @Override
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("updateTime",new Date(),metaObject);
        }
    }
    
    

乐观锁

1、在表中添加int型新字段version,在表对应的实体类中添加版本号属性

2、在实体类里进行版本号操作的属性上面加上一个注解@Version

@Version
private Integer version;

3、配置乐观锁插件

@Configuration
@MapperScan("com.atguigu.demomptest.mapper")
public class MybatisPlusConfig {
    /**
     * 乐观锁插件
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
}

4、测试乐观锁

//测试乐观锁
    @Test
    public void testOptimisticLocker(){
        //1、根据id查询
        User user = userMapper.selectById(1383958729568858114L);
        //2、修改
        user.setName("张三");
        userMapper.updateById(user);
    }

查询

1、通过id批量查询
//多个id批量查询
    @Test
    public void testSelectId(){
        List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
        System.out.println(users);
    }
2、简单条件查询
//简单条件查询
    @Test
    public void testSelect2(){
        Map<String, Object> columnMap = new HashMap<>();
        columnMap.put("name","jack");
        columnMap.put("age",20);
        List<User> users = userMapper.selectByMap(columnMap);
        System.out.println(users);
    }
3、分页查询

1、配置分页插件

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

2、编写分页的代码

 //分页查询
    @Test
    public void testSelectPage(){
        Page<User> page = new Page(1,3);    //参数1:当前页  参数2:每页记录数
        Page<User> userPage = userMapper.selectPage(page, null);
        //返回对象得到分页所有数据
        long pages = userPage.getPages();   //总页数
        long current = userPage.getCurrent();   //当前页
        List<User> records = userPage.getRecords(); //查询数据集合
        long total = userPage.getTotal();   //总记录数
        boolean hasNext = userPage.hasNext();   //判断是否有下一页
        boolean hasPrevious = userPage.hasPrevious();  //判断是否有上一页

        System.out.println(pages);
        System.out.println(current);
        System.out.println(records);
        System.out.println(total);
        System.out.println(hasNext);
        System.out.println(hasPrevious);
    }

4、mp删除与逻辑删除

1、通过id删除
//根据id删除
    @Test
    public void testDeleteId(){
        int rows = userMapper.deleteById(1383976766296563714L);
        System.out.println(rows);
    }
2、批量删除
//批量删除
    @Test
    public void testDeleteBatchIds(){
        int rows = userMapper.deleteBatchIds(Arrays.asList(2, 3, 4));
        System.out.println(rows);
    }
3、简单条件删除
//简单条件删除@Testpublic void testDeleteByMap(){    Map<String, Object> columnMap = new HashMap<>();    columnMap.put("name","jack");    columnMap.put("age",20);    int rows = userMapper.deleteByMap(columnMap);    System.out.println(rows);}
4、逻辑删除

1、在表中添加int型字段deleted,对应实体类添加属性,作为逻辑删除标志

2、在实体类逻辑删除属性上面添加注解@TableLogic

5、条件构造器和常用接口

//mp复杂查询操作
    @Test
    public void testSelect(){
        //创建条件查询构造器
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        //ge大于等于  gt大于  le小于等于  lt小于  isNull  isNotNull 
//        queryWrapper.ge("age",21);

        //eq等于  ne不等于
//        queryWrapper.eq("name","Tom");

        //between在..范围   notBetween不在..范围
//        queryWrapper.between("age",24,28);

        //like模糊查询  notLike  likeLeft %张   likeRight 张%
//        queryWrapper.like("name","张");

        //orderBy  orderByDesc降序排列  orderByAsc升序排列
//        queryWrapper.orderByDesc("id");
        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println(users);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值