MyBatisPlus简历:
官网:https://mp.baomidou.com/
1、MyBatisPlus入门案例:
(1)创建新模块
(2)勾选Mysql技术集
(3)手动添加MyBatisPlus起步依赖
(4)在yml配置文件中设置Jdbc参数
(5)创建实体类和表结构:
(6)定义接口,继承BaseMapper<User>
(7)测试功能:
2、标准URUD制作:
(1)增:
@Test
void testSave(){
User user = new User();
user.setUname("黄宝");
user.setPassword("552166");
user.setUid("a001");
user.setGender("男");
user.setFlag("广东");
userDao.insert(user);
}
(2)删:(通过表的主键进行删除)
@Test
void testDelete(){
userDao.deleteById("a001");
}
注意:要先在实体类中对应数据库表主键的属性加上@TableId("名称");表示该属性为表主键。
(3)改:(通过表主键以及所提供的其他属性值进行修改)
如下图:是通过主键修改Uname名称,其他属性值不变,以实体类Pojo作为参数,只修改实体类所赋的值,其他属性没提供值的话保持不变。
@Test
void testUpdate(){
// 1
User user = new User();
user.setUid("a001");
user.setUname("哈罗");
userDao.updateById(user);
}
(4)查:(通过主键查询相应的记录)
@Test
void TestGet(){
User user = userDao.selectById("a001");
System.out.println(user);
}
3、Lombok (实体类简化开发)
(1)Maven导入坐标:
<!-- 实体类简化-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
(2)在实体类加上注解@Date(包含所有其他的注解,除了构造方法外),即可省略手动去创Get函数,Set函数,ToString函数等,也可以一个一个添加注解@Setter、@Getter、@ToString等
4、标准分页功能制作:
(1)设置分页拦截器
创建一个config包并创建MpConfig类:
@Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
// 1.定义Mp拦截器
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
// 2.添加具体的拦截器 分页
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return mybatisPlusInterceptor;
}
}
(2)执行分页查询
IPage page = new Page(2,3);
//页数 //每页多少条记录
userDao.selectPage(page,null);
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());
小知识点:
(1)开启MybatisPlus日志:
(2)控制器编译后输出台SpringBoot的LOGO取消:(为了让输出控制台更清晰明了)
#Spring logo取消:
mybatis-plus:
global-config:
banner: false
#Spring logo取消
spring:
main:
banner-mode: off
(3)取消日志显示:(为了让输出控制台更清晰明了)
创建logback.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>
<!--取消日志-->
5、条件查询的三种格式:
(1)按条件查询:
@Test
void Test() {
// 方式一:按条件查询
QueryWrapper qw = new QueryWrapper();
// 查询条件18岁以下
qw.lt("age",18);
List<User> userList = userDao.selectList(qw);
System.out.println(userList);
}
(2)lambda条件查询
// 方式二:lambda按条件查询
QueryWrapper<User> qw = new QueryWrapper<User>();
// 查询条件18岁以下
qw.lambda().lt(User::getUid,18);
List<User> userList = userDao.selectList(qw);
System.out.println(userList);
(3)lambda条件查询(简化)
// 方式三:lambda按条件查询 (推荐)
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
// 查询条件18岁以下
lqw.lt(User::getUid,18);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
(4)多条件的情况下:(且 或)
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
// 情况一: 小于30,大于10 (且)and
// (1)格式一
lqw.lt(User::getUid,30);
lqw.gt(User::getUid,10);
// (2)格式二
lqw.lt(User::getUid,30).gt(User::getUid,10);
// 情况二: 小于10或大于30 (或)or
lqw.lt(User::getUid,10).or().gt(User::getUid,30);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
6、条件查询null判定:
7、查询投影:(查询时只显示某一字段)
(1)查询数据库某表的某些字段:
// 字段
QueryWrapper<User> lqw = new QueryWrapper<User>();
// 只查询 id 姓名 密码
lqw.select("uid","uname","password");
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
// Pojo
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
// 只查询 id 姓名
lqw.select(User::getUid,User::getUname);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
(2)分组并查询行数:
// 查询行数
QueryWrapper<User> lqw = new QueryWrapper<User>();
lqw.select("count(*) as count,gender");
// 分组查询 以性别(男 女)
lqw.groupBy("gender");
List<Map<String,Object>> userList = userDao.selectMaps(lqw);
System.out.println(userList);
8、查询条件设置:
(1)条件:'=' eq '<' gt '>' ge '>=' le '<=' lt '在什么范围内' between
// 通过id和姓名查询对象 = 等于
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.eq(User::getUid,"a001").eq(User::getUname,"黄宝");
User userList = userDao.selectOne(lqw);
System.out.println(userList);
// 范围查询 lt 小于 le 大于(包括等号) gt ge eq 等于 between在什么范围内
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.between(User::getPassword,10,20);
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
(2)模糊查询:
// 模糊匹配 like 查询该字段含有‘0’的记录
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.like(User::getUid,"0");
// like %0
lqw.likeLeft(User::getUid,"0");
// like 0%
lqw.likeRight(User::getUid,"0");
List<User> userList = userDao.selectList(lqw);
System.out.println(userList);
官网(查询条件设置查看):
9、DQL编程控制-映射匹配兼容性:
(1)表字段名与编码属性设计不同步:
解决方案:用@TableField(value="pwd")
(2)实体类中含有属性且该属性数据库表内没定义:
解决方案:用@TableField(exist = false)
(3)查询权限:
若密码不允许被查询,可这样设置:select = false
(4)表名与编码开发设计不同步:
解决方案:用@TableName("数据库表名")