当前位置: 代码网 > it编程>编程语言>Java > MybatisPlus IService接口功能介绍

MybatisPlus IService接口功能介绍

2024年09月22日 Java 我要评论
一、介绍在mybatisplus框架中,iservice接口扮演着重要的角色。作为一个通用的服务接口,iservice定义了一系列方法,包括查询、插入、更新、删除等。这些方法的定义使得在服务层进行数据

一、介绍

在mybatisplus框架中,iservice接口扮演着重要的角色。

作为一个通用的服务接口,iservice定义了一系列方法,包括查询、插入、更新、删除等。

这些方法的定义使得在服务层进行数据库操作变得更为便捷和高效。

  • iservice 接口是一个泛型接口,定义了一组通用的基础方法,包括常见的增删改查操作。
  • 例如,它提供了插入数据、根据主键更新数据、根据主键删除数据、根据主键查询数据等方法的签名。
  • 用户可以根据自己的需求和业务逻辑在自定义的服务接口中继承 iservice 接口,并实现其中的方法。

用法:

 public interface userservice extends iservice<user> {}
  • serviceimpl 类是 iservice 接口的默认实现类,提供了基本的增删改查操作的实现细节。
  • 它使用了泛型参数来规范实体类和主键类型,并实现了 iservice 接口中定义的方法。
  • 用户可以继承 serviceimpl 类,并在自己的实现类中添加或重写更具体的业务逻辑。

用法:

@service
public class userserviceimpl extends serviceimpl<usermapper, user> implements userservice {}

二、iservice用法

1、添加数据

// 插入一条记录(选择字段,策略插入)
boolean save(t entity);

// 插入(批量)
boolean savebatch(collection<t> entitylist);

// 插入(批量,限制数量)
boolean savebatch(collection<t> entitylist, int batchsize);

// 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);

可以开启 rewritebatchedstatements=true 参数,提高批处理的执行效率。

2、删除数据

// 根据 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);

3、修改数据

// 根据 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);

4、查询数据

查询一条数据

// 根据 id 查询
t getbyid(serializable id);

// 根据 wrapper,查询一条记录。结果集如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("limit 1")
t getone(wrapper<t> querywrapper);

// 根据 wrapper,查询一条记录,这个是方法返回结果不止一条则会抛出异常,如果想默认取第一条结果,可以给这方法传第二个参数为false。
t getone(wrapper<t> querywrapper, boolean throwex);

// 根据 wrapper,查询一条记录
map<string, object> getmap(wrapper<t> querywrapper);

// 根据 wrapper,查询一条记录
// mapper:转换函数,用于将查询结果中的每个对象转换为指定的对象类型。
<v> v getobj(wrapper<t> querywrapper, function<? super object, v> mapper);

查询多条数据

// 查询所有
list<t> list();

// 查询列表
list<t> list(wrapper<t> querywrapper);

// 查询(根据 id 批量查询)
collection<t> listbyids(collection<? extends serializable> idlist);

// 查询(根据 columnmap 条件)
collection<t> listbymap(map<string, object> columnmap);

// 查询所有列表
list<map<string, object>> listmaps();

// 查询列表
list<map<string, object>> listmaps(wrapper<t> querywrapper);

// 查询全部记录
list<object> listobjs();

// 查询全部记录
<v> list<v> listobjs(function<? super object, v> mapper);

// 根据 wrapper 条件,查询全部记录
list<object> listobjs(wrapper<t> querywrapper);

// 根据 wrapper 条件,查询全部记录
// mapper:转换函数,用于将查询结果中的每个对象转换为指定的对象类型。
<v> list<v> listobjs(wrapper<t> querywrapper, function<? super object, v> mapper);

查询记录数 count()

// 查询总记录数
int count();

// 根据 wrapper 条件,查询总记录数
int count(wrapper<t> querywrapper);

分页:page

// 无条件分页查询
ipage<t> page(ipage<t> page);

// 条件分页查询
ipage<t> page(ipage<t> page, wrapper<t> querywrapper);

// 无条件分页查询
ipage<map<string, object>> pagemaps(ipage<t> page);

// 条件分页查询
ipage<map<string, object>> pagemaps(ipage<t> page, wrapper<t> querywrapper);

ipage 是mybatis-plus 提供的一个分页相关的接口,它有一个实现类为 page,类中定义了分页相关的多个参数。

  • size (每页显示条数):此参数通常由前端传给我们,然后再封装到page对象中进行分页查询;
  • current (要展示哪一页数据):此参数通常由前端传给我们,然后再封装到page对象中进行分页查询;
  • orders(排序规则集合):按照哪些字段进行排序?可以为多个,例如希望通过时间进行排序,如果时间相同就根据用户id降序排序,可以添加多个字段;
  • total (总记录数):指查询完毕后返回的数据库中总记录数,注意不包含已被逻辑删除的数据;
  • records(查询到的分页结果集数据):分页查询得到的多条数据会存储在 records 中,可以看出该对象是一个集合,可以传递一个泛型,泛型就是查询到的数据对应的实体泛型;
public class page<t> implements ipage<t> {
    private static final long serialversionuid = 8545996863226528798l;
    protected list<t> records;
    protected long total;
    protected long size;
    protected long current;
    protected list<orderitem> orders;
    protected boolean optimizecountsql;
    protected boolean searchcount;
    protected boolean optimizejoinofcountsql;
    protected string countid;
    protected long maxlimit;
/* 以下省略 */
}

page对象使用演示:

@springboottest
public class productmappertest {
    // 自动注入 productmapper 接口对应的实现类对象
    @autowired
    private productmapper productmapper;
    @test
    public void testpagequery(){
        // 创建分页查询相关参数 page,泛型为 product,表示查询到的结果对应的实体类为product
        page<product> page = new page<>();
        // 设置分页查询显示第二页的数据,实际开发过程中该参数有前端传递
        page.setcurrent(2);
        // 设置分页查询每页显示四条数据,实际开发过程中该参数有前端传递
        page.setsize(4);
        // 创建排序字段集合,不想排序不加即可,实际开发过程中一般都会要求按照时间降序排序
        list<orderitem> 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对象,就像下面这样
        page<product> 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);
    }
}

链式

链式查询演示:

// 链式查询 普通
querychainwrapper<t> query();

// 链式查询 lambda 式。注意:不支持 kotlin
lambdaquerychainwrapper<t> lambdaquery();

// 示例:
// eq 指定条件
query().eq("column", value).one();
lambdaquery().eq(entity::getid, value).list();

链式更新演示:

// 链式更改 普通
updatechainwrapper<t> update();

// 链式更改 lambda 式。注意:不支持 kotlin
lambdaupdatechainwrapper<t> lambdaupdate();

// 示例:
// eq 指定条件
update().eq("column", value).remove();
lambdaupdate().eq(entity::getid, value).update(entity);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com