目录
1.新建项目
2.实体类开发:
2.1在pom.xml中增加Lombok坐标:
2.2添加Book实体类
3.数据层开发:
3.1 配置MyBatisPlus与Druid
3.2创建数据层接口
3.3写测试类
3.4点击运行:
4.数据层快速开发:
4.1配置MyBatisPlus与Druid
4.2创建数据层接口:
4.3写测试类:
4.4点击运行:
4.5 测试Dao其他功能
5.开始MV运行日志:
5.1 使用配置方式开启日志,设置日志输出方式为标准输出
5.2 去掉System.out.println(),点击运行
6.分页
6.1使用IPage封装分页数据
6.2 IPage对象中封装了分页操作中的所有数据
6.3 分页操作依赖MyBatisPlus分页拦截器实现功能
6.4借助MyBatisPlus日志查阅执行SQL语句
7.条件查询功能
7.1使用QueryWrapper对象封装查询条件
7.2推荐使用LambdaQueryWrapper对象
7.3 所有查询操作封装成方法调用
7.4查询条件支持动态条件拼装
7.5 LambdaQueryWrapper其他查询条件示例:
7.5.1 添加查询条件
7.5.2 链式调用
7.5.3 使用 OR 和 AND 条件
7.5.4 模糊查询
7.5.5 排序
7.5.6 选择特定字段
7.5.7 组合查询
7.5.8 使用 LambdaQueryWrapper 进行查询
1.新建项目
点击下一步,勾选Web下的Spring web 和 SQL下面的MySQL Driver,点击创建。
打开pomxml,添加mybatis以及druid依赖到pomxml
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.20</version> </dependency>
修改运行程序名称SpringBootJdk8SsmApplication为Application
修改application.properties配置文件的格式为 yml格式
2.实体类开发:
2.1在pom.xml中增加Lombok坐标:
Lombok,一个]ava类库,提供了一组注解,简化POJO实体类开发
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
2.2添加Book实体类
代码如下:
package com.summer.domain;
import lombok.Data;
//lombok
@Data
public class Book {
private Integer id;
private String type;
private String name;
private String description;
}
3.数据层开发:
3.1 配置MyBatisPlus与Druid
在1. 新建项目的时候,已经在pom.xml中导入MyBatisPlus与Druid对应的starter坐标,这时只需要在application.yml配置中 增加相应的配置就可以了
#端口配置 server: port: 8081 #数据库 用户名 密码 配置 spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC username: root password: root #数据库前缀配置 mybatis-plus: global-config: db-config: table-prefix: tbl_
3.2创建数据层接口
代码如下所示:
package com.summer.dao;
import com.summer.domain.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
Book getById(Integer id);
}
3.3写测试类
在test下写一个book的测试类
代码如下所示:
package com.summer.dao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BookDaoTestCase {
@Autowired
private BookDao bookDao;
@Test
void testGetById() {
System.out.println(bookDao.getById(1));
}
}
3.4点击运行:
4.数据层快速开发:
4.1配置MyBatisPlus与Druid
同 3.1
4.2创建数据层接口:
只要数据层接口集成 BaseMapper<T> 就可以了
代码如下所示:
package com.summer.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.summer.domain.Book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface BookDao extends BaseMapper<Book> {
// @Select("select * from tbl_book where id = #{id}")
// Book getById(Integer id);
}
4.3写测试类:
同3.3一样创建测试类,测试类内容如下:
package com.summer.dao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BookDaoTestCase {
@Autowired
private BookDao bookDao;
@Test
void testGetById() {
System.out.println(bookDao.selectById(1));
}
}
4.4点击运行:
4.5 测试Dao其他功能
具体代码如下:
package com.summer.dao;
import com.summer.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BookDaoTestCase {
@Autowired
private BookDao bookDao;
@Test
void testGetById() {
System.out.println(bookDao.selectById(1));
}
@Test
void testSave() {
Book book = new Book();
book.setType("历史");
book.setName("历史的温度");
book.setDescription("通过讲述历史人物的故事,展现了历史的温情和人性的光辉");
System.out.println(bookDao.insert(book));
}
@Test
void testGetAll()
{
System.out.println(bookDao.selectList(null));
}
@Test
void testUpdate(){
Book book = new Book();
book.setId(7);
book.setType("历史");
book.setName("历史的温度1");
book.setDescription("通过讲述历史人物的故事,展现了历史的温情和人性的光辉");
System.out.println(bookDao.updateById(book));
}
@Test
void testDelete()
{
bookDao.deleteById(6);
}
}
在测试保存数据功能时,要在application.yml内加一行id-type: auto ,不然系统会默认assign_id,运行会报错
5.开始MV运行日志:
5.1 使用配置方式开启日志,设置日志输出方式为标准输出
代码如下:
#端口配置 server: port: 8081 #数据库 用户名 密码 配置 spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC username: root password: root #数据库前缀配置 mybatis-plus: global-config: db-config: table-prefix: tbl_ id-type: auto configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
5.2 去掉System.out.println(),点击运行
去掉1处的System.out.println(), 执行步骤 2.点击运行,出现如下图3所示,具体的日志信息
6.分页
6.1使用IPage封装分页数据
分页操作需要设定分页对象IPage,代码如下所示:
package com.summer.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.summer.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BookDaoTestCase {
@Autowired
private BookDao bookDao;
@Test
void testGetPage() {
//分页操作需要设定分页对象IPage
IPage page = new Page(1,5);
bookDao.selectPage(page,null);
}
}
6.2 IPage对象中封装了分页操作中的所有数据
- 数据
- 当前页码值
- 每页数据总量
- 最大页码值
- 数据总量
6.3 分页操作依赖MyBatisPlus分页拦截器实现功能
分页操作是在MyBatisP1us的常规操作基础上增强得到,内部是动态的拼写SQL语句,因此需要增强对应的功能,使用MyBatisPlus拦截器实现。
创建拦截器MPConfig,如下图所示:
代码如下所示:
package com.summer.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 MPConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
6.4借助MyBatisPlus日志查阅执行SQL语句
运行testGetPage方法,打开日志,如下图所示:
7.条件查询功能
7.1使用QueryWrapper对象封装查询条件
package com.summer.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.summer.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BookDaoTestCase {
@Autowired
private BookDao bookDao;
@Test
void testGetBy()
{
QueryWrapper<Book> qw = new QueryWrapper();
qw.like("name","Spring");
bookDao.selectList(qw);
}
}
点击运行,如下图所示:
7.2推荐使用LambdaQueryWrapper对象
在下面testGetBy2测试方法中
if(name != null){
lqw.like( Book::getName,name);
}
和
lqw.like(name != null, Book::getName,name);
表达的意思是一样的, lqw.like(name != null, Book::getName,name); 表达的意思就是 当name 不等于 null的时候 sql执行like功能
package com.summer.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.summer.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BookDaoTestCase {
@Autowired
private BookDao bookDao;
@Test
void testGetBy2()
{
String name = null;
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
// if(name != null){
// lqw.like( Book::getName,name);
// }
lqw.like(name != null, Book::getName,name);
bookDao.selectList(lqw);
}
}
针对testGetBy2测试方法,点击运行,如下图所示,没有执行like条件语句:
如果testGetBy2测试方法里面的name变量赋上值,点击运行,如下图所示,执行了like语句:
7.3 所有查询操作封装成方法调用
分页查询Page所支持的函数如下所示
package com.summer.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.summer.domain.Book;
import org.apache.logging.log4j.util.Strings;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BookDaoTestCase {
@Autowired
private BookDao bookDao;
@Test
void testGetByCondition()
{
IPage page = new Page(1,2);
String name = "历史";
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
lqw.like(name != null, Book::getName,name);
bookDao.selectPage(page,lqw);
System.out.println( page.getCurrent());//当前页
System.out.println(page.getPages());//页数
System.out.println(page.getSize());//每页显示数据条数
System.out.println(page.getTotal());//总计数据条数
System.out.println(page.getRecords());//当前页的所有记录
}
}
点击运行,如下图所示:
7.4查询条件支持动态条件拼装
package com.summer.dao;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.summer.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class BookDaoTestCase {
@Autowired
private BookDao bookDao;
@Test
void testGetByCondition()
{
IPage page = new Page(1,5);
String name = "历史";
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<Book>();
lqw.like(name != null, Book::getName,name);
bookDao.selectPage(page,lqw);
}
}
7.5 LambdaQueryWrapper其他查询条件示例:
7.5.1 添加查询条件
- 使用 Lambda 表达式添加条件,例如,添加一个条件来查询用户的年龄大于 18:
queryWrapper.gt(User::getAge, 18); // gt 表示 greater than
7.5.2 链式调用
LambdaQueryWrapper
支持链式调用,可以连续添加多个条件:
queryWrapper
.eq(User::getName, "张三") // eq 表示 equal
.lt(User::getAge, 30); // lt 表示 less than
7.5.3 使用 OR 和 AND 条件
- 可以添加 OR 或 AND 条件组:
queryWrapper
.eq(User::getName, "张三")
.and(w -> w.lt(User::getAge, 30))
.or(w -> w.gt(User::getSalary, 5000));
7.5.4 模糊查询
进行模糊查询,例如,查询用户名包含 "user" 的用户:
queryWrapper.like(User::getName, "user");
7.5.5 排序
对查询结果进行排序:
queryWrapper.orderByAsc(User::getAge); // 升序 queryWrapper.orderByDesc(User::getSalary); // 降序
7.5.6 选择特定字段
选择查询结果中的特定字段:
queryWrapper.select(User::getId, User::getName); // 只选择 id 和 name 字段
7.5.7 组合查询
可以组合多个条件,例如,组合 IN 和 LIKE:
queryWrapper
.in(User::getId, Arrays.asList(1, 2, 3))
.like(User::getName, "user");
7.5.8 使用 LambdaQueryWrapper 进行查询
最后,你可以使用 LambdaQueryWrapper
与 MyBatis-Plus 的 Mapper 接口一起使用,执行查询:
List<User> users = userMapper.selectList(queryWrapper);