MyBatis-Plus通用Service篇
一、何为通用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<User>{}
说明:泛型为要操作的实体表所对应的Java实体类
2、编写一个实现类去实现接口并继承ServiceImpl类
@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserMapper , User> implements IUserService{}
三、核心方法介绍
1、Save 新增方法
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);
参数说明:
类型 | 参数名 | 描述 |
---|---|---|
T | entity | 实体对象 |
Collection | entityList | 实体对象集合 |
int | batchSize | 插入批次数量 |
案例演示:
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<User> 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<T> updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
参数说明:
类型 | 参数名 | 描述 |
---|---|---|
T | entity | 实体对象 |
Wrapper | updateWrapper | 实体对象封装操作类 UpdateWrapper |
Collection | entityList | 实体对象集合 |
int | batchSize | 插入批次数量 |
案例演示:
1、saveOrUpdate
该方法执行的流程是:先按照实体查询,如果查询的到记录,则修改,否则会新增
@Test
public void TestSaveOrUpdateBatch() {
List<User> 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<T> queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);
参数说明:
类型 | 参数名 | 描述 |
---|---|---|
Wrapper | queryWrapper | 实体包装类 QueryWrapper |
Serializable | id | 主键 ID |
Map<String, Object> | columnMap | 表字段 map 对象 |
Collection<? extends Serializable> | idList | 主键 ID 列表 |
案例演示:
@Test
public void testRemove() {
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
// DELETE FROM user WHERE (name = ? AND age = ?)
Map<String, Object> maps = new HashMap<>();
maps.put("name", "张三");
maps.put("age", 21);
updateWrapper.allEq(maps);
iUserService.remove(updateWrapper);
}
/**
* 根据id删除
*/
@Test
public void testRemoveById() {
boolean removeById = iUserService.removeById(15L);
}
/**
* 根据map条件删除
*/
@Test
public void testRemoveByMap() {
// DELETE FROM user WHERE name = ? AND age = ?
Map<String, Object> map = new HashMap<>();
map.put("name", "lurra");
map.put("age", 23);
boolean removeById = iUserService.removeByMap(map);
}
4、Update修改方法
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper<T> updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList, int batchSize);
参数说明:
类型 | 参数名 | 描述 |
---|---|---|
Serializable | id | 主键 ID |
Wrapper | queryWrapper | 实体对象封装操作类 QueryWrapper |
boolean | throwEx | 有多个 result 是否抛出异常 |
T | entity | 实体对象 |
Function<? super Object, V> | mapper | 转换函数 |
案例演示:
@Test
public void testUpdate() {
User user = new User();
user.setAge(18);
User user2 = new User(13L,"lilei",35,"lilei@geogle.com");
UpdateWrapper<User> wrapper = new UpdateWrapper<>(user);
iUserService.update(user2,wrapper);
}
5、查询操作
/**
* 查询数据库的数据条数 SELECT COUNT( * ) FROM user
*/
@Test
public void testCount() {
long count = iUserService.count();
System.out.println(count);
}
/**
* 查询数据库的数据条数 SELECT COUNT( * ) FROM user
*/
@Test
public void testQueryList() {
List<User> list = iUserService.list();
list.forEach(System.out::println);
}
/**
* 查询数据库的所有数据 SELECT id,name,age,email FROM user
*/
@Test
public void testQueryList2() {
List<User> count = iUserService.list();
count.forEach(System.out::println);
}
/**
* 查询数据库的所有数据 SELECT id,name,age,email FROM user
*/
@Test
public void testQueryList3() {
QueryWrapper queryWrapper = new QueryWrapper<User>();
Map<String, Object> map = new HashMap<>();
map.put("name", "lurra");
map.put("age", 34);
queryWrapper.allEq(map);
List<User> listObjs = iUserService.listObjs(queryWrapper);
System.out.println(listObjs);
System.out.println();
}
/**
* 查询分页数据
*/
@Test
public void testSelectPage() {
//创建条件构造器
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.ge("age",15);// 大于等于15岁的
//创建分页对象
Page<User> page = new Page<User>(2,5);
//分页查询
IPage<User> 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<User> usersList = iPage.getRecords();//员工数据集合
for (User user : usersList) {
System.out.println(user);
}
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfhkgke
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01