美文网首页
使用Mybatis-plus最佳实践

使用Mybatis-plus最佳实践

作者: 夜色001 | 来源:发表于2020-05-28 11:54 被阅读0次

mybatis-plus是对mybatis的增强,不是替代。从某种程度上来说,可以完全替代dao和mapper

1、mybatis-plus条件与sql的对应关系

mybatis-plus.png

2、mybatis-plus接口使用最佳实践

使用LambdaQueryWrapper可以避免实体和数据对应关系写错,推荐使用。

/**
 * Copyright (c) 2016-2019 人人开源 All rights reserved.
 * <p>
 * https://www.renren.io
 * <p>
 * 版权所有,侵权必究!
 */

package io.renren.modules.sys.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;
import io.renren.modules.sys.entity.SysUserEntity;
import io.renren.modules.sys.service.SysUserService;
import io.renren.util.BeanCopyUtil;
import io.renren.util.ContextUtil;
import io.renren.util.Utils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * BaseMapper方法测试
 *
 * @author Mark sunlightcs@gmail.com
 */
@RestController
@RequestMapping("/sys/user/test")
@Api(tags = "BaseMapper测试按理")
public class BaseMapperTestController extends AbstractController {
    @Autowired
    private SysUserService sysUserService;

    /**
     * 根据 ID 查询
     */
    @GetMapping("/{id}")
    @ApiOperation("根据 ID 查询")
    public R list(@PathVariable Long id) {
        SysUserEntity entity = sysUserService.getById(id);
        return R.ok().put("data", entity);
    }

    /**
     * 查询(根据ID 批量查询)
     */
    @PostMapping("/listByIds")
    @ApiOperation("查询(根据ID 批量查询)")
    public R listByIds(@RequestBody List<Long> ids) {
        Collection<SysUserEntity> list = sysUserService.listByIds(ids);
        return R.ok().put("data", list);
    }

    /**
     * 查询(根据 columnMap 条件)
     * todo
     */
    @PostMapping("/selectByMap")
    @ApiOperation("查询(根据 columnMap 条件): ①字段为数据库字段 ②精确匹配(包括日期型)")
    public R selectByMap(@RequestBody Map<String, Object> columnMap) {
        Collection<SysUserEntity> list = sysUserService.listByMap(columnMap);
        return R.ok().put("data", list);
    }

    /**
     * 根据 Wrapper,查询一条记录
     */
    @PostMapping("/getOne")
    @ApiOperation("根据 Wrapper,查询一条记录(不会抛异常)")
    public R getOne() {
        SysUserEntity list = sysUserService.getOne(null, false);
        return R.ok().put("data", list);
    }

    /**
     * 根据 Wrapper,查询一条记录
     */
    @PostMapping("/findOne")
    @ApiOperation("根据 Wrapper,查询一条记录(必须保证要查询出一条,否则会抛异常)")
    public R findOne() {
        SysUserEntity list = sysUserService.getOne(null);
        return R.ok().put("data", list);
    }

    /**
     * 根据 entity 条件,查询全部记录
     * <p>
     * 实体对象封装操作类(可以为 null)
     */
    @PostMapping("/selectList")
    @ApiOperation("根据 entity 条件,查询全部记录")
    public R selectList(@ApiParam(value = "多个字段like") @RequestParam(required = false) String keyword,
                        @ApiParam(value = "用户名称") @RequestParam(required = false) String username,
                        @ApiParam(value = "用户ID") @RequestParam(required = false) Long userId,
                        @ApiParam(value = "创建时间开始") @RequestParam(required = false) String beginTime,
                        @ApiParam(value = "创建时间结束") @RequestParam(required = false) String endTime,
                        @ApiParam(value = "排序字段:userId)") @RequestParam(required = false) String orderby,
                        @ApiParam(value = "升序、降序;默认升序") @RequestParam(required = false) Boolean asc) {
        Map<String, Object> params = ContextUtil.getParams();
        //初始化时间条件
        Utils.initTimeParam(params);
        //准备排序字段
        Map<String, String> orderMap = new HashMap<>();
        orderMap.put("userId", "user_id");
        String order = orderMap.get(orderby);
        //
        Collection<SysUserEntity> list = sysUserService.list(new QueryWrapper<SysUserEntity>()
                .like(!StringUtils.isEmpty(username), "username", username)
                .and(!StringUtils.isEmpty(keyword), consumer -> consumer.like("username", keyword).or().like("mobile", keyword))
                .eq(userId != null, "user_id", userId)
                .ge(!StringUtils.isEmpty(beginTime), "create_time", params.get("beginTime"))
                .le(!StringUtils.isEmpty(endTime), "create_time", params.get("endTime"))
                //排序
                .orderBy(!StringUtils.isEmpty(order), asc == null || asc == true, order)
        );
        return R.ok().put("data", list);
    }

    /**
     * 根据 Wrapper 条件,查询全部记录
     * <p>
     * 实体对象封装操作类(可以为 null)
     */
    @PostMapping("/getMap")
    @ApiOperation("根据 Wrapper 条件,查询全部记录")
    public R getMap() {
        Map<String, Object> map = sysUserService.getMap(new QueryWrapper<>());
        return R.ok().put("data", map);
    }

