官网:MyBatis-Plus
以对象的方式操作数据库,单表几乎不写Sql.
导入jar包
说明: MybatisPlus的包 内部已经添加了Mybatis,所以包应该2选1.
com.baomidou mybatis-plus-boot-starter 3.4.3
实现POJO对象与表映射
@Data @Accessors(chain = true) @TableName("item") //对象与表一一映射 public class Item extends BasePojo{ @TableId(type = IdType.AUTO)//主键自增 //@TableField("id") //如果字段名称与属性名称一致,则省略,包含驼峰规则 private Integer id; //商品Id号 private String title; //商品标题信息 private String sellPoint; //卖点信息 private Integer price; //商品价格 private Integer num; //商品数量 private String images; //商品图片 private Integer itemCatId; //商品分类ID号 private Boolean status; //状态信息 0 下架 1 上架 }
Mapper接口继承BaseMapper接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper; //必须添加泛型,因为泛型对象与表关联 public interface ItemMapper extends BaseMapper
- { }
修改YML映射文件
#SpringBoot整合Mybatis-plus mybatis-plus: #指定别名包 type-aliases-package: com.jt.pojo #扫描指定路径下的映射文件 mapper-locations: classpath:/mappers/*.xml #开启驼峰映射 configuration: map-underscore-to-camel-case: true # 一二级缓存默认开始 所以可以简化
对象不为null的属性自动插入表中对应字段中
/**
* 2.测试数据新增入库操作
* 核心: 以对象的方式操作数据库
*/
@Test
public void test02(){
Item item = new Item();
item.setTitle("商品标题信息")
.setSellPoint("卖点信息")
.setNum(100);
itemMapper.insert(item);
}
// 查询所有数据
public void test01(){
//查询全部数据,不需要条件
List- list = itemMapper.selectList(null);
}
// 查询id=1的数据
public void test03(){
Item item = itemMapper.selectById(1);
}
/**
* 查询: 只查询主键信息,
* 适用场景: 适用关联查询!!! 主键可以被其它的关联
*/
public void test10(){
List idList = itemMapper.selectObjs(null);
}
/**
* 4.根据title/sellPoint查询数据
* 查询titile="手机" and sellPoint="贵就好"
* 核心:
* 1.以对象的方式操作数据库.
* 2.根据对象中不为null的属性,充当条件
*/
public void test04(){
//对象的方式封装数据,只能实现and连接
Item item = new Item();
item.setTitle("手机").setSellPoint("贵就好");
//条件构造器: 动态拼接where条件的 set赋值解析之后变为 =号 默认使用and进行拼接
QueryWrapper
- queryWrapper = new QueryWrapper<>(item);
List
- list = itemMapper.selectList(queryWrapper);
}
/**
* 查询 价格大于500,小于200000
* 1.条件构造器的连接符:
* 1.等号 = eq
* 2.大于 > gt
* 3.小于 < lt
* 4.大于等于 >= ge
* 5.小于等于 <= le
* 6.不等于 != ne
* 2.条件间关联用法 默认使用and连接,
* 如果使用or,则写or方法
*/
public void test05(){
QueryWrapper
- queryWrapper = new QueryWrapper<>();
queryWrapper.gt("price",500)
//.or()
.lt("price",200000);
List
- list = itemMapper.selectList(queryWrapper);
}
// 按照条件查询单条数据
public void test01(){
QueryWrapper
- queryWrapper = new QueryWrapper<>();
queryWrapper.gt("price",500)
//.or()
.lt("price",200000);
Item item = itemMapper.selectOne(queryWrapper);
}
/**
* 查询: title中包含"华为"的数据
* Sql: select * from item where title like "%华为%"
* 知识点:
* 1. 以xxx开头 "xxx%" 右侧 LikeRight
* 2. 以xxx结尾 "%xxx" 左侧 likeLeft
* 3. xxx "%xxx%" like
*/
public void test07(){
QueryWrapper
- queryWrapper = new QueryWrapper<>();
queryWrapper.like("title","华为");
List
- list = itemMapper.selectList(queryWrapper);
}
/**
* 查询: id为 1,2,3,4的数据
* 必须用引用类型的数组
* Sql: select * from item where id in (1,2,3,4)
*/
public void test08(){
Integer[] ids = {1,2,3,4}; // 不能使用基本类型int
QueryWrapper
- queryWrapper = new QueryWrapper<>();
queryWrapper.in("id",ids);
List
- list = itemMapper.selectList(queryWrapper);
//2.API2 数组转化为集合
List idList = Arrays.asList(ids);
List
- list2 = itemMapper.selectBatchIds(idList);
}
②复杂查询
/**
* 查询价格大于600的商品,并且要求按照 价格降序排列.
* Sql:select * from item where price>600 order by price desc
*/
public void test06(){
QueryWrapper- queryWrapper = new QueryWrapper();
queryWrapper.gt("price",600)
.orderByDesc("price");
List
- list = itemMapper.selectList(queryWrapper);
}
/**
* 查询: 根据对象中不为null的数据,查询数据库
* 核心知识点: 动态sql拼接
*/
public void test09(){
String title = "";
String sellPoint = "工艺好";
QueryWrapper
- queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.hasLength(title),"title",title);
queryWrapper.eq(StringUtils.hasLength(sellPoint),"sell_point",sellPoint);
List
- list = itemMapper.selectList(queryWrapper);
}
/**
* 1.获取满足条件的记录总数
* 2.进行分页操作
* 原则:
* 1.手写Sql 业务层级简单,Sql高效直观.
* 2.利用MP实现 业务层复杂, Sql不写
* Sql: select * from item limit 起始位置,条数
* @param pageResult
* @return
*/
@Override
public PageResult getItemList(PageResult pageResult) {
QueryWrapper- queryWrapper = new QueryWrapper<>();
queryWrapper.like("title", pageResult.getQuery());
//2.完成分页操作
//2.1 准备一个分页对象,MP基于初始化条件,获取分页其它数据
IPage
- page = new Page<>(pageResult.getPageNum(),
pageResult.getPageSize());
page = itemMapper.selectPage(page,queryWrapper);
//2.2 获取总数,获取记录数
long total = page.getTotal();
List
- list = page.getRecords();
return pageResult.setTotal(total).setRows(list);
}
配置文件制定数据库类型
@Configuration //标识配置类 public class MybatisPlusConfig { //MybatisPlusInterceptor MP拦截器 负责指定数据库类型 @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MARIADB)); return interceptor; } }