SpringBoot框架——8.MybatisPlus常见用法(常用注解+内置方法+分页查询)

这篇具有很好参考价值的文章主要介绍了SpringBoot框架——8.MybatisPlus常见用法(常用注解+内置方法+分页查询)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.MybatisPlus常用注解:

        1.1 当数据库、表名和字段名和实体类完全一致时无需加注解,不一致时:

        @TableName指定库名

        @TableId指定表名

        @TableField指定字段名

        1.2 自增主键:

        @TableId(type=IdType.AUTO)

        private Long id;

        1.3 实体类中属性不是表字段:

        @TableField(exist=false)

2.内置增删改查:

        这里如果加了@Data注解但无法生效,应该是没有安装Lombok插件,在plugin中添加即可

        2.1 增:

    @Test
    public void testInsert(){
        User user=new User();
        user.setName("lxj");
        user.setEmail("lxj@163.com");
        user.setAge(30);
        Assert.assertTrue(userMapper.insert(user)>0);
        userMapper.selectList(null).forEach(System.out::println);
    }

        2.1 删(3种方式):

    @Test
    public void testDelete(){
        //主键删除
//        userMapper.deleteById(1l);//长整型需添加l
//        userMapper.selectList(null).forEach(System.out::println);

        //批量删除
        //userMapper.delete(new QueryWrapper<User>().like("name","J"));
        //userMapper.delete(Wrappers.<User>query().like("name","J"));
        userMapper.delete(Wrappers.<User>query().lambda().like(User::getName,"J"));
        userMapper.selectList(null).forEach(System.out::println);

    }

        2.3 改:

        这里可以在实体类中添加@Accessors(chain=true)注解使set方法返回一个当前对象。

    @Test
    public void testUpdate(){
        //基本修改
//        userMapper.updateById(new User().setId(1l).setName("wayaya"));
//        userMapper.selectList(null).forEach(System.out::println);

        //批量修改
//        userMapper.update(null,Wrappers.<User>update().set("email","ppp@163.com").like("name","J"));
//        userMapper.selectList(null).forEach(System.out::println);
        //批量修改
        userMapper.update(new User().setEmail("ppp@163.com"),Wrappers.<User>update().like("name","J"));
        userMapper.selectList(null).forEach(System.out::println);

    }

        2.4 查(两种方式):

    @Test
    public void testSelectNew(){
        //System.out.println(userMapper.selectOne(Wrappers.<User>query().eq("name","Tom")));

        userMapper.selectList(new QueryWrapper<User>().select("id","name")).forEach(user -> {
            System.out.println(user);
        });
    }

3.分页

        原理一样都是通过分页拦截器,查询前先查询总行数,然后再查询当前页记录。

        先添加一个分页拦截器:MybatisPlusConfig

package com.lxj.quickstart.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor().setCountSqlParser(new JsqlParserCountOptimize(true));//可优化1对1连接查询效率
    }
}

        3.1内置分页查询:

    @Test
    public void testPage(){
        IPage<User> page=new Page<>(2,2);
        IPage<User> pr = userMapper.selectPage(page, Wrappers.<User>query());
        System.out.println("总行数"+pr.getTotal());
        System.out.println("总页数"+pr.getPages());
        System.out.println("每页行数"+pr.getSize());

        pr.getRecords().forEach(user -> {
            System.out.println(user);
        });
    }

        3.2自定义xml分页查询:

        添加配置项:

    
