MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
生成的SQL: select id,name,age,email from user where id = ?
Map map = userMapper.selectMapById(1l);
System.out.println(map);
结果:
// {name=test, id=1, age=18, email=test1@baomidou.com}
Set keySet = map.keySet();
System.out.println(keySet);
结果:
// [name, id, age, email]
生成的SQL: SELECT id,name,age,email FROM user
List list = userMapper.selectList(null);
list.forEach(System.out::println);
结果:
//User(id=6, name=Jack, age=20, email=test2@baomidou.com)
//User(id=7, name=Sandy, age=21, email=test4@baomidou.com)
//User(id=8, name=Jone, age=18, email=test1@baomidou.com)
//User(id=9, name=Tom, age=28, email=test3@baomidou.com)
生成的SQL: SELECT id,name,age,email FROM user WHERE name = ? AND age = ?
Map map = new HashMap<>();
map.put("name","Billie");
map.put("age",24);
List userList = userMapper.selectByMap(map);
userList.forEach(System.out::println);
结果:
//User(id=2, name=Billie, age=24, email=test5@baomidou.com)
生成的SQL: SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? , ? )
List list = Arrays.asList(1l, 2l, 3l, 4l);
List users = userMapper.selectBatchIds(list);
users.forEach(System.out::println);
结果:
// User(id=1, name=Risc, age=18, email=test1@baomidou.com)
// User(id=2, name=Billie, age=24, email=test5@baomidou.com)
// User(id=4, name=Tom, age=21, email=test4@baomidou.com)
生成的SQL: SELECT id,name,age,email FROM user WHERE id=?
User user = userMapper.selectById(2l);
System.out.println(user);
结果:
// User(id=2, name=Billie, age=24, email=test5@baomidou.com)
生成的SQL: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
User user = new User();
user.setName("张三");
user.setAge(20);
user.setEmail("2856479@qq.com");
int result = userMapper.insert(user);
System.out.println("result:" + result);
System.out.println("id:" + user.getId());
结果:
// result = 1
// id = 192168011234 这是雪花算法生成的,默认使用雪花算法生成id
生成的SQL: INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
List list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setName("ylh" + i);
user.setAge(20 + i);
user.setEmail("ylh@qq.com" + i);
list.add(user);
}
boolean result = userService.saveBatch(list);
System.out.println("result:" + result);
结果:
// result:true
生成的SQL: DELETE FROM user WHERE id=?
int result = userMapper.deleteById(1517498273672314882L);
System.out.println("result:" + result);
结果:
// result: 1
生成的SQL: DELETE FROM user WHERE name = ? AND age = ?
Map map = new HashMap<>();
map.put("name","张三");
map.put("age",20);
int result = userMapper.deleteByMap(map);
System.out.println("result:" + result);
结果:
// result: 1
生成的SQL: DELETE FROM user WHERE id IN ( ? , ? )
List list = Arrays.asList(1l,2l, 3l);
int result = userMapper.deleteBatchIds(list);
System.out.println("result:" + result);
结果:
result:3
生成的SQL: UPDATE t_user SET is_deleted=1 WHERE id IN ( ? , ? , ? ) AND is_deleted=0
List list = Arrays.asList(1l,2l, 3l);
int result = userMapper.deleteBatchIds(list);
System.out.println("result:" + result);
结果:
// result:3
生成的SQL: UPDATE user SET name= ? (这就是没有设置Id的后果)
User user = new User();
user.setName("TOP1");
int result = userMapper.updateById(user);
System.out.println("result:" + result);
结果:
// result:3
生成的SQL: UPDATE user SET name=? WHERE id=?
User user = new User();
user.setId(1l);
user.setName("TOP1");
int result = userMapper.updateById(user);
System.out.println("result:" + result);
结果:
// result:1
在此之前先看一张图:

