Mybatis-plus的BaseMapper接口中办法简略示例

参阅

segmentfault.com/a/119000002…

配置控制台打印SQL句子

在 application.yml中加入:

logging:
    level:
mapper包的路径
      com.cj.springboot20221110.mapper: debug

BaseMapper

接口

/**
	该内容来自CSDN @weixin_33958585
	https://blog.csdn.net/weixin_33958585/article/details/91517402
 * Mapper 承继该接口后,无需编写 mapper.xml 文件,即可取得CRUD功能
 * 这个 Mapper 支持 id 泛型
 * @author hubin
 * @Date 2016-01-23
   */
   public interface BaseMapper<T> {
   /**
    * 刺进一条记载
    * @param entity
    * 实体目标
    * @return int
      */
      Integer insert(T entity);
   /**
    * 依据 ID 删去
    * @param id
    * 主键ID
    * @return int
      */
      Integer deleteById(Serializable id);
   /**
    * 依据 columnMap 条件,删去记载
    * @param columnMap
    * 表字段 map 目标
    * @return int
      */
      Integer deleteByMap(@Param("cm") Map<String, Object> columnMap);
   /**
    * 依据 entity 条件,删去记载
    * @param wrapper
    * 实体目标封装操作类(可认为 null)
    * @return int
      */
      Integer delete(@Param("ew") Wrapper<T> wrapper);
   /**
    * 删去(依据ID 批量删去)
    * @param idList
    * 主键ID列表
    * @return int
      */
      Integer deleteBatchIds(List<? extends Serializable> idList);
   /**
    * 依据 ID 修改
    * @param entity
    * 实体目标
    * @return int
      */
      Integer updateById(T entity);
   /**
    * 依据 whereEntity 条件,更新记载
    * @param entity
    * 实体目标
    * @param wrapper
    * 实体目标封装操作类(可认为 null)
    * @return
      */
      Integer update(@Param("et") T entity, @Param("ew") Wrapper<T> wrapper);
   /**
    * 依据 ID 查询
    * @param id
    * 主键ID
    * @return T
      */
      T selectById(Serializable id);
   /**
    * 查询(依据ID 批量查询)
    * @param idList
    * 主键ID列表
    * @return List<T>
      */
      List<T> selectBatchIds(List<? extends Serializable> idList);
   /**
    * 查询(依据 columnMap 条件)
    * @param columnMap
    * 表字段 map 目标
    * @return List<T>
      */
      List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
   /**
    * 依据 entity 条件,查询一条记载
    * @param entity
    * 实体目标
    * @return T
      */
      T selectOne(@Param("ew") T entity);
   /**
    * 依据 Wrapper 条件,查询总记载数
    * @param wrapper
    * 实体目标
    * @return int
      */
      Integer selectCount(@Param("ew") Wrapper<T> wrapper);
   /**
    * 依据 entity 条件,查询悉数记载
    * @param wrapper
    * 实体目标封装操作类(可认为 null)
    * @return List<T>
      */
      List<T> selectList(@Param("ew") Wrapper<T> wrapper);
   /**
    * 依据 Wrapper 条件,查询悉数记载
    * @param wrapper
    * 实体目标封装操作类(可认为 null)
    * @return List<T>
      */
      List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> wrapper);
   /**
    * 依据 Wrapper 条件,查询悉数记载
    * @param wrapper
    * 实体目标封装操作类(可认为 null)
    * @return List<Object>
      */
      List<Object> selectObjs(@Param("ew") Wrapper<T> wrapper);
   /** 
    * 用法:(new RowBounds(offset, limit), ew);
    * 依据 entity 条件,查询悉数记载(并翻页)
    * @param rowBounds
    * 分页查询条件(可认为 RowBounds.DEFAULT)
    * @param wrapper
    * 实体目标封装操作类(可认为 null)
    * @return List<T>
      */
      List<T> selectPage(RowBounds rowBounds, @Param("ew") Wrapper<T> wrapper);
   /** -- 不常用,
    * 依据 Wrapper 条件,查询悉数记载(并翻页)
    * @param rowBounds
    * 分页查询条件(可认为 RowBounds.DEFAULT)
    * @param wrapper
    * 实体目标封装操作类
    * @return List<Map<String, Object>>
      */
      List<Map<String, Object>> selectMapsPage(RowBounds rowBounds, @Param("ew") Wrapper<T> wrapper);
      }

int insert(T entity);

/**
 * mybatis-plus测验: insert(T entity)
 * 刺进数据
 */
@Test
public void insertTest() {
    Dept dept = new Dept()
            .setDeptName("开发部")
        	.setDeptNum("10")
        	.setLocation("LA")
            .setPerson(78);
    deptMapper.insert(dept);
}

deleteById