#mybatisplus
mybatis-plus:
  type-aliases-package: com.lxj.quickstart.entity   #别名搜索
  mapper-locations: classpath:/mappers/*.xml         #加载映射文件

        添加xml查询:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.lxj.quickstart.mapper.UserMapper">

    <sql id="selectSql">
        SELECT
              *
        FROM
              user
    </sql>

    <select id="selectUserByPage" resultType="user">
        <include refid="selectSql"></include>
        <where>
            <if test="u.age != null">
                age = #{u.age}
            </if>
            <if test="u.email != null">
                and email like '%${u.email}%'
            </if>
        </where>
    </select>
</mapper>

        添加mapper接口:

package com.lxj.quickstart.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lxj.quickstart.entity.User;
import org.apache.ibatis.annotations.Param;

public interface UserMapper extends BaseMapper<User> {


    //映射的接口中有2个参数需要@Param定义参数名,映射文件中使用p.和c.调用属性
    public IPage<User> selectUserByPage(@Param("p") IPage<User> page, @Param("u") User condition);

}

        这里注意第二个参数’u‘必须和xml中的u一致。

        添加测试:

    @Test
    public void testPage2(){

        IPage<User> page=new Page<>(1,2);

        //条件对象
        User u=new User();
        u.setAge(18);
        u.setEmail("@163.com");

        IPage<User> pr = userMapper.selectUserByPage(page, u);
        System.out.println("总行数"+pr.getTotal());
        System.out.println("总页数"+pr.getPages());
        System.out.println("每页行数"+pr.getSize());

        pr.getRecords().forEach(user -> {
            System.out.println(user);
        });
    }

SpringBoot框架——8.MybatisPlus常见用法(常用注解+内置方法+分页查询),JAVA,spring boot,分页查询,内置查询方法,Mybatisplus

        3.3 pageHelper分页

        添加依赖:

        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.11</version>
        </dependency>

        添加拦截器:

    //两个分页插件不冲突
    @Bean
    public PageInterceptor pageInterceptor(){
        return  new PageInterceptor();
    }

        映射文件 :

<select id="selectUserByPage2" resultType="user">
        <include refid="selectSql"></include>
        <where>
            <if test="age != null">
                age = #{age}
            </if>
            <if test="email != null">
                and email like '%${email}%'
            </if>
        </where>
    </select>

        映射文件对呀接口:

public List<User> selectUserByPage2(User condition);

        测试:

    @Test
    public void testPageHelper(){
        //条件对象
        User u=new User();
        u.setAge(18);
        u.setEmail("@163.com");


        PageInfo<User> page=PageHelper.startPage(1,2).doSelectPageInfo(()->{
            //映射文件
            userMapper.selectUserByPage2(u);
            //内置方法
            userMapper.selectList(Wrappers.<User>query());
        });



        List<User> list = page.getList();

        page.getList().forEach(System.out :: println);

        System.out.println("总行数"+page.getTotal());
        System.out.println("总页数"+page.getPages());
        System.out.println("每页行数"+page.getPageSize());
        System.out.println("当前页数"+page.getPageNum());

        System.out.println("起始行数"+page.getStartRow());
        System.out.println("每页行数"+page.getSize());
        System.out.println("是第一页"+page.isIsFirstPage());
        System.out.println("是最后一页"+page.isIsLastPage());
        System.out.println("有上一页"+page.isHasPreviousPage());
        System.out.println("有下一页"+page.isHasNextPage());
        System.out.println("页码列表"+Arrays.toString(page.getNavigatepageNums()));
    }

SpringBoot框架——8.MybatisPlus常见用法(常用注解+内置方法+分页查询),JAVA,spring boot,分页查询,内置查询方法,Mybatisplus文章来源地址https://www.toymoban.com/news/detail-858231.html

到了这里,关于SpringBoot框架——8.MybatisPlus常见用法(常用注解+内置方法+分页查询)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Spring MVC 中的常见注解的用法

    Spring MVC(正式名称:Spring Web MVC) 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。 Spring MVC 是⼀个 Web 框架 Spring MVC 是基于 Servlet API 构建的 MVC 的定义 MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分为模型、视图

    2024年02月12日
    浏览(40)
  • SpringMVC 中的常用注解和用法

    观前提示:本篇博客演示使用的 IDEA 版本为2021.3.3版本,使用的是Java8(又名jdk1.8) 电脑使用的操作系统版本为 Windows 10 目录  前言 Spring Boot Spring MVC 1. MVC 1.1 MVC 和 Spring MVC 之间的关系 2. 创建 Spring MVC 项目 创建一个 SpringMVC 项目 1. new project 2. 选择 SpringBoot 项目, 选择合适的 jdk 版本

    2024年02月09日
    浏览(44)
  • Spring MVC中的常用注解及其用法

    @RequestMappering可以作用在类上(类注解)、也可以作用在方法上(方法注解)。 @RequestMappering后面的括号中:双引号的值会赋值给value这个属性。只有一个属性且属性名为value时这个属性名可以省略不写。 @RequestMappering默认支持get/post请求,可以使用method属性来限制请求方式。 从请求

    2024年01月19日
    浏览(44)
  • 【JavaEE进阶】SpringMVC中的常用注解和用法

    目录 学习Spring MVC 建立连接 @RequestMapping 注解介绍 @RequestMapping 使用 传参介绍 传递单个参数 传递多个参数 传递对象 后端参数重命名(后端参数映射)@RequestParam 非必传参数设置 传递数组 传递集合 传递JSON数据 获取URL中参数@PathVariable 上传文件@RequestPart 获取Cookie/Session 响应

    2024年04月14日
    浏览(83)
  • Solon2 常用注解之 @ProxyComponent 用法说明

    在 Solon 提倡“克制”的原则下,托管组件分为: 普通组件 代理组件(即 @ProxyComponent 注解的类)。代理的细节可以看下《动态代理的本质》 。 之所以需要代理,是为了能拦截函数;之所以需要拦截函数,是为了让函数上的注解生效。也算是 AOP 的基础。 (如果没有拦截需求

    2023年04月19日
    浏览(37)
  • Spring面试题--Spring框架常见注解

    Spring 的常见注解有哪些? 注解 说明 @Component 、 @Controller 、 @Service 、 @Repository 使用在类上用于实例化 Bean @Autowired 使用在字段上用于根据类型依赖注入 @Qualifier 结合 @Autowired 一起使用用于根据名称进行依赖注入 @Scope 标注 Bean 的作用范围 @Configuration 指定当前类是一个 配置类

    2024年02月12日
    浏览(46)
  • springboot 常见的注解

    下面是一些常见的Spring Boot注解及常见面试题的Markdown形式: Spring Boot常见注解 控制器相关注解 @RestControlle r:将类标记为RESTful控制器,用于处理HTTP请求并返回RESTful响应。 @RequestMapping :将HTTP请求映射到控制器的处理方法。 @GetMapping、@PostMapping、@PutMapping 、 @DeleteMapping :分

    2024年02月10日
    浏览(24)
  • springboot常见注解

    一、@SpringBootApplication: 1、介绍:这是一个组合注解:包含了  SpringBootApplication注解等价于以默认属性使用@Configuration、@EnableAutoConfiguration和@ComponentScan。 2、禁用自动装配项:

    2024年02月02日
    浏览(28)
  • Mockito框架常用注解

    他若喜欢你,你脾气再大都叫个性,他若不喜欢你,就算你温顺的像只猫,他都嫌你掉毛 Mockito框架常用注解包括: @Mock:用于创建被mock的对象实例。 @Spy:用于创建被spy的对象实例,即保留原对象的行为。 @InjectMocks:用于创建需要注入被mock对象的类的实例。 @Captor:用于捕

    2024年02月13日
    浏览(32)
  • SpringBoot中最常用的5个内置对象

    Spring Boot 是 Pivotal 团队推出的一款创新框架,旨在简化 Spring 应用的初始化搭建和开发流程。该框架采用了独特的配置方式,让开发者无需再编写繁琐的模板配置。借助这一优势,Spring Boot 力求在快速应用开发领域(Rapid Application Sevelopment)树立行业标杆。 正如官方所描述,

    2024年02月16日
    浏览(38)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包