IService接口和ServiceImpl实现类(Mybatis-Plus对service层的封装)

这篇具有很好参考价值的文章主要介绍了IService接口和ServiceImpl实现类(Mybatis-Plus对service层的封装)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java知识点总结:想看的可以从这里进入

3.2、IService接口

BaseMapper 是用在Mapper中,而IService是在Service层使用的封装接口,它进一步封装 CRUD 。为了和BaseMapper 中方法进行区分,它采用了不同的前缀:

  1. get 查询单行
  2. remove 删除
  3. list 查询集合
  4. page 分页
  5. save新增
  6. update修改

IService还有一个实现的类ServiceImpl,在使用使用时分别对应service接口和impl实现类。

public interface UserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
3.2.1、新增
  1. 新增一条记录

    @Resource
    private UserService userService;
    @Test
    public void testServcie(){
        User user  = new User();
        user.setUsername("service增加");
        user.setPassword("12321");
        boolean save = userService.save(user);
        System.out.println("是否成功:"+save);
    }
    
  2. 批量操作

    @Resource
    private UserService userService;
    @Test
    public void testServcie(){
        List<User> users = new ArrayList<>();
        User user1 = new User("批量增加1","123");
        users.add(user1);
        User user2 = new User("批量增加2","123");
        users.add(user2);
        User user3 = new User("批量增加3","123");
        users.add(user3);
        User user4 = new User("批量增加4","123");
        users.add(user4);
        User user5 = new User("批量增加5","123");
        users.add(user5);
    
        boolean save = userService.saveBatch(users);
        System.out.println("是否成功:"+save);
    }
    
  3. 设置批次数量

    public void testServcie(){
        List<User> users = new ArrayList<>();
        User user1 = new User("指定数量批量增加6","123");
        users.add(user1);
        User user2 = new User("指定数量批量增加7","123");
        users.add(user2);
        User user3 = new User("指定数量批量增加8","123");
        users.add(user3);
        User user4 = new User("指定数量批量增加9","123");
        users.add(user4);
        User user5 = new User("指定数量批量增加10","123");
        users.add(user5);
    
        boolean save = userService.saveBatch(users,2);
        System.out.println("是否成功:"+save);
    }
    

    iservice接口,MyBatis-Plus,mybatis,java,spring

3.2.2、查询
1、单行查询

iservice接口,MyBatis-Plus,mybatis,java,spring

  1. 根据id查询

    @Test
    public void testServcie(){
        User user = userService.getById(1);
        System.out.println(user);
    }
    

    iservice接口,MyBatis-Plus,mybatis,java,spring

2、多行查询

iservice接口,MyBatis-Plus,mybatis,java,spring

  1. 根据ID批量查询

    @Test
    public void testServcie(){
        List<Integer> list = Arrays.asList(1, 2, 3);
        List<User> users = userService.listByIds(list);
        users.forEach(System.out::println);
    }
    

    iservice接口,MyBatis-Plus,mybatis,java,spring

  2. 查询所有

    @Test
    public void testServcie(){
        //返回list
     	List<User> list = userService.list();
        System.out.println(list);
        //返回map
        List<Map<String, Object>> maps = userService.listMaps();
        System.out.println(maps);
    
        List<Object> objects = userService.listObjs();
        System.out.println(objects);
    }
    

    iservice接口,MyBatis-Plus,mybatis,java,spring

3.2.3、删除

iservice接口,MyBatis-Plus,mybatis,java,spring

  1. 根据id删除

    @Test
    public void testServcie(){
        boolean b = userService.removeById(21);
    }
    
  2. 根据实体的id删除

    @Test
    public void testServcie(){
        User user = userService.getById(22);
        boolean b = userService.removeById(user);
    }
    
  3. 批量删除

    @Test
    public void testServcie(){
        List<Integer> list = Arrays.asList(23, 24, 25);
        boolean b = userService.removeByIds(list);
    }
    
  4. 根据Map条件删除

    @Test
    public void testServcie(){
        Map<String ,Object> map = new HashMap<>();
        map.put("username","批量增加5");
        map.put("password","123");
        boolean b = userService.removeByMap(map);
    }
    
3.2.4、修改

