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);
}
运转
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);
}
表
运转
运转后表
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);
}
表
运转
运转后表
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);
}
表
运转
运转后表
改
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);
}
表
运转
运转后表
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);
}
表
运转
运转后表
查
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