/**
 * mybatis-plus测验: deleteById(Serializable id)
 * 依据ID删去记载
 * 运用 Serializable 作为参数类型的原因:
 *      提高程序的兼容性和抽象性
 *          承继结构:
 *                Byte, Double, Float, Integer, Long, Short 都承继了抽象类 Number
 *
 *               而mybatis内部大量运用了反射署理,反射署理的类型有必要是接口,因此沿着Number
 *               往上走咱们可以看到Number完成了Serializable接口
 */
@Test
public void deleteByIdTest() {
    int i = deptMapper.deleteById(3);
    System.out.println("受影响行数: " + i);
}

运转

Mybatis-plus中BaseMapper接口所有方法简单示例

deleteByMap

/**
     * mybatis-plus测验: int deleteByMap(@Param("cm") Map<String, Object> columnMap);
     * 删去字段是 Map调集的 Key 且值为 Map 调集的 Value 那条记载
     */
    @Test
    public void deleteByMapTest(){
        HashMap<String, Object> map = new HashMap<>();
        map.put("dept_name","销售部");
        int i = deptMapper.deleteByMap(map);
        System.out.println("受影响行数: " + i);
    }

Mybatis-plus中BaseMapper接口所有方法简单示例

运转

Mybatis-plus中BaseMapper接口所有方法简单示例

运转后表

Mybatis-plus中BaseMapper接口所有方法简单示例

delete

Wrapper(条件结构器)的运用: www.jianshu.com/p/c5537559a…

/**
 * mybatis-plus测验: 删去
 * Wrapper 条件结构器
 * int delete(@Param("ew") Wrapper<T> wrapper);
 */
@Test
public void deleteTest(){
    QueryWrapper<Dept> wrapper = new QueryWrapper<>();
    //删去部分区域为 LA 且部分名称为 研发部的记载
    wrapper.and(new Consumer<QueryWrapper<Dept>>() {
        @Override
        public void accept(QueryWrapper<Dept> deptQueryWrapper) {
            deptQueryWrapper.eq("location","LA").eq("dept_name","研发部");
        }
    });
    int i = deptMapper.delete(wrapper);
    System.out.println("受影响行数: " + i);
}

Mybatis-plus中BaseMapper接口所有方法简单示例

运转

Mybatis-plus中BaseMapper接口所有方法简单示例

运转后表

Mybatis-plus中BaseMapper接口所有方法简单示例

lambda形式

@Test
public void deleteTest(){
    QueryWrapper<Dept> wrapper = new QueryWrapper<>();
    //删去部分区域为 LA 且部分名称为 研发部的记载
    wrapper.and(deptQueryWrapper -> deptQueryWrapper.eq("location","LA").eq("dept_name","研发部"));
    int i = deptMapper.delete(wrapper);
    System.out.println("受影响行数: " + i);
}

deleteBatchIds

/**
 * mybatis-plus测验: 删去
 * int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
 * 依据ID批量删去, 传入List调集
 */
@Test
public void deleteBatchIdsTest(){
    //删去 ID 为 7 和 8 的记载
    ArrayList<Integer> ids = new ArrayList<>();
    Collections.addAll(ids,7,8);
    int i = deptMapper.deleteBatchIds(ids);
    System.out.println("受影响行数: " + i);
}

Mybatis-plus中BaseMapper接口所有方法简单示例

运转

Mybatis-plus中BaseMapper接口所有方法简单示例

运转后表

Mybatis-plus中BaseMapper接口所有方法简单示例

updateById

/**
 * mybatis-plus测验: 修改
 * int updateById(@Param("et") T entity);
 */
@Test
public void updateByIdTest(){
    //将产品部的区域改为上海
    Dept dept = new Dept()
            .setId(5)
            .setLocation("上海");
    int i = deptMapper.updateById(dept);
}

Mybatis-plus中BaseMapper接口所有方法简单示例

运转

Mybatis-plus中BaseMapper接口所有方法简单示例

运转后表

Mybatis-plus中BaseMapper接口所有方法简单示例

update

 /**
     * mybatis-plus测验: 修改
     * int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
     * 添加条件的修改
     */
    @Test
    public void updateTest(){
        // 将 部分人数(person) <= 20的部分 区域(location) 修改为北京 
        UpdateWrapper<Dept> wrapper = new UpdateWrapper<>();
        wrapper.le("person",20);
        Dept dept = new Dept().setLocation("北京");
        int i = deptMapper.update(dept, wrapper);
        System.out.println("受影响行数: " + i);
    }

Mybatis-plus中BaseMapper接口所有方法简单示例

运转

Mybatis-plus中BaseMapper接口所有方法简单示例

运转后表

Mybatis-plus中BaseMapper接口所有方法简单示例

selectById

/**
 * mybatis-plus测验: 查询
 * T selectById(Serializable id);
 * 依据id查询记载
 */
@Test
public void selectByIdTest(){
    Dept dept = deptMapper.selectById(1);
    System.out.println(dept);
}

SQL句子

