MybatisPlus学习笔记2

145 阅读4分钟

发布技术文章,文章内首/尾句带关键词“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情

一、MybatisPlus的CRUD操作。

1.新增:

  • 在UserTest.java文件中添加新增的测试代码:

首先创建User对象,然后赋予属性信息,最后调用insert方法,将user对象传入。

@Test
void testSave() {
    User user = new User();
    user.setName("zhangsan");
    user.setSex("男");
    user.setPassword("123");
    user.setAge(22);
    userDao.insert(user);
}
  • 结果展示:

image.png

  • 问题: 要求新增一条数据的代码,结果新增了两条。

  • 解决: 将此行取消勾选即可。

image.png

  • 总结:

a.int insert (T t)

T:泛型,新增用来保存新增数据

int:返回值,新增成功后返回1,没有新增成功返回的是0

b.Delegate IDE build/run actions to maven

每次在运行maven工程时,会默认编译所有模块,效率非常差,运行非常慢。

如果取消勾选后找不到包,可以尝试更换idea版本或者将maven改为自己的,不使用idea自带的。

image.png

2.删除:

  • 在UserTest.java文件中添加删除的测试代码:
@Test
void testDelete() {
    userDao.deleteById(6);
}
  • 结果展示:

image.png

  • 总结:

int deleteById (Serializable id);

Serializable:参数类型

  • String和Number是Serializable的子类,
  • Number又是Float,Double,Integer等类的父类,
  • 能作为主键的数据类型都已经是Serializable的子类,
  • MP使用Serializable作为参数类型,就好比我们可以用Object接收任何数据类型一样。

int:返回值类型,数据删除成功返回1,未删除数据返回0。

3.修改:

  • 在UserTest.java文件中添加修改的测试代码:
@Test
void testUpdate() {
    User user = new User();
    user.setId(1);
    user.setName("张三123");
    user.setPassword("321");
    user.setAge(23);
    userDao.updateById(user);
}
  • 结果展示:

image.png

  • 总结:

a.int updateById(T t);

  • T:泛型,需要修改的数据内容,注意因为是根据ID进行修改,所以传入的对象中需要有ID属性值
  • int:返回值,修改成功后返回1,未修改数据返回0

b.使用MybatisPlus修改数据时,如果未设定其它字段内容,则其他字段不会变为空而是保持原数据内容。

4.查询:

(1)查询全部:

  • 在UserTest.java文件中添加新增的测试代码:
    void testGetAll() {
        List<User> userList = userDao.selectList(null);
        System.out.println(userList);
    }
  • 结果展示:

image.png

  • 总结:

List selectList(Wrapper queryWrapper);

  • Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null
  • List:因为查询的是所有,所以返回的数据是一个集合

(2)根据id查询:

  • 在UserTest.java文件中添加新增的测试代码:
@Test
void testGetById() {
    User user = userDao.selectById(2);
    System.out.println(user);
}
  • 结果展示:

image.png

  • 总结:

T selectById (Serializable id);

  • Serializable:参数类型,主键ID的值
  • T:根据ID查询只会返回一条数据

二、扩展:

1.BaseMapper:

image.png

2.lombok:

(1)介绍:

Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。

总之,Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发。

(2)使用:

  • 在pom.xml文件中加入依赖。
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
</dependency>
  • 在实体类上加上注解:@Data。

image.png - 测试。

image.png

运行成功。

(3)Lombok常见的注解有:

  • @Setter:为模型类的属性提供setter方法
  • @Getter:为模型类的属性提供getter方法
  • @ToString:为模型类的属性提供toString方法
  • @EqualsAndHashCode:为模型类的属性提供equals和hashcode方法
  • @Data:是个组合注解,包含上面的注解的功能
  • @NoArgsConstructor:提供一个无参构造函数
  • @AllArgsConstructor:提供一个包含所有参数的构造函数

三、总结

参考:视频

1.扫描Dao接口:

Dao接口要想被容器扫描到,有两种解决方案:

  • 方案一:在Dao接口上添加@Mapper注解,并且确保Dao处在引导类所在包或其子包中

    • 该方案的缺点是需要在每一Dao接口中添加注解
  • 方案二:在引导类上添加@MapperScan注解,其属性为所要扫描的Dao所在包

    • 该方案的好处是只需要写一次,则指定包下的所有Dao接口都能被扫描到,@Mapper就可以不写。@MapperScan("com.example.dao")

2.测试文件中userDao标红:

image.png

UserDao是一个接口,不能实例化对象,只有在服务器启动IOC容器初始化后,由框架创建DAO接口的代理对象来注入。现在服务器并未启动,所以代理对象也未创建,IDEA查找不到对应的对象注入,所以提示标红,一旦服务启动,就能注入其代理对象,所以该错误提示不影响正常运行。