前提:
当我们在自己的项目中使用到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语句,如图:
2.找到合理的mapper.xml把上面的sql语句写到xml中,如图:
讲解:关于自己书写的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;
}
}