东莞港货网站建设,可以做h5游戏的网站,郑州官网seo,抖音logo在线设计生成器免费这里写目录标题1.MyBatisPlus概述2.MyBatisPlus的开发步骤2.1 MyBatisPlus的CRUD操作2.2 MyBatisPlus的分页查询3.MyBatisPlus的DQL编程控制(封装sql)3.1 条件查询方式3.1.1 条件查询3.1.2 组合条件3.1.3 Null值处理3.2 查询投影-设置【查询字段、分组、分页】3.2.1 查询结果包…
这里写目录标题1.MyBatisPlus概述2.MyBatisPlus的开发步骤2.1 MyBatisPlus的CRUD操作2.2 MyBatisPlus的分页查询3.MyBatisPlus的DQL编程控制(封装sql)3.1 条件查询方式3.1.1 条件查询3.1.2 组合条件3.1.3 Null值处理3.2 查询投影-设置【查询字段、分组、分页】3.2.1 查询结果包含模型类中部分属性3.2.2 查询结果包含模型类中未定义的属性3.3 查询条件设定1.MyBatisPlus概述
一、MyBatisPlus介绍 MyBatisPlus简称MP是基于MyBatis框架基础上开发的增强型工具旨在简化开发、提高效率 官网 https://mybatis.plus/ https://mp.baomidou.com/ 二、MyBatisPlus特性
无侵入只做增强不做改变不会对现有工程产生影响强大的 CRUD 操作内置通用 Mapper少量配置即可实现单表CRUD 操作支持 Lambda编写查询条件无需担心字段写错支持主键自动生成内置分页插件…
2.MyBatisPlus的开发步骤
前提:当前项目使用了mybatis作为持久层框架
步骤一:引入依赖
dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.4.1/version
/dependency步骤二:继承BaseMapper接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
Mapper
public interface UserMapper extends BaseMapperUser {}2.1 MyBatisPlus的CRUD操作
/**
* 新增* insert(T t);*/
Test
void save() {User user new User();user.setName(黑马程序员);user.setPassword(itheima);user.setAge(12);user.setTel(4006184000);userDao.insert(user);
}/*** 根据主键删除* deleteById(Serializable id);*/
Test
void deleteById() {userDao.deleteById(1625801212297658370L);
}/*** 根据条件删除* delete(Param(ew) WrapperT queryWrapper);*/
Test
void deleteByCondition() {QueryWrapperUser query new QueryWrapper();query.eq(age, 12);userDao.delete(query);
}/*** 根据主键修改* updateById(Param(et) T entity);*/
Test
void updateById() {User user new User();user.setId(2L);// 仅对设置的字段进行修改user.setName(王晓峰);userDao.updateById(user);
}/*** 根据条件修改* update(Param(et) T entity, Param(ew) WrapperT updateWrapper);*/
Test
void updateByCondition() {// 修改内容:将name改为Mr.WangUser user new User();user.setName(Mr.Wang);// 修改条件:年龄为12岁UpdateWrapperUser update new UpdateWrapper();update.eq(age, 12);userDao.update(user, update);
}/*** 查询所有* selectList(Param(ew) WrapperT queryWrapper);*/
Test
void selectList() {// 方式一ListUser users userDao.selectList(null);System.out.println(users);// 方式二ListUser users_2 userDao.selectList(new QueryWrapper());System.out.println(users_2);
}/*** 根据条件查询* selectList(Param(ew) WrapperT queryWrapper);*/
Test
void selectListByCondition() {QueryWrapperUser query new QueryWrapper();query.eq(age, 12);ListUser users_2 userDao.selectList(query);System.out.println(users_2);
}/*** 根据条件分页查询* 前提:需要设置分页拦截器* selectPage(E page, Param(ew) WrapperT queryWrapper);*/
Test
void selectPageByCondition() {QueryWrapperUser query new QueryWrapper();query.eq(age, 12);PageUser userPage userDao.selectPage(new Page(1, 2), query);System.out.println(userPage);
}2.2 MyBatisPlus的分页查询
一、设置分页拦截器(交给Spring管理)
package com.itheima.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;Configuration
public class MybatisPlusConfig {Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){//1 创建MybatisPlusInterceptor拦截器对象MybatisPlusInterceptor mpInterceptornew MybatisPlusInterceptor();//2 添加分页拦截器mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mpInterceptor;}
}二、执行分页查询
//分页查询
Test
void testSelectPage(){//1 创建IPage分页对象,设置分页参数IPageUser pagenew Page(1,3);//2 执行分页查询userDao.selectPage(page,null);//3 获取分页结果System.out.println(当前页码值page.getCurrent());System.out.println(每页显示数page.getSize());System.out.println(总页数page.getPages());System.out.println(总条数page.getTotal());System.out.println(当前页数据page.getRecords());
}三、开启MyBatisPlus日志
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezoneUTCusername: rootpassword: root
# 开启mp的日志输出到控制台
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl四、解决日志打印过多问题
取消初始化spring日志打印 做法在resources下新建一个logback.xml文件名称固定内容如下
?xml version1.0 encodingUTF-8?
configuration/configuration取消SpringBoot启动banner图标
spring:main:banner-mode: off # 关闭SpringBoot启动图标(banner)取消MybatisPlus启动banner图标
# mybatis-plus日志控制台输出
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:banner: off # 关闭mybatisplus启动图标3.MyBatisPlus的DQL编程控制(封装sql)
3.1 条件查询方式
MyBatisPlus将书写复杂的SQL查询条件进行了封装使用编程的形式完成查询条件的组合
3.1.1 条件查询
一、按条件查询
//方式一按条件查询
QueryWrapperUser qwnew QueryWrapper();
qw.lt(age, 18);
ListUser userList userDao.selectList(qw);
System.out.println(userList);二、lambda格式按条件查询
//方式二lambda格式按条件查询
QueryWrapperUser qw new QueryWrapperUser();
qw.lambda().lt(User::getAge, 10);
ListUser userList userDao.selectList(qw);
System.out.println(userList);三、lambda格式按条件查询推荐
//方式三lambda格式按条件查询
LambdaQueryWrapperUser lqw new LambdaQueryWrapperUser();
lqw.lt(User::getAge, 10);
ListUser userList userDao.selectList(lqw);
System.out.println(userList);3.1.2 组合条件
一、并且关系(and)
//并且关系
LambdaQueryWrapperUser lqw new LambdaQueryWrapperUser();
//并且关系10到30岁之间
lqw.lt(User::getAge, 30).gt(User::getAge, 10);
ListUser userList userDao.selectList(lqw);
System.out.println(userList);二、或者关系(or)
//或者关系
LambdaQueryWrapperUser lqw new LambdaQueryWrapperUser();
//或者关系小于10岁或者大于30岁
lqw.lt(User::getAge, 10).or().gt(User::getAge, 30);
ListUser userList userDao.selectList(lqw);
System.out.println(userList);3.1.3 Null值处理
一、if语句控制条件追加
Integer minAge10; //将来有用户传递进来,此处简化成直接定义变量了
Integer maxAgenull; //将来有用户传递进来,此处简化成直接定义变量了
LambdaQueryWrapperUser lqw new LambdaQueryWrapperUser();
if(minAge!null){lqw.gt(User::getAge, minAge);
}
if(maxAge!null){lqw.lt(User::getAge, maxAge);
}
ListUser userList userDao.selectList(lqw);
userList.forEach(System.out::println);二、条件参数控制
Integer minAge10; //将来有用户传递进来,此处简化成直接定义变量了
Integer maxAgenull; //将来有用户传递进来,此处简化成直接定义变量了
LambdaQueryWrapperUser lqw new LambdaQueryWrapperUser();
//参数1如果表达式为true那么查询才使用该条件
lqw.gt(minAge!null,User::getAge, minAge);
lqw.lt(maxAge!null,User::getAge, maxAge);
ListUser userList userDao.selectList(lqw);
userList.forEach(System.out::println);三、条件参数控制链式编程
Integer minAge10; //将来有用户传递进来,此处简化成直接定义变量了
Integer maxAgenull; //将来有用户传递进来,此处简化成直接定义变量了
LambdaQueryWrapperUser lqw new LambdaQueryWrapperUser();
//参数1如果表达式为true那么查询才使用该条件
lqw.gt(minAge!null,User::getAge, minAge).lt(maxAge!null,User::getAge, maxAge);
ListUser userList userDao.selectList(lqw);
userList.forEach(System.out::println);3.2 查询投影-设置【查询字段、分组、分页】
3.2.1 查询结果包含模型类中部分属性
/*LambdaQueryWrapperUser lqw new LambdaQueryWrapperUser();
lqw.select(User::getId, User::getName, User::getAge);*/
//或者
QueryWrapperUser lqw new QueryWrapperUser();
lqw.select(id, name, age, tel);
ListUser userList userDao.selectList(lqw);
System.out.println(userList);3.2.2 查询结果包含模型类中未定义的属性
QueryWrapperUser lqw new QueryWrapperUser();
lqw.select(count(*) as count, tel);
lqw.groupBy(tel);
ListMapString, Object userList userDao.selectMaps(lqw);
System.out.println(userList);3.3 查询条件设定
多条件查询有哪些组合
范围匹配 、 、between模糊匹配like空判定null包含性匹配in分组group排序order……