1. 插入操作
- 方法定义
int insert(T entity);
- 测试
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MyApplication.class)
public class TestUserCRUD {
@Resource
private UserMapper userMapper;
@Test
public void testInsert(){
User user = new User();
user.setAge(21);
user.setMail("test@qq.com");
user.setName("李白");
user.setUserName("baibai");
user.setPassword("123456");
int cnt = userMapper.insert(user);
System.out.println(cnt);
System.out.println(user.getId());//自增后的id会回填到对象中
}
}
插入操作需要注意,因为数据表中id是自增的,我们在插入的时候并没有进行设置,因此需要在属性id上添加自增标识,否则插入的id会跟数据库自增不匹配
接下来我们运行程序,查看插入情况
3. @TableField
在MP中通过@TableField注解可以指定字段的一些属性,常常解决的问题有2个:
1、对象中的属性名和字段名不一致的问题(非驼峰)
2、对象中的属性字段在表中不存在的问题
注意,这里非驼峰是值在数据表字段中使用下划线而属性中使用驼峰形式,这种MP会自动帮我们解决映射问题
非驼峰问题比如字段名称不一样,数据表是Email,而属性是Mail,这时我们就可以使用@TableField注解进行标识
在比如说我们查询出来的密码不想被人看见,就可以将其select标签设置为false,从而查询不显示。
还有就是成员变量在数据表中字段不存在,我们也可以将其exist标签设置为false,这样我们在插入的时候就不会报错。
2. 更新操作
- 根据id进行更新
int updateById(@Param(Constants.ENTITY) T entity);
@Test
public void testUpdateById(){
User user = new User();
user.setId(1L);
user.setUserName("Young");
user.setName("Adrian");
user.setPassword("666666");
int cnt = userMapper.updateById(user);
System.out.println(cnt);
}
- 根据条件进行更新
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) WrapperupdateWrapper);
@Test
public void testUpdate(){
User user = new User();
user.setUserName("fhx");//更新语句
user.setPassword("520");
user.setName("hx");
QueryWrapper wrapper = new QueryWrapper<User>();
wrapper.eq("id",1L);//更新条件
int cnt = userMapper.update(user,wrapper);
System.out.println(cnt);
3. 删除操作
- 通过id进行删除
int deleteById(Serializable id)
@Test
public void testDeleteById(){
userMapper.deleteById(6L);
}
- 通过map删除
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
@Test
public void testDeleteByMap(){
Map<String,Object> map = new HashMap<>();
map.put("user_name","sunqi");
map.put("password","123321");
//根据map删除数据,多条件之间是and关系,只有条件都满足才能删除。
userMapper.deleteByMap(map);
}
根据map删除数据,多条件之间是and关系,只有条件都满足才能删除。
- 批量删除
int delete(@Param(Constants.WRAPPER) Wrapper wrapper);
@Test
public void testSelectBatchIds(){
List<User> userList = userMapper.selectBatchIds(Arrays.asList(4l, 5l));
for (User user : userList) {
System.out.println(user);
}
}
4. 查询操作
下面演示查询一条数据,查询满足条件的人数,查询年龄包含2的模糊查询
@Test
//selectOne当查询数据超过一条会报错,不能查出
public void testSelectOne(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("user_name" ,"fhx");
User user = userMapper.selectOne(wrapper);
System.out.println(user);
}
@Test
public void testSelectCount(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age",18);//查询年龄超过18的人数
//根据条件查询条数
Long cnt = userMapper.selectCount(wrapper);
System.out.println(cnt);
}
@Test
public void testSelectList(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("age" ,"2");
List<User> userList = userMapper.selectList(wrapper);
for (User user : userList) {
System.out.println(user);
}
}
5. 分页查询
分页查询首先得设置一个分页插件
@Configuration//表明它是一个配置文件
@MapperScan("springboot.mapper")//设置mapper接口的包扫描
public class MybatisPlusConfig {
//分页插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//添加分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
//测试分页查询
@Test
public void testSelectPage(){
//直接使用Page的构造方法
Page<User> page = new Page<>(1,1);//查询第一页,第一条数据
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.like("age" ,"2");
IPage<User> userIPage = userMapper.selectPage(page,wrapper);
System.out.println("数据总条数:"+userIPage.getTotal());
System.out.println("数据总页数:"+userIPage.getPages());
System.out.println("当前页:"+userIPage.getCurrent());
System.out.println("数据总记录:"+userIPage.getRecords());
System.out.println("每页显示条数:"+userIPage.getSize());
//获取查询出来的数据集合getRecords()
List<User> records = userIPage.getRecords();
for (User record : records) {
System.out.println(record);
}
}
让我们看一下运行结果