最近要用mp
MybatisPlus是在mybatis基础上对代码进行增强,其本质并未对代码进行修改。
其特性是:
- 无侵入:只做增强不做改变,不会对现有工程产生影响
- 强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD 操作
- 支持 Lambda:编写查询条件无需担心字段写错
- 支持主键自动生成
- 内置分页插件
1.所需依赖
com.baomidou mybatis-plus-boot-starter 3.4.1 com.alibaba druid 1.1.16 因为MybatisPlus未收录到idea的系统内置配置,无法在创建项目时勾选加入如果需要使用Druid数据源,需要导入其坐标
2.配置文件
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://localhost:3306/xxx?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
# 开启mp的日志(输出到控制台)
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
3.常用功能
CRUD
新增:
void add() {
User user = new User();
user.setAge(12);
user.setName("nihao");
user.setPassword("1234");
user.setTel("1111111111");
userDao.insert(user);
log.info("新增用户==>{}",user);
}
修改:
void updateById(){
User user = new User();
user.setId(7L);
user.setAge(22);
user.setName("您好");
user.setPassword("123321");
user.setTel("13322222222");
userDao.updateById(user);
log.info("根据id修改用户信息==>{}", user);
}
查单个
void findById(){
User user = userDao.selectById(1);
log.info("根据id寻找==>{}",user);
}
查全部
void findAll(){
List<User> userList = userDao.selectList(null);//其中可设置querryWrapper
log.info("查询所有用户{}",userList);
}
删除
void deleteById(){
int deleteById = userDao.deleteById(6);
log.info("根据id删除用户");
}
分页功能
void page(){
//1.创建IPage分页对象。设置分页参数
IPage<User> page = new Page<>(1, 3);
//2.执行分页查询
userDao.selectPage(page,null);
//3.获取分页结果
log.info("当前页码值:{}",page.getCurrent());
log.info("每页显示数:{}",page.getSize());
log.info("总页数:{}",page.getPages());
log.info("总条数:{}",page.getTotal());
log.info("当前页数据:{}",page.getRecords());
}
DQL编程控制
方式一:按条件查询
void find() {
QueryWrapper<User> qw = new QueryWrapper<>();
qw.lt("age", 10);
List<User> users = userDao.selectList(qw);
log.info("按照条件查找结果==>{}", users);
}
方式二:lambda格式按条件查询
void findByLambda() {
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.lambda().lt(User::getAge, 10);
List<User> users = userDao.selectList(queryWrapper);
log.info("lambda格式按条件查询==>{}", users);
}
方式三:lambda格式按条件查询(LambdaQueryWrapper)
void findByLambda2() {
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.lt(User::getAge, 10);
List<User> users = userDao.selectList(lambdaQueryWrapper);
log.info("lambda格式按条件查询==>{}", users);
}
组合条件
and关系
void andDemo() {
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//8-18岁之间的
lambdaQueryWrapper.le(User::getAge, 18).ge(User::getAge, 8);
List<User> users = userDao.selectList(lambdaQueryWrapper);
log.info("8-18岁之间的人有:{}", users);
}
void andDemo2() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//5-18岁之间
queryWrapper.le("age", 18).ge("age", 5);
List<User> users = userDao.selectList(queryWrapper);
log.info("8-18岁之间的人有:{}", users);
}
or关系
void orDemo1() {
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.ge(User::getAge, 8).or().le(User::getAge, 18);
List<User> users = userDao.selectList(lambdaQueryWrapper);
log.info("大于8或者小于18岁的人有:{}", users);
}
null值处理
//if语句控制条件追加
void ifDemo() {
Integer minAge = 10;
Integer maxAge = null;
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.ge(null != minAge, User::getAge, minAge);
lambdaQueryWrapper.le(null != maxAge, User::getAge, maxAge);
List<User> users = userDao.selectList(lambdaQueryWrapper);
for (User user : users) {
log.info("年龄大于{}小于{}的人==>{}", minAge, maxAge, user);
}
}
//链式
void ifDemo02() {
Integer minAge = 10;
Integer maxAge = null;
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.ge(null != minAge, User::getAge, minAge).lt(null != maxAge, User::getAge, maxAge);
for (User user : userDao.selectList(lambdaQueryWrapper)) {
log.info("年龄大于{}小于{}的人==>{}", minAge, maxAge, user);
}
}