    /**
     * 根据 Wrapper 条件,查询一条记录
     * <p>
     * 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
     * * @param mapper       转换函数
     */
    @PostMapping("/getObject")
    @ApiOperation("根据 Wrapper 条件,查询全部记录")
    public R getObject() {
        List<Object> objects = sysUserService.listObjs();
        return R.ok().put("data", objects);
    }


    /**
     * 根据 Wrapper 条件,查询一条记录
     * <p>
     * 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.query.QueryWrapper}
     * * @param mapper       转换函数
     */
    @PostMapping("/lambdaQuery")
    @ApiOperation("根据 Wrapper 条件,lambdaQuery")
    public R lambdaQuery() {
        LambdaQueryWrapper<SysUserEntity> lambdaQuery = Wrappers.lambdaQuery();
        lambdaQuery.eq(SysUserEntity::getUserId, "1");
        List<Object> userList = sysUserService.getBaseMapper().selectObjs(lambdaQuery);
        userList.forEach(System.out::println);
        return R.ok().put("data", userList);
    }

    /**
     * 根据 entity 条件,查询全部记录
     * <p>
     * 实体对象封装操作类(可以为 null)
     */
    @PostMapping("/lambdaQueryList")
    @ApiOperation("根据 entity 条件,查询全部记录")
    public R lambdaQueryList(@ApiParam(value = "多个字段like") @RequestParam(required = false) String keyword,
                             @ApiParam(value = "用户名称") @RequestParam(required = false) String username,
                             @ApiParam(value = "用户ID") @RequestParam(required = false) Long userId,
                             @ApiParam(value = "创建时间开始") @RequestParam(required = false) String beginTime,
                             @ApiParam(value = "创建时间结束") @RequestParam(required = false) String endTime,
                             @ApiParam(value = "排序字段:userId)") @RequestParam(required = false) String orderby,
                             @ApiParam(value = "升序、降序;默认升序") @RequestParam(required = false) Boolean asc) {
        Map<String, Object> params = ContextUtil.getParams();
        //初始化时间条件
        Utils.initTimeParam(params);
        //准备排序字段
        Map<String, String> orderMap = new HashMap<>();
        orderMap.put("userId", "user_id");
        String order = orderMap.get(orderby);
        //
        LambdaQueryWrapper<SysUserEntity> lambdaQuery = Wrappers.lambdaQuery();
        lambdaQuery.like(!StringUtils.isEmpty(username), SysUserEntity::getUsername, username)
                .and(!StringUtils.isEmpty(keyword), consumer -> consumer.like(SysUserEntity::getUsername, keyword).or().like(SysUserEntity::getMobile, keyword))
                .eq(userId != null, SysUserEntity::getUserId, userId)
                .ge(!StringUtils.isEmpty(beginTime), SysUserEntity::getCreateTime, params.get("beginTime"))
                .le(!StringUtils.isEmpty(endTime), SysUserEntity::getCreateTime, params.get("endTime"))
                //排序
                .orderBy(!StringUtils.isEmpty(order), asc == null || asc == true, SysUserEntity::getUserId);
        List<SysUserEntity> list = sysUserService.list(lambdaQuery);
        return R.ok().put("data", list);
    }

    /**
     * 翻页查询
     * <p>
     */
    @PostMapping("/page")
    @ApiOperation("翻页查询")
    public R page() {
        Map<String, Object> params = ContextUtil.getParams();
        PageUtils pageUtils = sysUserService.queryPage(params);
        return R.ok().put("data", pageUtils);
    }

}

相关文章

  • 使用Mybatis-plus最佳实践

    mybatis-plus是对mybatis的增强,不是替代。从某种程度上来说,可以完全替代dao和mapper 1...

  • MyBatis-Plus——实践篇

    MyBatis-Plus——实践篇 未学习完 MyBatis-Plus (简称 MP)是一个 MyBatis的增强...

  • Guava Cache最佳实践

    项目中经常使用Guava Cache,根据经验总结了一些最佳实践。 示例代码 快速有效的使用示例如下: 最佳实践 ...

  • mybatis-plus的使用 ------ 进阶

    前言: 关于mybatis-plus的简介以及基本使用,我在《mybatis-plus的使用 ------ 入门》...

  • mybatis-plus偶见小bug

    最近使用mybatis-plus出现了一个小bug,版本是mybatis-plus:3.0.1 使用IServic...

  • RecycledViewPool使用

    Adapter最佳实践 使用RecycledViewPool来缓存item Recycled view pools...

  • databing 最佳实践

    2020.0921更,使用最新版databindingDatabing 最佳实践在使用Databing的项目中,存...

  • 2020-09-15-MyBatis-Plus使用入门

    MyBatis-Plus使用 创建SpringBoot项目导入mybatis-plus依赖 demo全部依赖 ym...

  • hbs使用最佳实践

    hbs是Express提供的默认视图引擎, 是对Handlerbars的封装. 具体用法参考下面的项目地址, 这里...

  • Windows 使用最佳实践

    安装 选择版本 Windows 7 或 Windows 8.1,选择的依据是根据你常用网银的兼容情况来定,可能的话...

网友评论

      本文标题:使用Mybatis-plus最佳实践

      本文链接:https://www.haomeiwen.com/subject/dyboahtx.html