环境说明:Windows10,STS,MySql,MyBatis-Plus持久层框架
前言:
鉴于上篇博客写了Jpa框架,就顺道把MyBatis-Plus的也写了,要是有遇到的朋友可以看看,MyBaits应该都熟悉,MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网:点击这里
废话不多说,直接来吧,创建SpringBoot项目操作,可以参考我的上一篇博客,https://blog.csdn.net/Lee_SmallNorth/article/details/95724132,有很详细的过程讲解。
1.pom.xml 添加mybatis-plus,项目右键 Maven--Update Maven
<!-- mybatis-plus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.2</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
2.application.yml
#------------------------配置项目启动端口,默认8080-----------------------------
server:
port: 8090
#------------------------MySql配置-----------------------------
spring:
datasource:
url: jdbc:mysql://localhost:3306/aspuser?characterEncoding=utf8&serverTimezone=GMT%2B8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
3.model.java
注意:MyBatis-Plus框架下 表的主键默认是Long类型,并且在执行sql语句时,会根据你的实体类名称作为表名查询,所以经常会出现的错误就是找不到表。
package com.portal.model;
import java.io.Serializable;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("sys_order") //标识你数据库中表名
public class SysOrderModel implements Serializable{
private static final long serialVersionUID = 1L;
//标识主键策略
@TableId(value="id",type=IdType.AUTO)
private Integer id;
/**
* 订单编号
*/
@TableField("order_id")
private String order_id;
/**
* 订单名称
*/
@TableField("order_name")
private String order_name;
/**
* 订单价格
*/
@TableField("order_price")
private BigDecimal order_price;
/**
* 订单类型
*/
@TableField("order_type")
private String order_type;
/**
* 订单状态
*/
@TableField("order_status")
private String order_status;
/**
* 订单数量
*/
@TableField("order_number")
private Integer order_number;
}
4.Dao.java
package com.portal.dao;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.portal.model.SysOrder;
@Mapper
public interface SysOrderDao extends BaseMapper<SysOrder>{
}
5.Test.java
MyBatis-Plus有些操作提供了许多方法,可以根据需求选择不同的方法。
package com.portal;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
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.portal.dao.SysOrderDao;
import com.portal.model.SysOrderModel;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootOrderTestApplicationTests {
@Autowired
private SysOrderDao sysdao;
/**
* 保存 insert方法
*/
@Test
public void insert() {
SysOrderModel sModel = new SysOrderModel();
sModel.setOrder_id(UUID.randomUUID().toString());
sModel.setOrder_name("菠萝");
sModel.setOrder_number(200);
BigDecimal bigDecimal = new BigDecimal("4.00");
sModel.setOrder_price(bigDecimal);
sModel.setOrder_status("销售中");
sModel.setOrder_type("水果类");
int insertcount = sysdao.insert(sModel);
if (insertcount > 0) {
System.out.println("插入成功!");
}else {
System.out.println("插入失败!");
}
System.out.println("返回插入的主键:" + sModel.getId());
}
/**
* 查询方法1
*/
@Test
public void selectList()
{
List<SysOrderModel> list = sysdao.selectList(null);
list.forEach(System.out::println);
}
/**
* 查询方法2,通过多个id查询list
*/
@Test
public void selectBatchIds()
{
List<Integer> idList = new ArrayList<>();
idList.add(1);
idList.add(3);
idList.add(4);
List<SysOrderModel> list = sysdao.selectBatchIds(idList);
list.forEach(System.out::println);
}
/**
* 查询方法3,通过多个条件查询list
*/
@Test
public void selectByMap()
{
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("ordertype", "食品类");
List<SysOrderModel> list = sysdao.selectByMap(columnMap);
list.forEach(System.out::println);
}
/**
* 查询方法4,通过QueryWrapper查询条数
*/
@Test
public void selectCount()
{
int count = sysdao.selectCount(new QueryWrapper<SysOrderModel>().eq("ordertype", "食品类"));
System.out.println(count);
}
/**
* 查询方法5,通过selectMaps查询list<Map<String, Object>>
*/
@Test
public void selectMaps()
{
QueryWrapper<SysOrderModel> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("ordertype", "食品类");
List<Map<String, Object>> list = sysdao.selectMaps(queryWrapper);
list.forEach(System.out::println);
}
/**
* 查询方法6,通过QueryWrapper查询list<Object>
*/
@Test
public void selectObjs()
{
List<Object> list = sysdao.selectObjs(new QueryWrapper<SysOrderModel>().eq("ordertype", "食品类"));
list.forEach(System.out::println);
}
/**
* 查询方法7,分页查询
*/
@Test
public void selectPage()
{
int count = sysdao.selectCount(new QueryWrapper<SysOrderModel>().between("ordernumber", 90, 120).eq("ordertype", "食品类"));
IPage<SysOrderModel> page = new Page<>(1,2,count);
IPage<SysOrderModel> list = sysdao.selectPage(page, new QueryWrapper<SysOrderModel>().between("ordernumber", 90, 120).eq("ordertype", "食品类"));
System.out.println("返回数据:"+ list.getRecords());
System.out.println("总条数:"+list.getTotal());
System.out.println("当前页码:"+list.getCurrent());
System.out.println("总页码:"+list.getPages());
System.out.println("每页显示条数:"+list.getSize());
System.out.println("返回的数据:"+page.getRecords());
}
/**
* 查询方法8,分页查询
*/
@Test
public void selectMapsPage()
{
int count = sysdao.selectCount(new QueryWrapper<SysOrderModel>().between("ordernumber", 90, 120).eq("ordertype", "食品类"));
IPage<SysOrderModel> page = new Page<>(1,2,count);
IPage<Map<String, Object>> list = sysdao.selectMapsPage(page, new QueryWrapper<SysOrderModel>().between("ordernumber", 90, 120).eq("ordertype", "食品类"));
System.out.println("返回数据:"+ list.getRecords());
System.out.println("总条数:"+list.getTotal());
System.out.println("当前页码:"+list.getCurrent());
System.out.println("总页码:"+list.getPages());
System.out.println("每页显示条数:"+list.getSize());
System.out.println("返回的数据:"+page.getRecords());
}
/**
* 删除1,根据id
*/
@Test
public void delete()
{
int del = sysdao.deleteById(3);
if (del > 0) {
System.out.println("删除成功!");
}else {
System.out.println("删除失败!");
}
}
/**
* 删除2,根据QueryWrapper 自定义条件
*/
@Test
public void deletebywrapper()
{
int del = sysdao.delete(new QueryWrapper<SysOrderModel>().eq("ordertype", "不好吃"));
if (del > 0) {
System.out.println("删除成功!");
}else {
System.out.println("删除失败!");
}
}
/**
* 删除3,批量删除
*/
@Test
public void deleteBatchIds()
{
List<Integer> idList = new ArrayList<>();
idList.add(4);
idList.add(5);
int del = sysdao.deleteBatchIds(idList);
if (del > 0) {
System.out.println("删除成功!");
}else {
System.out.println("删除失败!");
}
}
/**
* 删除4,自定义条件删除
*/
@Test
public void deleteByMap()
{
Map<String, Object> columnMap = new HashMap<>();
columnMap.put("ordertype", "饮品类");
int del = sysdao.deleteByMap(columnMap);
if (del > 0) {
System.out.println("删除成功!");
}else {
System.out.println("删除失败!");
}
}
/**
* update 封装方法中做了非空校验,如果该字段为null,则不进行更新
*/
@Test
public void updateById() {
SysOrderModel sModel = new SysOrderModel();
sModel.setOrder_id(UUID.randomUUID().toString());
sModel.setOrder_name("香蕉");
sModel.setOrder_number(200);
BigDecimal bigDecimal = new BigDecimal("4.00");
sModel.setOrder_price(bigDecimal);
sModel.setOrder_status("销售中");
sModel.setOrder_type("水果类");
sysdao.updateById(sModel);
}
/**
* update 自定义条件更新
*/
@Test
public void update() {
SysOrderModel sModel = new SysOrderModel();
sModel.setOrder_id(UUID.randomUUID().toString());
sModel.setOrder_name("香蕉");
sModel.setOrder_number(200);
BigDecimal bigDecimal = new BigDecimal("4.00");
sModel.setOrder_price(bigDecimal);
sModel.setOrder_status("销售中");
sModel.setOrder_type("水果类");
sysdao.update(sModel, new QueryWrapper<SysOrderModel>().eq("orderstatus", "已下架").eq("ordertype", "食品类"));
}
}