【Mybatis Plus】超详解-p1,docker面试题
**插入一条记录@param entity 实体对象*/// 根据 ID 修改// 根据 whereWrapper 条件,更新记录// 根据 entity 条件,删除记录// 删除(根据ID 批量删除)// 根据 ID 删除// 根据 columnMap 条件,删除记录参数说明:| 类型 | 参数名 | 描述 || Wrapper | wrapper | 实体对象封装操作类(可以为 null) |
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)
通过前面的学习,我们了解到通过继承BaseMapper就可以获取到各种各样的单表操作,接下来我们将详细讲解这些操作。
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个:
-
对象中的属性名和字段名不一致的问题(非驼峰)
-
对象中的属性字段在表中不存在的问题
@TableField(value = “email”)//指定数据库中的字段名
private String mail;
@TableField(exist = false)//该字段在数据库中不存在
private String address;
其他用法,如果想要某些数据不被查询出来,可以用:
@TableField(select = false)
private String password;
效果:
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开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
面试资料整理汇总
这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。
面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了
在这里祝大家能够拿到心仪的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!
更多推荐
所有评论(0)