iservice接口,MyBatis-Plus,mybatis,java,spring

  1. 根据ID修改

    @Test
    public void testServcie(){
        User user = userService.getById(27);
        user.setUsername("修改1");
        user.setPassword("213123");
        boolean b = userService.updateById(user);
    }
    
  2. 批量修改

    @Test
    public void testServcie(){
        List<Integer> list = Arrays.asList(28, 29, 30);
        List<User> users = userService.listByIds(list);
        users.forEach(user -> {
            user.setUsername("批量修改");
        });
        boolean b = userService.updateBatchById(users);
    }
    
3.2.5、修改或更新

iservice接口,MyBatis-Plus,mybatis,java,spring

3.2.6、分页

在Mybatis-plus中提供了有关分页的接口和实现类 IPage 和 Page

public class Page<T> implements IPage<T> {
    private static final long serialVersionUID = 8545996863226528798L;
    //用来存放查询出来的数据
    protected List<T> records = Collections.emptyList();
    //返回的数据总数
    protected long total = 0;
    // 每页显示条数,默认 10
    protected long size = 10;
    //当前页,默认1
    protected long current = 1;
    // 排序字段信息
    @Setter
    protected List<OrderItem> orders = new ArrayList<>();
    //自动优化 COUNT SQL
    protected boolean optimizeCountSql = true;
    // 是否进行 count 查询
    protected boolean searchCount = true;
  
    public Page() {
    }

    /**
     * 有参构造函数
     * @param current 当前页
     * @param size    每页显示条数
     */
    public Page(long current, long size) {
        this(current, size, 0);
    }

    public Page(long current, long size, long total) {
        this(current, size, total, true);
    }

    public Page(long current, long size, boolean searchCount) {
        this(current, size, 0, searchCount);
    }

    public Page(long current, long size, long total, boolean searchCount) {
        if (current > 1) {
            this.current = current;
        }
        this.size = size;
        this.total = total;
        this.searchCount = searchCount;
    }

    //是否存在上一页
    public boolean hasPrevious() {
        return this.current > 1;
    }

    //是否存在下一页
    public boolean hasNext() {
        return this.current < this.getPages();
    }
    ..........
}
  • 配置

    • 使用Spring时,在Spring的配置文件中先配置mybatis-plus内置的分页插件

      <!-- 配置mybatis-plus的分页拦截器-->
      <bean id="paginationInnerInterceptor" class="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor"/>
          
      <!-- 配置mybatis-plus的分页拦截器插件 -->
      <bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor">
          <property name="interceptors" >
              <list>
                  <ref bean="paginationInnerInterceptor"/>
              </list>
          </property>
      </bean>
      <!-- 将插件加入到MybatisSqlSessionFactoryBean 中-->
      <bean class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
          <!--加载连接池-->
          <property name="dataSource" ref="dataSource"/>
          <!-- 设置MyBatis配置文件的路径(可以不设置) -->
          <property name="configLocation" value="classpath:mybatis-config.xml"/>
          <!--加载映射文件路径-->
          <property name="mapperLocations" value="classpath:mapping/*.xml"/>
          <!--分页插件生效 -->
          <property name="plugins">
              <array>
                  <ref bean="mybatisPlusInterceptor"/>
              </array>
          </property>
      </bean>
      
    • 使用SpringBoot时配置时,在配置类中配置

      @Bean
      public MybatisPlusInterceptor mybatisPlusInterceptor() {
          MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
          interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
          return interceptor;
      }
      
  • 分页查询数据

    @Test
    public void testServcie(){
        Page<User> page = userService.page(new Page<>(1,5));
        System.out.println("总数据:"+page.getTotal());
        List<User> users = page.getRecords();
        users.forEach(System.out::println);
    }
    

    iservice接口,MyBatis-Plus,mybatis,java,spring

3.2.7、查询记录数
@Test
public void testServcie(){
    long count = userService.count();
    System.out.println(count);
}

iservice接口,MyBatis-Plus,mybatis,java,spring文章来源地址https://www.toymoban.com/news/detail-568709.html

