栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis-Plus【通用Service篇】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis-Plus【通用Service篇】

MP-通用Service
  • 一、何为通用Service
  • 二、如何使用
    • 1、编写一个接口Service,继承IService接口
    • 2、编写一个实现类去实现接口并继承ServiceImpl类
  • 三、核心方法介绍
    • 1、Save 新增方法
    • 2、SaveOrUpdate 新增或修改方法
    • 3、Remove删除方法
    • 4、Update修改方法
    • 5、查询操作


一、何为通用Service

官方给出的解释:

通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,
1、泛型 T 为任意实体对象
2、建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
3、对象 Wrapper 为 条件构造器

二、如何使用 1、编写一个接口Service,继承IService接口
public interface IUserService extends IService{}

说明:泛型为要操作的实体表所对应的Java实体类

2、编写一个实现类去实现接口并继承ServiceImpl类
@Service("userService")
public class UserServiceImpl extends ServiceImpl implements IUserService{}
三、核心方法介绍 1、Save 新增方法
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection entityList);
// 插入(批量)
boolean saveBatch(Collection entityList, int batchSize);

参数说明:

类型参数名描述
Tentity实体对象
CollectionentityList实体对象集合
intbatchSize插入批次数量

案例演示:
1、save

@Test
	public void testSave() {
		long startTime = System.currentTimeMillis();
		iUserService.save(new User(16L,"veivy",22,"veivy@qq.com"));
		long endTime = System.currentTimeMillis();
		System.out.println("共计时:"+(endTime-startTime)+"毫秒");
	}

2、saveBatch

	@Test
	public void testSaveBatch() {
		List list = new ArrayList<>();
		for (Long i = 0L; i < 10; i++) {
			User user = new User();
			user.setAge((int) (18+i));
			user.setId(6+i);
			user.setName("test"+i);
			user.setEmail("test"+i+"@qq.com");
			list.add(user);
		}
		long stratTime = System.currentTimeMillis();
		
		iUserService.saveBatch(list);
		
		long endTime = System.currentTimeMillis();
		
		System.out.println("共计消耗:"+(endTime-stratTime)+"毫秒");
	}
2、SaveOrUpdate 新增或修改方法
// TableId 注解存在更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection entityList);
// 批量修改插入
boolean saveOrUpdateBatch(Collection entityList, int batchSize);

参数说明:

类型参数名描述
Tentity实体对象
WrapperupdateWrapper实体对象封装操作类 UpdateWrapper
CollectionentityList实体对象集合
intbatchSize插入批次数量

案例演示:
1、saveOrUpdate
该方法执行的流程是:先按照实体查询,如果查询的到记录,则修改,否则会新增

@Test
	public void TestSaveOrUpdateBatch() {
		List list=  new ArrayList<>();
		User user1 = new User(13L,"admin",22,"allprimary@vip.com");
		list.add(user1);
		User user2 = new User(2L,"nacos",19,"fairy@nacos.com");
		list.add(user2);
		User user3 = new User(9L,"lurra",34,"lurra@cc.com");
		list.add(user3);
		long startTime = System.currentTimeMillis();
		iUserService.saveOrUpdateBatch(list);
		long endTime = System.currentTimeMillis();
		System.out.println("批量修改共计时长"+(endTime-startTime)+"毫秒");
	}
3、Remove删除方法
// 根据 entity 条件,删除记录
boolean remove(Wrapper queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection idList);

参数说明:

类型参数名描述
WrapperqueryWrapper实体包装类 QueryWrapper
Serializableid主键 ID
MapcolumnMap表字段 map 对象
CollectionidList主键 ID 列表

案例演示:

@Test
	public void testRemove() {
		UpdateWrapper updateWrapper = new UpdateWrapper<>();
		// DELETE FROM user WHERe (name = ? AND age = ?)
		Map maps = new HashMap<>();
		maps.put("name", "张三");
		maps.put("age", 21);
		updateWrapper.allEq(maps);
		iUserService.remove(updateWrapper);
	}
	

	@Test
	public void testRemoveById() {
		boolean removeById = iUserService.removeById(15L);
	}


	@Test
	public void testRemoveByMap() {
		// DELETE FROM user WHERe name = ? AND age = ?
		Map map = new HashMap<>();
		map.put("name", "lurra");
		map.put("age", 23);
		
		boolean removeById = iUserService.removeByMap(map);
	}
4、Update修改方法
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection entityList, int batchSize);

参数说明:

类型参数名描述
Serializableid主键 ID
WrapperqueryWrapper实体对象封装操作类 QueryWrapper
booleanthrowEx有多个 result 是否抛出异常
Tentity实体对象
Functionmapper转换函数

案例演示:

@Test
	public void testUpdate() {
		User user = new User();
		user.setAge(18);
		
		User user2 = new User(13L,"lilei",35,"lilei@geogle.com");
		UpdateWrapper wrapper = new UpdateWrapper<>(user);
		
		iUserService.update(user2,wrapper);
	}
5、查询操作
	@Test
	public void testCount() {
		long count = iUserService.count();
		System.out.println(count);
	}
	
	
	@Test
	public void testQueryList() {
		List list = iUserService.list();
		list.forEach(System.out::println);
	}
	
	
	@Test
	public void testQueryList2() {
		List count = iUserService.list();
		count.forEach(System.out::println);
	}
	
	
	@Test
	public void testQueryList3() {
		QueryWrapper queryWrapper = new QueryWrapper();
		Map map = new HashMap<>();
		map.put("name", "lurra");
		map.put("age", 34);
		queryWrapper.allEq(map);
		List listObjs = iUserService.listObjs(queryWrapper);
		System.out.println(listObjs);
		System.out.println();
	}
	
	
	@Test
	public void testSelectPage() {
	    //创建条件构造器
	    QueryWrapper queryWrapper = new QueryWrapper();
	    queryWrapper.ge("age",15);// 大于等于15岁的
	    //创建分页对象
	    Page page = new Page(2,5);
	    //分页查询
	    IPage iPage = iUserService.page(page,queryWrapper);
	    System.out.println("当前页码:" + iPage.getCurrent());
	    System.out.println("每页显示数量:" + iPage.getSize());
	    System.out.println("总记录数:" + iPage.getTotal());
	    System.out.println("总页数:" + iPage.getPages());
	    List usersList = iPage.getRecords();//员工数据集合
	    for (User user : usersList) {
	        System.out.println(user);
	    }
	}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933320.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号