password: root

2.4创建实体类

@Data

@AllArgsConstructor

@NoArgsConstructor

@TableName(“tb_user”)

public class User {

@TableId(value = “id”,type = IdType.AUTO)//@TableId 设置主键, IdType.AUTO 使用自动增长产生主键

private Long id;

private String userName;

private String password;

private String name;

private Integer age;

private String email;

}

2.5编写mapper

@Mapper

public interface UserMapper extends BaseMapper {

}

如果不添加@Mapper注解的话,可以在启动类上添加@MapperScan指定要扫描的包即可。

@SpringBootApplication

@MapperScan(“com.example.xpp.mapper”)//设置mapper接口的扫描包

public class SpringbootMybatisPlusApplication {

public static void main(String[] args) {

SpringApplication.run(SpringbootMybatisPlusApplication.class, args);

}

}

2.6编写测试用例

@SpringBootTest

class TestUserMapper {

@Autowired

private UserMapper userMapper;

@Test

public void testSelect() {

List users = userMapper.selectList(null);

for (User user : users) {

System.out.println(user);

}

}

}

输出:

User(id=1, userName=zhangsan, password=123456, name=张三, age=18, email=test1@itcast.cn)

User(id=2, userName=lisi, password=123456, name=李四, age=20, email=test2@itcast.cn)

User(id=3, userName=wangwu, password=123456, name=王五, age=28, email=test3@itcast.cn)

User(id=4, userName=zhaoliu, password=123456, name=赵六, age=21, email=test4@itcast.cn)

User(id=5, userName=sunqi, password=123456, name=孙七, age=24, email=test5@itcast.cn)

3.通用CRUD


通过前面的学习,我们了解到通过继承BaseMapper就可以获取到各种各样的单表操作,接下来我们将详细讲解这些操作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ziEUP74m-1636855746670)(C:\Users\30287\AppData\Roaming\Typora\typora-user-images\image-20211007101000793.png)]

3.1插入操作 Insert

3.1.1 方法定义

/**

  • 插入一条记录

  • @param entity 实体对象

*/

int insert(T entity);

3.1.2 insert

@SpringBootTest

class TestUserMapper {

@Autowired

private UserMapper userMapper;

@Test

public void testInsert(){

User user = new User();

user.setUserName(“xpp1”);

user.setPassword(“123456”);

user.setName(“小屁屁”);

user.setAge(23);

user.setEmail(“test6@itcast.cn”);

int insert = userMapper.insert(user);//返回数据库受影响的行数

System.out.println(insert);

System.out.println(user.getId());//自增后的id会回填到对象中,需要在相应的实体类标明自增注解

}

}

输出结果:

1

6

3.1.2 @TableField

在MP中通过@TableField注解可以指定字段的一些属性,常常解决的问题有2个:

  1. 对象中的属性名和字段名不一致的问题(非驼峰)

  2. 对象中的属性字段在表中不存在的问题

@TableField(value = “email”)//指定数据库中的字段名

private String mail;

@TableField(exist = false)//该字段在数据库中不存在

private String address;

其他用法,如果想要某些数据不被查询出来,可以用:

@TableField(select = false)

private String password;

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FcXyRX7u-1636855746679)(C:\Users\30287\AppData\Roaming\Typora\typora-user-images\image-20211007103751077.png)]

3.2更新操作 Update

在MP中,更新操作有2种,一种是根据id更新,另一种是根据条件更新。

3.2.1 方法定义

// 根据 ID 修改

int updateById(@Param(Constants.ENTITY) T entity);

// 根据 whereWrapper 条件,更新记录

int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper whereWrapper);

3.2.2 updateById

根据 ID 修改

@Test

public void testUpdateById(){

User user=new User();

user.setId(1L);//条件,根据id更新

user.setAge(19);//更新的字段

int result = userMapper.updateById(user);

System.out.println(“result===>”+result);

}

//输出:result===>1

3.2.3 update

根据 wrapper 条件,更新记录

①用QueryWrapper,只可以设置更新的条件

@Test

public void testUpdate(){

User user=new User();

user.setAge(20);

user.setPassword(“666666”);//要更新的信息

QueryWrapper wrapper=new QueryWrapper<>();

wrapper.eq(“user_name”,“zhangsan”);//根据条件更新,这里是匹配数据库中的user_name字段的值等于zhangsan

int update = userMapper.update(user, wrapper);

System.out.println(“update===>”+update);

}

//输出:update===>1