到了这里,关于IService接口和ServiceImpl实现类(Mybatis-Plus对service层的封装)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于Mybatis Plus中BaseMapper和IService

    BaseMapper是Mybatis Plus提供的基础Mapper接口。它提供了常见的CRUD操作方法,如插入、修改、删除和查询等。BaseMapper是一个通用接口,可以适用于各种实体类的操作。这减少了开发人员需要编写的代码量,提高了开发效率。 IService是Mybatis Plus提供的服务接口。它提供了一些高级的

    2024年02月08日
    浏览(66)
  • mybatis-plus数据权限实现

    数据权限是平台系统中不可分割的一部分,在mybatis框架中,大部分都是基于mybatis拦截器进行数据权限的插入,有的将数据权限参数作为XML的标签,有的是基于注解方式,但是不管这两种方式如何,都必须在拦截器中处理自己解析SQL,稍有不慎或者说没解析到就会出现各种奇

    2024年02月05日
    浏览(34)
  • 基于Mybatis-Plus实现数据权限

    数据权限是指对系统用户进行数据资源可见性的控制。实现不同角色登录系统所展示的操作数据范围不一样,达到角色与角色、用户与用户之间数据的隔离。例如:管理员可以看到所有的菜单,而普通用户只能看到部分菜单。在同个表格数据中,管理员可以看到所有用户的数

    2024年02月10日
    浏览(31)
  • mybatis-plus配置日志实现方式

    Mybatis-plus是一个基于Mybatis的强大框架,可以帮助开发者快速地开发高质量的数据库应用程序。Mybatis-plus提供了许多配置项,其中一个重要的配置项是log-impl。 log-impl配置项定义了Mybatis-plus的日志实现方式,有两种可选的方式: SLF4J日志实现 如果你的项目已经使用了SLF4J日志框

    2024年02月09日
    浏览(77)
  • Mybatis-Plus:实现自定义SQL

    目录 1.简介 2.自定义SQL具体实现 2.1.注解SQL 2.2.Wrapper传参+注解SQL 2.3.Wrapper传参+xml文件SQL 2.4.正常传参+XML文件SQL 3.总结         Mybatis-Plus(以下简称MBP)的初衷是为了简化开发,而不建议开发者自己写SQL语句的;但是有时客户需求比较复杂,仅使用MBP提供的Service,Mapper与

    2024年02月13日
    浏览(41)
  • mybatis-plus实现分页查询

    分页查询使用的方法是: IPage:用来构建分页查询条件 Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null IPage:返回值,你会发现构建分页条件和方法的返回值都是IPage IPage是一个接口,我们需要找到它的实现类来构建它,具体的实现类,可以进入到IPage类中按ctrl+

    2023年04月08日
    浏览(49)
  • MyBatis-Plus实现多表联查

    收获大佬封装的一个jar包,可以支持MyBatis-Plus多表联查,特此分享。 注意: mybatis plus version = 3.4.0 mapper继承MPJBaseMapper (必选) service继承MPJBaseService (可选) serviceImpl继承MPJBaseServiceImpl (可选) 对应查询语句 参数说明 1、select:表示查询的指定字段,一个select只能查一个表的 2、le

    2024年02月15日
    浏览(33)
  • SpringBoot整合Mybatis-plus实现商品推荐

    在开始编写代码之前,我们需要准备一下环境: Java 8+ IntelliJ IDEA Node.js 和 npm Vue CLI 如果你还没有安装Vue CLI,则可以使用以下命令在终端中安装: 首先,我们需要使用Spring Boot创建一个新项目。在IntelliJ IDEA中,选择“New Project”,然后选择“Spring Initializr”。 在“New Project”

    2024年02月01日
    浏览(44)
  • springboot+mybatis-plus实现自动建表

    好长时间没输出了,最近工作上也是太多事,领导动不动就拍脑门,那叫一个酸爽~ 工作能力的提现不但是技术或解决问题的能力上,还体现在要能立刻满足领导的各种需求,不管是哪方面的需求,这样才能够拍上马屁,步步高升。 言归正传,作为技术从业者,还是要多深耕

    2024年02月16日
    浏览(36)
  • springboot~mybatis-plus的DynamicTableNameInnerInterceptor实现分表

    DynamicTableNameInnerInterceptor是mybatis-plug的一个拦截器插件,可以自己定义需要拦截的表单,然后对它进行加工,这时mybatis-plus就会把SQL代码的表名加上你的这个装饰。 我们通常把mybatis做成一个包,公司其它同事直接使用咱们的包,包里会统一定义数据 基类 、 数据分页 、 数据

    2024年02月06日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包