SELECT id,dept_name AS deptName,person,dept_num AS deptNum,location FROM tb_dept WHERE id=1

查询成果

Dept(id=1, deptName=开发部, deptNum=10, location=LA, person=78)

selectBatchIds

/**
 * mybatis-plus测验: 查询
 * List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
 * 依据id调集查询
 * 查询id为1和5的数据
 */
@Test
public void selectBatchIdsTest(){
    ArrayList<Integer> ids = new ArrayList<>();
    Collections.addAll(ids,1,5);
    List<Dept> depts = deptMapper.selectBatchIds(ids);
    depts.forEach(System.out::println);
}

SQL句子

 SELECT id,dept_name AS deptName,person,dept_num AS deptNum,location FROM tb_dept WHERE id IN ( 1 , 5 )

查询成果

Dept(id=1, deptName=开发部, deptNum=10, location=LA, person=78)
Dept(id=5, deptName=产品部, deptNum=20, location=北京, person=20)

selectByMap

/**
 * mybatis-plus测验: 查询
 * List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
 * 依据map调集查询
 * 查询 location = 北京, 且 person = 20 的部分
 */
@Test
public void selectByMapTest(){
    HashMap<String, Object> map = new HashMap<>();
    map.put("location","北京");
    map.put("person",20);
    List<Dept> depts = deptMapper.selectByMap(map);
    depts.forEach(System.out::println);
}

SQL句子

SELECT id,dept_name AS deptName,person,dept_num AS deptNum,location FROM tb_dept WHERE person = 20 AND location = '北京'

查询成果

Dept(id=5, deptName=产品部, deptNum=20, location=北京, person=20)

selectOne

如果运用该办法查询出多条记载会抛出异常

/**
 * mybatis-plus测验: 查询
 * T selectOne(@Param("ew") Wrapper<T> queryWrapper);
 */
@Test
public void selectOneTest(){
    QueryWrapper<Dept> wrapper = new QueryWrapper<>();
    //eq 表明 '='
    wrapper.eq("location","LA");
    Dept dept = deptMapper.selectOne(wrapper);
    System.out.println(dept);
}

SQL句子

SELECT id,dept_name AS deptName,person,dept_num AS deptNum,location FROM tb_dept WHERE (location = 'LA')

查询成果

Dept(id=1, deptName=开发部, deptNum=10, location=LA, person=78)

selectCount

/**
 * mybatis-plus测验: 查询
 * Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
 * 查询契合 Wrapper 条件的记载条数
 */
@Test
public void selectCountTest(){
    QueryWrapper<Dept> wrapper = new QueryWrapper<>();
    //eq 表明 '='
    wrapper.eq("location","北京");
    Integer count = deptMapper.selectCount(wrapper);
    System.out.println(count);
}

SQL句子

SELECT COUNT( 1 ) FROM tb_dept WHERE (location = '北京')

selectList

/**
 * mybatis-plus测验: 查询
 * List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
 * 查询契合 Wrapper 条件的记载
 */
@Test
public void selectListTest(){
    QueryWrapper<Dept> wrapper = new QueryWrapper<>();
    //eq 表明 '='
    wrapper.eq("location","北京");
    List<Dept> depts = deptMapper.selectList(wrapper);
    depts.forEach(System.out::println);
}

SQL句子

SELECT id,dept_name AS deptName,person,dept_num AS deptNum,location FROM tb_dept WHERE (location = '北京')

查询成果

Dept(id=5, deptName=产品部, deptNum=20, location=北京, person=20)
Dept(id=9, deptName=销售部, deptNum=30, location=北京, person=15)

selectMaps

/**
 * mybatis-plus测验: 查询
 * List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
 * 查询契合 Wrapper 条件的记载条数, 以list<map>形式回来
 */
@Test
public void selectMapsTest(){
    QueryWrapper<Dept> wrapper = new QueryWrapper<>();
    //eq 表明 '='
    wrapper.eq("location","北京");
    List<Map<String, Object>> mapList = deptMapper.selectMaps(wrapper);
}

SQL句子

SELECT id,dept_name AS deptName,person,dept_num AS deptNum,location FROM tb_dept WHERE (location = '北京')

查询成果

{deptName=产品部, person=20, deptNum=20, location=北京, id=5}
{deptName=销售部, person=15, deptNum=30, location=北京, id=9}

selectObjs

只回来第一个字段的值

/**
 * mybatis-plus测验: 查询
 * List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
 * 只回来第一个字段的值
 */
@Test
public void selectObjsTest(){
    QueryWrapper<Dept> wrapper = new QueryWrapper<>();
    wrapper.eq("location","北京");
    List<Object> objects = deptMapper.selectObjs(wrapper);
    objects.forEach(System.out::println);
}

SQL句子

SELECT id,dept_name AS deptName,person,dept_num AS deptNum,location FROM tb_dept WHERE (location = '北京')

查询成果

5
9

selectPage

selectMapsPage