• 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 增:

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

            2.1 删(3种方式):

    1. @Test
    2. public void testDelete(){
    3. //主键删除
    4. // userMapper.deleteById(1l);//长整型需添加l
    5. // userMapper.selectList(null).forEach(System.out::println);
    6. //批量删除
    7. //userMapper.delete(new QueryWrapper().like("name","J"));
    8. //userMapper.delete(Wrappers.query().like("name","J"));
    9. userMapper.delete(Wrappers.query().lambda().like(User::getName,"J"));
    10. userMapper.selectList(null).forEach(System.out::println);
    11. }

            2.3 改:

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

    1. @Test
    2. public void testUpdate(){
    3. //基本修改
    4. // userMapper.updateById(new User().setId(1l).setName("wayaya"));
    5. // userMapper.selectList(null).forEach(System.out::println);
    6. //批量修改
    7. // userMapper.update(null,Wrappers.update().set("email","ppp@163.com").like("name","J"));
    8. // userMapper.selectList(null).forEach(System.out::println);
    9. //批量修改
    10. userMapper.update(new User().setEmail("ppp@163.com"),Wrappers.update().like("name","J"));
    11. userMapper.selectList(null).forEach(System.out::println);
    12. }

            2.4 查(两种方式):

    1. @Test
    2. public void testSelectNew(){
    3. //System.out.println(userMapper.selectOne(Wrappers.query().eq("name","Tom")));
    4. userMapper.selectList(new QueryWrapper().select("id","name")).forEach(user -> {
    5. System.out.println(user);
    6. });
    7. }

    3.分页

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

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

    1. package com.lxj.quickstart.config;
    2. import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    3. import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. @Configuration
    7. public class MybatisPlusConfig {
    8. @Bean
    9. public PaginationInterceptor paginationInterceptor(){
    10. return new PaginationInterceptor().setCountSqlParser(new JsqlParserCountOptimize(true));//可优化1对1连接查询效率
    11. }
    12. }

            3.1内置分页查询:

    1. @Test
    2. public void testPage(){
    3. IPage page=new Page<>(2,2);
    4. IPage pr = userMapper.selectPage(page, Wrappers.query());
    5. System.out.println("总行数"+pr.getTotal());
    6. System.out.println("总页数"+pr.getPages());
    7. System.out.println("每页行数"+pr.getSize());
    8. pr.getRecords().forEach(user -> {
    9. System.out.println(user);
    10. });
    11. }

            3.2自定义xml分页查询:

            添加配置项:

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

            添加xml查询:

    1. "1.0" encoding="UTF-8"?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    3. <mapper namespace="com.lxj.quickstart.mapper.UserMapper">
    4. <sql id="selectSql">
    5. SELECT
    6. *
    7. FROM
    8. user
    9. sql>
    10. <select id="selectUserByPage" resultType="user">
    11. <include refid="selectSql">include>
    12. <where>
    13. <if test="u.age != null">
    14. age = #{u.age}
    15. if>
    16. <if test="u.email != null">
    17. and email like '%${u.email}%'
    18. if>
    19. where>
    20. select>
    21. mapper>

            添加mapper接口:

    1. package com.lxj.quickstart.mapper;
    2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    3. import com.baomidou.mybatisplus.core.metadata.IPage;
    4. import com.lxj.quickstart.entity.User;
    5. import org.apache.ibatis.annotations.Param;
    6. public interface UserMapper extends BaseMapper {
    7. //映射的接口中有2个参数需要@Param定义参数名,映射文件中使用p.和c.调用属性
    8. public IPage selectUserByPage(@Param("p") IPage page, @Param("u") User condition);
    9. }

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

            添加测试:

    1. @Test
    2. public void testPage2(){
    3. IPage page=new Page<>(1,2);
    4. //条件对象
    5. User u=new User();
    6. u.setAge(18);
    7. u.setEmail("@163.com");
    8. IPage pr = userMapper.selectUserByPage(page, u);
    9. System.out.println("总行数"+pr.getTotal());
    10. System.out.println("总页数"+pr.getPages());
    11. System.out.println("每页行数"+pr.getSize());
    12. pr.getRecords().forEach(user -> {
    13. System.out.println(user);
    14. });
    15. }

            3.3 pageHelper分页

            添加依赖:

    1. <dependency>
    2. <groupId>com.github.pagehelpergroupId>
    3. <artifactId>pagehelperartifactId>
    4. <version>5.1.11version>
    5. dependency>

            添加拦截器:

    1. //两个分页插件不冲突
    2. @Bean
    3. public PageInterceptor pageInterceptor(){
    4. return new PageInterceptor();
    5. }

            映射文件 :

    1. <select id="selectUserByPage2" resultType="user">
    2. <include refid="selectSql">include>
    3. <where>
    4. <if test="age != null">
    5. age = #{age}
    6. if>
    7. <if test="email != null">
    8. and email like '%${email}%'
    9. if>
    10. where>
    11. select>

            映射文件对呀接口:

    public List selectUserByPage2(User condition);

            测试:

    1. @Test
    2. public void testPageHelper(){
    3. //条件对象
    4. User u=new User();
    5. u.setAge(18);
    6. u.setEmail("@163.com");
    7. PageInfo page=PageHelper.startPage(1,2).doSelectPageInfo(()->{
    8. //映射文件
    9. userMapper.selectUserByPage2(u);
    10. //内置方法
    11. userMapper.selectList(Wrappers.query());
    12. });
    13. List list = page.getList();
    14. page.getList().forEach(System.out :: println);
    15. System.out.println("总行数"+page.getTotal());
    16. System.out.println("总页数"+page.getPages());
    17. System.out.println("每页行数"+page.getPageSize());
    18. System.out.println("当前页数"+page.getPageNum());
    19. System.out.println("起始行数"+page.getStartRow());
    20. System.out.println("每页行数"+page.getSize());
    21. System.out.println("是第一页"+page.isIsFirstPage());
    22. System.out.println("是最后一页"+page.isIsLastPage());
    23. System.out.println("有上一页"+page.isHasPreviousPage());
    24. System.out.println("有下一页"+page.isHasNextPage());
    25. System.out.println("页码列表"+Arrays.toString(page.getNavigatepageNums()));
    26. }

  • 相关阅读:
    免杀对抗-内存加载-shellcode转换-UUID+MAC+IPV4
    CSS 滚动捕获 Scroll Snap
    冰蝎的原理与安装使用
    Ceph-deploy跳过gpg-key验证(离线环境安装Ceph)
    LeetCode 0714. 买卖股票的最佳时机含手续费
    ubuntu20.04.6wifi图标消失问题解决方案
    CRM软件系统趣味性——游戏化销售管理
    Deep learning of free boundary and Stefan problems论文阅读复现
    JAVA 抽象类和接口——万字理解
    Paddle入门实战系列(一):基于PaddleOCR的车牌识别
  • 原文地址:https://blog.csdn.net/liuxiaojiangtobeno1/article/details/137922083