在真正开发的过程中,组装条件是常见的功能,而这些条件数据来源于用户输入,是可选的,因此我们在组装这些条件时,必须先判断用户是否选择了这些条件,若选择则需要组装该条件,若没有选择则一定不能组装,以免影响SQL执行的结果。我们可以使用带condition参数的重载方法构建查
询条件,简化代码的编写。
生成的SQL: SELECT id,name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.like("name","a")
.between("age",20,30)
.isNotNull("email");
List list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
结果:
// User(id=4, name=Sandy, age=21, email=test4@baomidou.com, isDeleted=0)
生成的SQL: SELECT id,name,age,email,is_deleted FROM t_user WHERE is_deleted=0 ORDER BY age DESC,id ASC
QueryWrapper queryMapper = new QueryWrapper<>();
queryMapper.orderByDesc("age")
.orderByAsc("id");
List list = userMapper.selectList(queryMapper);
list.forEach(System.out::println);
结果:
// User(id=5, name=Billie, age=24, email=test5@baomidou.com, isDeleted=0)
// User(id=4, name=Sandy, age=21, email=test4@baomidou.com, isDeleted=0)
// User(id=6, name=张三, age=20, email=2856479@qq.com, isDeleted=0)
// User(id=7, name=张三, age=20, email=2856479@qq.com, isDeleted=0)
// User(id=8, name=张三, age=20, email=2856479@qq.com, isDeleted=0)
生成的SQL: SELECT name,age,email FROM t_user WHERE is_deleted=0
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.select("name","age","email");
List 生成的SQL: SELECT id,name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (id IN (select id from t_user where id <= 9))
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.inSql("id","select id from t_user where id <= 9");
List list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
结果:
// User(id=3, name=Tom, age=28, email=test3@baomidou.com, isDeleted=0)
// User(id=4, name=Bngle, age=21, email=test4@baomidou.com, isDeleted=0)
// User(id=5, name=Billie, age=24, email=test5@baomidou.com, isDeleted=0)
// User(id=6, name=张三, age=20, email=2856479@qq.com, isDeleted=0)
// User(id=7, name=张三, age=20, email=2856479@qq.com, isDeleted=0)
// User(id=8, name=张三, age=20, email=2856479@qq.com, isDeleted=0)
// User(id=9, name=测试update2, age=23, email=test@qq.com, isDeleted=0)
生成的SQL: SELECT id,name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (name LIKE ? AND age <= ?)
String username = "a";
Integer ageBegin = null;
Integer ageEnd = 30;
QueryWrapper queryWrapper = new QueryWrapper<>();
// isNotBlank判断某个字符串是否不为 空、不为null、不为空白字符串
if (StringUtils.isNotBlank(username)){
queryWrapper.like("name",username);
}
if (ageBegin != null){
queryWrapper.ge("age",ageBegin);
}
if (ageEnd != null){
queryWrapper.le("age",ageEnd);
}
List list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
结果:
// User(id=10, name=测试update2, age=18, email=test@qq.com, isDeleted=0)
生成的SQL: SELECT id,name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (name LIKE ? AND age <= ?)
String username = "a";
Integer ageBegin = null;
Integer ageEnd = 30;
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(username),"name",username)
.ge(ageBegin!=null,"age",ageBegin)
.le(ageEnd!=null,"age",ageEnd);
List list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
结果:
// User(id=10, name=测试update2, age=18, email=test@qq.com, isDeleted=0)
生成的SQL: SELECT id,name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (name LIKE ? AND age <= ?)
String username = "a";
Integer ageBegin = null;
Integer ageEnd = 30;
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(username),User::getName,username)
.ge(ageBegin!=null,User::getAge,ageBegin)
.le(ageEnd!=null,User::getAge,ageEnd);
List list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
结果:
// User(id=10, name=测试update2, age=18, email=test@qq.com, isDeleted=0)
生成的SQL: UPDATE t_user SET is_deleted=1 WHERE is_deleted=0 AND (email IS NULL)
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.isNull("email");
int result = userMapper.delete(queryWrapper);
System.out.println("result:" + result);
结果:
// result:1
生成的SQL: UPDATE t_user SET name=? WHERE is_deleted=0 AND (age > ? AND name LIKE ? OR email IS NULL)
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age",20)
.like("name","a")
.or()
.isNull("email");
User user = new User();
user.setName("Angle");
int result = userMapper.update(user, queryWrapper);
System.out.println("result:" + result);
结果:
// result:1
生成的SQL: UPDATE t_user SET name=?, email=? WHERE is_deleted=0 AND (name LIKE ? AND (age >= ? OR email IS NULL))
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.like("name","a")
.and(i->i.ge("age",20).or().isNull("email"));
User user = new User();
user.setName("测试update2");
user.setEmail("test@qq.com");
int result = userMapper.update(user, queryWrapper);
System.out.println("result:" + result);
结果:
// result:1
生成的SQL: UPDATE t_user SET name=?,email=? WHERE is_deleted=0 AND (name LIKE ? AND (age >= ? OR email IS NULL))
UpdateWrapper updateWrapper = new UpdateWrapper<>();
updateWrapper.like("name","a")
.and(i -> i.ge("age",20).or().isNull("email"));
updateWrapper.set("name","小黑").set("email","abc@qq.com");
int result = userMapper.update(null, updateWrapper);
System.out.println("result:" + result);
结果:
// result:1
生成的SQL: UPDATE t_user SET name=?,email=? WHERE is_deleted=0 AND (name LIKE ? AND (age >= ? OR email IS NULL))
LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(User::getName,"a")
.and(i -> i.ge(User::getAge,20).or().isNull(User::getEmail));
updateWrapper.set(User::getName,"小黑").set(User::getEmail,"abc@qq.com");
int result = userMapper.update(null, updateWrapper);
System.out.println("result:" + result);
结果:
// result:1