②用UpdateWrapper,不仅可以设置条件还可以设置要更新的字段

@Test

public void testUpdate2(){

UpdateWrapper wrapper=new UpdateWrapper<>();

wrapper.set(“age”,“100”).set(“password”,“999999”) //更新的字段

.eq(“user_name”,“zhangsan”); //更新的条件

int update = userMapper.update(null, wrapper);

System.out.println(“update===>”+update);

}

3.3删除操作 Delete

3.3.1 方法定义

// 根据 entity 条件,删除记录

int delete(@Param(Constants.WRAPPER) Wrapper wrapper);

// 删除(根据ID 批量删除)

int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

// 根据 ID 删除

int deleteById(Serializable id);

// 根据 columnMap 条件,删除记录

int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);

参数说明:

| 类型 | 参数名 | 描述 |

| :-: | :-: | :-: |

| Wrapper | wrapper | 实体对象封装操作类(可以为 null) |

| Collection<? extends Serializable> | idList | 主键ID列表(不能为 null 以及 empty) |

| Serializable | id | 主键ID |

| Map<String, Object> | columnMap | 表字段 map 对象 |

3.3.2 deleteById

根据 ID 删除

@Test

public void testDeleteById(){

int delete = userMapper.deleteById(7L);

System.out.println(“delete===>”+delete);

}

//输出:delete===>1

3.3.3 deleteByMap

根据 map 条件,删除记录

@Test

public void testDeleteByMap() {

Map<String, Object> map = new HashMap<>();

map.put(“user_name”, “zhangsan”);

map.put(“age”, “100”);

//根据map删除数据,多条件之间是and关系

int deleteByMap = userMapper.deleteByMap(map);

System.out.println(“deleteMap===>” + deleteByMap);

}

//输出:deleteMap===>1

3.3.4 delete

根据 entity 条件,删除记录

用法一

@Test

public void testDelete() {

QueryWrapper wrapper = new QueryWrapper<>();

wrapper.eq(“user_name”, “xpp1”)

.eq(“password”, “123456”);

//根据包装条件做删除,多条件之间是and关系

int delete = userMapper.delete(wrapper);

System.out.println(“delete===>” + delete);

}

//输出:delete===>1

用法二(更推荐)

@Test

public void testDelete() {

User user = new User();

user.setPassword(“123456”);

user.setUserName(“lisi”);

QueryWrapper wrapper = new QueryWrapper<>(user);

//根据包装条件做删除,多条件之间是and关系

int delete = userMapper.delete(wrapper);

System.out.println(“delete===>” + delete);

}

//输出:delete===>1

3.3.5 deleteBatchIds

根据 ID 批量删除

@Test

public void testDeleteBatchlds() {

//根据id集合批量删除

int deleteBatchIds = userMapper.deleteBatchIds(Arrays.asList(1L, 3L));

System.out.println(“deleteBatchIds===>” + deleteBatchIds);

}

//输出:deleteBatchIds===>2

3.4查询操作 Select

MP提供了多种查询操作,包括根据id查询、批量查询、查询单条数据、查询列表、分页查询等操作。

3.4.1 方法定义

// 根据 ID 查询

T selectById(Serializable id);

// 查询(根据ID 批量查询)

List selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

// 根据 entity 条件,查询一条记录

T selectOne(@Param(Constants.WRAPPER) Wrapper queryWrapper);

// 根据 Wrapper 条件,查询总记录数

Integer selectCount(@Param(Constants.WRAPPER) Wrapper queryWrapper);

// 根据 entity 条件,查询全部记录

List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper);

// 根据 entity 条件,查询全部记录(并翻页)

IPage selectPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);

3.4.2 selectById

根据 ID 查询

@Test

public void testSelectById() {

User user = userMapper.selectById(1L);

System.out.println(user);

}

/*输出:

User(id=1, userName=xpp1, password=null, name=西安, age=11, mail=adad, address=null)

*/

3.4.3 selectBatchIds

根据ID 批量查询

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

面试资料整理汇总

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!

ds

根据ID 批量查询

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-3ttbUYux-1711091064584)]
[外链图片转存中…(img-i6QhClAM-1711091064585)]
[外链图片转存中…(img-KR38YQMx-1711091064586)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-ZDZaYpgE-1711091064587)]

面试资料整理汇总

[外链图片转存中…(img-PdVjjDGa-1711091064587)]

[外链图片转存中…(img-vskKX6UM-1711091064588)]

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