自己做影视会员网站,跑业务用什么软件找客户,网站的基本要素,centos装wordpress一、介绍 在MybatisPlus框架中#xff0c;IService接口扮演着重要的角色。作为一个通用的服务接口#xff0c;IService定义了一系列方法#xff0c;包括查询、插入、更新、删除等。这些方法的定义使得在服务层进行数据库操作变得更为便捷和高效。
IService 接口是一个泛型接…一、介绍 在MybatisPlus框架中IService接口扮演着重要的角色。作为一个通用的服务接口IService定义了一系列方法包括查询、插入、更新、删除等。这些方法的定义使得在服务层进行数据库操作变得更为便捷和高效。
IService 接口是一个泛型接口定义了一组通用的基础方法包括常见的增删改查操作。例如它提供了插入数据、根据主键更新数据、根据主键删除数据、根据主键查询数据等方法的签名。用户可以根据自己的需求和业务逻辑在自定义的服务接口中继承 IService 接口并实现其中的方法。用法 public interface UserService extends IServiceUser {} ServiceImpl 类是 IService 接口的默认实现类提供了基本的增删改查操作的实现细节。它使用了泛型参数来规范实体类和主键类型并实现了 IService 接口中定义的方法。用户可以继承 ServiceImpl 类并在自己的实现类中添加或重写更具体的业务逻辑。用法 Service
public class UserServiceImpl extends ServiceImplUserMapper, User implements UserService {}
二、IService用法
1、添加数据
// 插入一条记录选择字段策略插入
boolean save(T entity);// 插入批量
boolean saveBatch(CollectionT entityList);// 插入批量限制数量
boolean saveBatch(CollectionT entityList, int batchSize);// TableId 注解存在更新记录否则插入一条记录
boolean saveOrUpdate(T entity);// 根据 updateWrapper 尝试更新否则继续执行 saveOrUpdate(T) 方法
boolean saveOrUpdate(T entity, WrapperT updateWrapper);// 批量修改插入
boolean saveOrUpdateBatch(CollectionT entityList);// 批量修改插入
boolean saveOrUpdateBatch(CollectionT entityList, int batchSize); 可以开启 rewriteBatchedStatementstrue 参数提高批处理的执行效率。
2、删除数据
// 根据 entity 条件删除记录
boolean remove(WrapperT queryWrapper);// 根据 ID 删除
boolean removeById(Serializable id);// 根据 columnMap 条件删除记录
boolean removeByMap(MapString, Object columnMap);// 删除根据ID 批量删除
boolean removeByIds(Collection? extends Serializable idList);
3、修改数据
// 根据 UpdateWrapper 条件更新记录需要设置sqlset
boolean update(WrapperT updateWrapper);// 根据 whereWrapper 条件更新记录
boolean update(T updateEntity, WrapperT whereWrapper);// 根据 ID 选择修改
boolean updateById(T entity);// 根据ID 批量更新
boolean updateBatchById(CollectionT entityList);// 根据ID 批量更新
boolean updateBatchById(CollectionT entityList, int batchSize);
4、查询数据
查询一条数据
// 根据 ID 查询
T getById(Serializable id);// 根据 Wrapper查询一条记录。结果集如果是多个会抛出异常随机取一条加上限制条件 wrapper.last(LIMIT 1)
T getOne(WrapperT queryWrapper);// 根据 Wrapper查询一条记录这个是方法返回结果不止一条则会抛出异常如果想默认取第一条结果可以给这方法传第二个参数为false。
T getOne(WrapperT queryWrapper, boolean throwEx);// 根据 Wrapper查询一条记录
MapString, Object getMap(WrapperT queryWrapper);// 根据 Wrapper查询一条记录
// mapper转换函数用于将查询结果中的每个对象转换为指定的对象类型。
V V getObj(WrapperT queryWrapper, Function? super Object, V mapper);查询多条数据
// 查询所有
ListT list();// 查询列表
ListT list(WrapperT queryWrapper);// 查询根据 ID 批量查询
CollectionT listByIds(Collection? extends Serializable idList);// 查询根据 columnMap 条件
CollectionT listByMap(MapString, Object columnMap);// 查询所有列表
ListMapString, Object listMaps();// 查询列表
ListMapString, Object listMaps(WrapperT queryWrapper);// 查询全部记录
ListObject listObjs();// 查询全部记录
V ListV listObjs(Function? super Object, V mapper);// 根据 Wrapper 条件查询全部记录
ListObject listObjs(WrapperT queryWrapper);// 根据 Wrapper 条件查询全部记录
// mapper转换函数用于将查询结果中的每个对象转换为指定的对象类型。
V ListV listObjs(WrapperT queryWrapper, Function? super Object, V mapper);查询记录数 count()
// 查询总记录数
int count();// 根据 Wrapper 条件查询总记录数
int count(WrapperT queryWrapper);
分页Page
// 无条件分页查询
IPageT page(IPageT page);// 条件分页查询
IPageT page(IPageT page, WrapperT queryWrapper);// 无条件分页查询
IPageMapString, Object pageMaps(IPageT page);// 条件分页查询
IPageMapString, Object pageMaps(IPageT page, WrapperT queryWrapper); IPage 是MyBatis-Plus 提供的一个分页相关的接口它有一个实现类为 Page类中定义了分页相关的多个参数。
size (每页显示条数)此参数通常由前端传给我们然后再封装到Page对象中进行分页查询current (要展示哪一页数据)此参数通常由前端传给我们然后再封装到Page对象中进行分页查询orders(排序规则集合)按照哪些字段进行排序可以为多个例如希望通过时间进行排序如果时间相同就根据用户ID降序排序可以添加多个字段total (总记录数)指查询完毕后返回的数据库中总记录数注意不包含已被逻辑删除的数据records查询到的分页结果集数据分页查询得到的多条数据会存储在 records 中可以看出该对象是一个集合可以传递一个泛型泛型就是查询到的数据对应的实体泛型
public class PageT implements IPageT {private static final long serialVersionUID 8545996863226528798L;protected ListT records;protected long total;protected long size;protected long current;protected ListOrderItem orders;protected boolean optimizeCountSql;protected boolean searchCount;protected boolean optimizeJoinOfCountSql;protected String countId;protected Long maxLimit;
/* 以下省略 */
} Page对象使用演示
SpringBootTest
public class ProductMapperTest {// 自动注入 productMapper 接口对应的实现类对象Autowiredprivate ProductMapper productMapper;Testpublic void testPageQuery(){// 创建分页查询相关参数 page泛型为 Product表示查询到的结果对应的实体类为ProductPageProduct page new Page();// 设置分页查询显示第二页的数据实际开发过程中该参数有前端传递page.setCurrent(2);// 设置分页查询每页显示四条数据实际开发过程中该参数有前端传递page.setSize(4);// 创建排序字段集合不想排序不加即可实际开发过程中一般都会要求按照时间降序排序ListOrderItem orders new ArrayList();// 按照价格排序排序方式为降序ASC为True表示升序false表示降序第一个参数表示数据库中的列名orders.add(new OrderItem(price,false));// 按照生产时间排序排序方式为降序orders.add(new OrderItem(production_date,false));// 将排序对象集合加入分页查询对象Page中page.setOrders(orders);// 执行分页查询可以创建一个Page对象接受查询结果// 也可以用查询条件参数page但其实最后结果都是同一个page productMapper.selectPage(page, null);// 可以新创建一个Page对象就像下面这样PageProduct productPage productMapper.selectPage(page,null);// 输出分页查询结果显示当前的哪一页System.out.println(page.getCurrent());// 输出分页查询结果的总数据条数System.out.println(page.getTotal());// 输出分页查询结果的数据集合System.out.println(page.getRecords());// 输出分页查询结果的每页显示条数System.out.println(page.getSize());// 判断刚才分页查询的两个结果对象是否为同一个System.out.println(page productPage);// 输出第一个分页查询对象内存地址System.out.println(page);// 输出第二个分页查询对象内存地址System.out.println(productPage);}
}
链式 链式查询演示
// 链式查询 普通
QueryChainWrapperT query();// 链式查询 lambda 式。注意不支持 Kotlin
LambdaQueryChainWrapperT lambdaQuery();// 示例
// eq 指定条件
query().eq(column, value).one();
lambdaQuery().eq(Entity::getId, value).list();链式更新演示
// 链式更改 普通
UpdateChainWrapperT update();// 链式更改 lambda 式。注意不支持 Kotlin
LambdaUpdateChainWrapperT lambdaUpdate();// 示例
// eq 指定条件
update().eq(column, value).remove();
lambdaUpdate().eq(Entity::getId, value).update(entity);