文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MyBatis-Plus(实用篇)

2023-08-17 06:21

关注

一、基础组件(接口和实现类)

简介

1、BaseMapper

在这里插入图片描述

BaseMapper中提供的CRUD方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

MybatisPlusInterceptor分页插件

@Configurationpublic class MybatisPlusConfig {    @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor() {        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();        //注意使用哪种数据库        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));        return interceptor;    }}

2、IService

在这里插入图片描述

IService中提供的CRUD方法

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3、链式查询与修改

IService接口中提供

在这里插入图片描述

 @Test public void test1(){  // 单个查询,多个报错     User user = userService.lambdaQuery().eq(User::getName, "Tom").one(); // 集合查询     List userList = userService.lambdaQuery().like(User::getName, "J").eq(User::getAge,20).list();     // 记录数查询     Integer count = userService.lambdaQuery().like(User::getAge, 20).select(User::getName, User::getAge).count();  }

在这里插入图片描述

  @Test  public void test2() {  // set修改某些属性      userService.lambdaUpdate().eq(User::getName, "Tom").set(User::getId, 110).set(User::getAge, 15).update();      // 修改整个对象      User user = new User();      user.setId(110L);      user.setAge(15);      userService.lambdaUpdate().eq(User::getName, "Tom").update(user);      // 根据名称删除      userService.lambdaUpdate().eq(User::getName, "Jack").remove();   }

4、调用Service层操作数据

public interface UserService extends IService {}
@Servicepublic class UserServiceImpl extends ServiceImpl implements UserService{}

二、常用注解

1、@TableName

@Data@TableName("t_user")public class User {    private Long id;    private String name;    private Integer age;    private String email;}
mybatis-plus:  global-config:    db-config:      # 设置实体类所对应的表的统一前缀      table-prefix: t_

2、@TableId

@TableId的value属性

@Datapublic class User {    @TableId(value = "tid")    private Long uid;    private String name;    private Integer age;    private String email;}

@TableId的type属性

常用主键策略:

描述
IdType.ASSIGN_ID(默认)基于雪花算法的策略生成数据id,与数据库id是否设置自增无关
IdType.AUTO使用数据库的自增策略,注意,该类型请确保数据库设置了id自增
@Datapublic class User {    @TableId(type = IdType.AUTO)    private Long uid;    private String name;    private Integer age;    private String email;}

3、@TbaleField

public class User {    private Long id;    @TableField("username")    private String name;    private Integer age;    private String email;}

4、@TableLogic

实现逻辑删除

在这里插入图片描述

在这里插入图片描述

public void testDeleteById(){    int result = userMapper.deleteById(1527472864163348482L);    System.out.println(result > 0 ? "删除成功!" : "删除失败!");    System.out.println("受影响的行数为:" + result);}

在这里插入图片描述

public void testSelectList(){    List users = userMapper.selectList(null);}

在这里插入图片描述

三、条件构造器

1、wapper介绍

在这里插入图片描述

2、构造器常用方法

函数名说明说明/例子
eq等于=例:eq(“name”,“zhangsan”) —> name = ‘zhangsan’
ne不等于<>例:ne(“name”,“zhangsan”) —> name <> ‘zhangsan’
gt大于>例:gt(“age”,18) —> age > 18
ge大于等于>=例:ge(“age”,18) —> age >= 18
lt小于<例:lt(“age”,18) —> age < 18
le小于等于<=例:le(“age”,18) —> age <= 18
betweenbetween 值1 and 值2例:between(“age”,10,20) —> age between 10 and 20
notBetweennot between 值1 and 值2例:notBetween(“age”,10,20) —> age not between 10 and 20
likelike ‘%值%’例:like(“name”,“强”) —> name like ‘%强%’
notLikenot like ‘%值%’例:notLike(“name”,“强”) —> name not like ‘%强%’
likeLeftlike ‘%值’例:like(“name”,“飞”) —> name like ‘%强’
likeRightlike ‘值%’例:like(“name”,“王”) —> name like ‘王%’
isNull字段 is null例:isNull(“emal”) —> email is null
isNotNull字段 is not null例:isNotNull(“emal”) —> email is not null
in字段 in (值1,值2…)例:in(“age”,{10,18,30}) —> age in (10,18,30)
notIn字段 not in (值1,值2…)例:notIn(“age”,{10,18,30}) —> age not in (10,18,30)
inSql字段 in ( sql语句 )inSql(“id”, “select id from table where name like ‘%J%’”)
—> id in (select id from table where name like ‘%J%’)
notInSql字段 not in ( sql语句 )notInSql(“id”, “select id from table where name like ‘%J%’”)
—> id not in (select id from table where name like ‘%J%’)
groupBy分组 group by 字段,…例:groupBy(“id”,“name”) —> group by id,name
orderBy排序 ordery by 字段,…例:orderBy(true,true,“id”,“name”) —> order by id asc,name asc
orderByAsc升排序 order by 字段,… asc例:orderByAsc(“id”,“name”) —> order by id,name
orderByDesc降排序 order by 字段,… desc例:orderByDesc(“id”,“name”) —> order by id desc,name desc
havinghaving (sql语句)having(“sum(age) > {0}”,18) —> having sum(age) > 18
or拼接or例:eq(“id”,1).or().eq(“name”,“老王”) —> id =1 or name = ‘老王’
andand 嵌套例:and(i -> i.eq(“name”,“李白”).ne(“status”,“活着”))
—> and (name = ’李白‘ and status <> ‘活着’)
apply拼接sql例:apply(“date_format(date_time,‘%Y-%m-%d’) = {0}”,“2002-08-08”)
—> date_fromat(date_time,‘%Y-%m-%d’) = ‘2008-08-08’
注意事项:动态入参对应{index}部分,直接写sql语句,有sql注入风险
last拼接到sql的最后例:last(“limit 5”)
注意事项:只能调用一次,多次调用以最后一次为准,有sql注入风险
exists拼接exists (sql语句)例:exists(“select id from table where age = 1”)
not exists拼接not exists (sql语句)例:not exists(“select id from table where age = 1”)
nested正常嵌套 不带and和or例:nested(i-> i.eq(“name”,“李华”).gt(“age”,20))
—> (name = “李华” and age > 20)

3、组装条件示例

条件的优先级

sql语句规则:and和or一起用,and优先级高

 @Testpublic void test01() {        QueryWrapper queryWrapper = new QueryWrapper<>();    queryWrapper.gt("age", 20)            .like("user_name", "a")            .or()            .isNotNull("email");    User user = new User();    user.setName("小明");    user.setEmail("test@atguigu.com");    int result = userMapper.update(user, queryWrapper);    System.out.println("result = " + result);}@Testpublic void test02() {    // lambda中条件优先级        QueryWrapper queryWrapper = new QueryWrapper<>();    queryWrapper.like("user_name", "a")            .and(i -> i.gt("age", 20).or().isNull("email"));    User user = new User();    user.setName("小红");    user.setEmail("test@atguigu.com");    int result = userMapper.update(user, queryWrapper);    System.out.println("result = " + result);}

Lambda表达式

@Testpublic void test3() {        String username = "a";    Integer ageBegin = null;    Integer ageEnd = 30;    //组装set子句    LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();    //避免使用字符串表示字段,防止运行时错误    queryWrapper.like(StringUtils.isNotBlank(username), User::getName, username)            .gt(ageBegin != null, User::getAge, ageBegin)            .le(ageEnd != null, User::getAge, ageEnd);    List list = userMapper.selectList(queryWrapper);    list.forEach(System.out::println);}@Testpublic void test4() {        LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();    updateWrapper.like(User::getName, "a")            //lambda表达式内的逻辑优先运算            .and(i -> i.gt(User::getAge, 20).or().isNull(User::getEmail));     updateWrapper.set(User::getName, "小黑").set(User::getEmail, "abc@atguigu.com");    int result = userMapper.update(null, updateWrapper);    System.out.println("result = " + result);}

4、自定义分页

UserMapper中定义接口方法

Page selectPageVo(@Param("page") Page page,@Param("age") Integer age);

UserMapper.xml中编写SQL

测试方法

@Testpublic void testSelectPageVo(){ //设置分页参数    Page page = new Page<>(1, 5);     userMapper.selectPageVo(page, 20);    //获取分页数据    List list = page.getRecords();     list.forEach(System.out::println);     System.out.println("当前页:"+page.getCurrent());     System.out.println("每页显示的条数:"+page.getSize());     System.out.println("总记录数:"+page.getTotal());     System.out.println("总页数:"+page.getPages());     System.out.println("是否有上一页:"+page.hasPrevious());     System.out.println("是否有下一页:"+page.hasNext());}

5、IPage的泛型转换(entity转换为vo)

// 分页查询Page userPage = super.lambdaQuery().page(new Page<>(request.getCurrent(), request.getSize()));// entity转换为voIPage infoResPage = userPage.convert(item -> Convert.convert(UserVO.class, item));

四、MyBatisX插件

1、生成逆向工程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、快速生成CRUD

MyBaitsX可以根据我们在Mapper接口中输入的方法名快速帮我们生成对应的sql语句

在这里插入图片描述

在这里插入图片描述

来源地址:https://blog.csdn.net/qq_35512802/article/details/128279171

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