发布技术文章,文章内首/尾句带关键词“开启掘金成长之旅!这是我参与「掘金日新计划 · 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);
}
- 结果展示:
-
问题: 要求新增一条数据的代码,结果新增了两条。
-
解决: 将此行取消勾选即可。
- 总结:
a.int insert (T t)
T:泛型,新增用来保存新增数据
int:返回值,新增成功后返回1,没有新增成功返回的是0
b.Delegate IDE build/run actions to maven
每次在运行maven工程时,会默认编译所有模块,效率非常差,运行非常慢。
如果取消勾选后找不到包,可以尝试更换idea版本或者将maven改为自己的,不使用idea自带的。
2.删除:
- 在UserTest.java文件中添加删除的测试代码:
@Test
void testDelete() {
userDao.deleteById(6);
}
- 结果展示:
- 总结:
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);
}
- 结果展示:
- 总结:
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);
}
- 结果展示:
- 总结:
List selectList(Wrapper queryWrapper);
- Wrapper:用来构建条件查询的条件,目前我们没有可直接传为Null
- List:因为查询的是所有,所以返回的数据是一个集合
(2)根据id查询:
- 在UserTest.java文件中添加新增的测试代码:
@Test
void testGetById() {
User user = userDao.selectById(2);
System.out.println(user);
}
- 结果展示:
- 总结:
T selectById (Serializable id);
- Serializable:参数类型,主键ID的值
- T:根据ID查询只会返回一条数据
二、扩展:
1.BaseMapper:
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。
运行成功。
(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标红:
UserDao是一个接口,不能实例化对象,只有在服务器启动IOC容器初始化后,由框架创建DAO接口的代理对象来注入。现在服务器并未启动,所以代理对象也未创建,IDEA查找不到对应的对象注入,所以提示标红,一旦服务启动,就能注入其代理对象,所以该错误提示不影响正常运行。