关于使用springBoot+mybatis plus后,自己在mapper.xml里书写符合自己需求的sql语句

前提:

当我们在自己的项目中使用到springBoot+mybatis plus时,mybatis plus 会为我们提供基本的CRUD(增删改查)(Create插入、Retrieve读取、Update更新、Delete删除),分别对应mybatis plus提供的insert(单条插入)/insertBatch(批量插入)...、selectById(根据id查询)/selectBatchIds(根据集合(id)批量查询)/selectCount(返回查询结果集)...、update(更新)...、delete(删除)...
这里mybatis plus 提供的对数据库的基本操作基本能够满足一般的使用。
问题来了,如果遇到数据量很大的增删改查时,mybatis plus提供的方法可能会遇到查询效率很慢的情况,这个时候,就需要在mapper.xml里自己去定义sql语句了。

书写自己的sql语句步骤如下:
1.在本地连接数据库的软件中的查询编辑器里书写合理的sql语句,如图:

关于使用springBoot+mybatis plus后,自己在mapper.xml里书写符合自己需求的sql语句_第1张图片
a.jpg

2.找到合理的mapper.xml把上面的sql语句写到xml中,如图:
关于使用springBoot+mybatis plus后,自己在mapper.xml里书写符合自己需求的sql语句_第2张图片
b.jpg





    
    
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
    
    


讲解:关于自己书写的sql语句就不多说了(自己知道sql语句的返回结果数据格式就行);然后是resultType:这里用于接收sql的查询结果,如果sql语句查询结果是像我上面的那样,用一个整型或者长整型接收即可;如果返回的结果是一个表格类型,则自行在entity里定义一个实体类对应表格里的每一条数据即可;
然后是关于${ew.sqlSegment} :mybatis plus 提供的条件构造器


   

方便我们书写灵活的查询条件
然后下一个步骤是在我们的Dao层进行相关书写,如下:

package com.binshi.store.modules.car.dao;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.binshi.store.modules.car.entity.UserOrderEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;


/**
 * @author holly7
 * @date 2019-05-31 20:50:54
 */
public interface UserOrderDao extends BaseMapper {

    Long queryUserCount(@Param("ew") Wrapper wrapper);
    
}

注意:这里的queryUserCount方法名称必须和mapper.xml里面的id保持一致。
最后,我们去调用它(queryUserCount)就好了

然后就是关于怎么调用Dao里面的queryUserCount了:
书写service层:

package com.binshi.store.modules.car.service;
import com.baomidou.mybatisplus.service.IService;
import com.binshi.store.modules.car.entity.UserOrderEntity;



import java.util.Map;

/**
 * @author holly7
 * @date 2019-05-31 20:50:54
 */
public interface UserOrderService extends IService {
    
    Long queryUserCount(Mapparams);
    
}

书写serviceImp层:

package com.binshi.store.modules.car.service.impl;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.binshi.common.utils.common.Constant;
import com.binshi.store.modules.car.dao.UserOrderDao;
import com.binshi.store.modules.car.entity.*;
import com.binshi.store.modules.car.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import java.math.BigDecimal;


/**
 * @author holly7
 * @date 2019-05-31 20:50:54
 */
@Service("userOrderService")
public class UserOrderServiceImpl extends ServiceImpl implements UserOrderService {
    
     @Override
    public Long queryUserCount(Map params) {
        Wrapper wrapper = getWrapper(params);
        return this.baseMapper.queryUserCount(wrapper);
    }

    private Wrapper getWrapper(Map params) {
        Wrapper wrapper = new EntityWrapper<>();
        if (params.containsKey("startTime")) {
            String startTime = (String) params.get("startTime");
            if (StringUtil.hasValue(startTime)) {
                wrapper = wrapper.andNew().ge("create_time", startTime + " 00:00:00");
            }
        }
        if (params.containsKey("endTime")) {
            String endTime = (String) params.get("endTime");
            if (StringUtil.hasValue(endTime)) {
                wrapper = wrapper.andNew().le("create_time", endTime + " 23:59:59");
            }
        }
        return wrapper;
    }
}

最后在controller层进行调用,如下:

@RestController
@RequestMapping("user")
public class UserOrderController {
    @Autowired
    private UserOrderService userOrderService;
     
    @PostMapping("/check/count")
    public Long checkCount(){
        Map params = new HashMap<>();
        params.put("startTime",startPayTime);
        params.put("endTime",endPayTime);
        long count = this.userOrderService.queryUserCount(params);
        return count;
      }
}

你可能感兴趣的:(关于使用springBoot+mybatis plus后,自己在mapper.xml里书写符合自己需求的sql语句)