• mybatis-plus学习


    官网:https://mp.baomidou.com/guide/

    优点:支持lambda表达式,内置分页插件,支持多种数据库,强大的CRUD 操作损耗小无入侵 等等等等。。

    pom:

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus</artifactId>
        <version>3.3.0</version>
    </dependency>
    • 常用注解:

      @TableName("sys_user")//表名注解
      @TableId(value = "id", type = IdType.AUTO) //主键注解
      @TableField("name")// 字段注解(非主键)
      @TableField(exist = false)// 不是数据库表字段
      private String remark;

     

    • Service:

    public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    }
    public interface UserService extends IService<User> {
    }
    public interface UserMapper extends BaseMapper<User> {

    }
    • 条件查询

      例子:参考:https://mp.baomidou.com/guide/wrapper.html#abstractwrapper

      方法一:

         QueryWrapper<User> wrapper = new QueryWrapper<>();
            wrapper.like("name","一").lt("age",60);// name LIKE '%一%' AND age<60
            this.baseMapper.selectList(wrapper);

    like ("name","hehe") 相当于 like '%hehe%'

    likeRight("name","王") 相当于 like '王%'

    between("age",10,15) 相当于 between 10 and 15

    isNotNull("name") 相当于 name is not null

    or() 相当于 or

    ge("age",25) 相当于 >=;lt <;le <=;gt >;eq =

    orderByAsc("id") 相当于 order by id asc

    orderByDesc("id") 相当于 order by id desc

    inSql("id", "select id from table where id < 3") 相当于 in 

          ... ...

    调用数据库函数:

    apply("date_format(dateColumn,'%Y-%m-%d') = '2008-08-08'")

    嵌套:

    // name like '张%' and (age <40 or email  in not null )

    and (i-> i.lt("age",40).or().isNotNull("email"))

    // (age <40 or email  in not null ) and name like '张%'

    nested(i -> i.lt("age",40).or().isNotNull("email")).likeRight("name","张")

    // age in (1,2,3)

    in("age",Arrays.asList(1,2,3));

    // Limit 1 如果想在最后面加一个limit 1

    last(" limit 1 ")

    // 不列全字段 

    select("id", "name", "age")

    // 分组

    groupBy("groupId")



    方法二:实体作为条件

         User user = new User();
            user.setName("张三");
            QueryWrapper<User> wrapper = new QueryWrapper<>(user);
            this.baseMapper.selectList(wrapper);

       map作为条件

         Map<String,Object> map = new HashMap<>();
            map.put("name","张三");
            map.put("age",25);
            QueryWrapper<User> wrapper = new QueryWrapper<>();
            wrapper.allEq(map);
            this.baseMapper.selectList(wrapper);
            Map<String,Object> map = new HashMap<>();
            map.put("name","张三");
            map.put("age",null);
            QueryWrapper<User> wrapper = new QueryWrapper<>();
            wrapper.allEq(map,false);// 没有 略    
    View Code

    lambda

         LambdaQueryWrapper<User> lambdaQueryWrapper = Wrappers.lambdaQuery();
            lambdaQueryWrapper.like(User::getName,"张").lt(User::getDeptId,5);
            List<User> userList = this.baseMapper.selectList(lambdaQueryWrapper);

    自定义(自己写mapper)

       @Select("select * from 表 ${ew.customSqlSegment}")
        List<User> selectAll(@Param(Constants.WRAPPER) Wrapper<User> wrapper);

    分页

    自定义
    IPage <User> selectUserPage(Page<User>page,@Param(Constants.WRAPPER) Wrapper<User> wrapper);

    更新操作:

           UpdateWrapper<User> uw= new UpdateWrapper<>();
        uw.eq("name","张三").eq("age",25);
        User user = new User(); 
        user.setEmail("xx123@xx.com"); 
        int rows= this.baseMapper.update(user,uw);     
        UpdateWrapper<User> uw= new UpdateWrapper<>();
            uw.eq("name","张三").eq("age",25).set("age",26);
            int rows= this.baseMapper.update(null,uw);

    批量修改插入

    default boolean saveOrUpdateBatch(Collection<T> entityList) {
    return this.saveOrUpdateBatch(entityList, 1000);
    }
            User user1= new User();
            user1.setName("张三");
            User user2 = new User();
            user2.setName("李四");
            this.saveOrUpdateBatch(Arrays.asList(user1,user2));    

    删除操作

    id删除:

        int deleteById(Serializable id);

    条件删除:

      int deleteByMap(@Param("cm") Map<String, Object> columnMap);

           Map<String,Object> map = new HashMap<>();
            map.put("name","张三");
            map.put("age",25);
            this.baseMapper.deleteByMap(map); 
    View Code
      int delete(@Param("ew") Wrapper<T> wrapper);
    LambdaQueryWrapper<User> lambdaQuery =Wrappers.lambdaQuery();
            lambdaQuery.eq(User::getName,"张三").or().gt(User::getDeptId,5);
            this.baseMapper.delete(lambdaQuery);
    View Code

    批量删除:

    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
    this.baseMapper.deleteBatchIds(Arrays.asList(1L,2L));
    View Code
    ###
    1.如果更新的时候这个字段可为空null也要更新 可以这样
      @TableField(value = "pic_class",strategy= FieldStrategy.IGNORED)
        private String picClass;// 分类


      

       

      




     
     
  • 相关阅读:
    浅谈JS的数组遍历方法
    浅谈JavaScript函数重载
    随机数的组合问题(JavaScript描述)
    如何使用百度bae部署web项目
    阿里前端笔试总结
    有趣的JavaScript隐式类型转换
    CSS如何实现”右部宽度固定,左部自适应“的布局
    Nor Flash的理论性能
    python argparse:命令行参数解析详解
    rwcheck:为嵌入式设备设计的读写压测工具
  • 原文地址:https://www.cnblogs.com/DarGi2019/p/12187125.html
Copyright © 2020-2023  润新知