SpringBoot项目搭建,基于MyBatis-Plus实现增删改查

环境说明: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


		
			com.baomidou
			mybatis-plus-boot-starter
			3.1.2
		
		
			com.h2database
			h2
			runtime
		

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{

}

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 list = sysdao.selectList(null);
		list.forEach(System.out::println);
	}
	/**
	 * 查询方法2,通过多个id查询list
	 */
	@Test
	public void selectBatchIds()
	{
		List idList = new ArrayList<>();
		idList.add(1);
		idList.add(3);
		idList.add(4);
		List list = sysdao.selectBatchIds(idList);
		list.forEach(System.out::println);
	}
	/**
	 * 查询方法3,通过多个条件查询list
	 */
	@Test
	public void selectByMap()
	{
		Map columnMap  = new HashMap<>();
		columnMap.put("ordertype", "食品类");
		List list = sysdao.selectByMap(columnMap);
		list.forEach(System.out::println);
	}
	/**
	 * 查询方法4,通过QueryWrapper查询条数
	 */
	@Test
	public void selectCount()
	{
		int count = sysdao.selectCount(new QueryWrapper().eq("ordertype", "食品类"));
		System.out.println(count);
	}
	/**
	 * 查询方法5,通过selectMaps查询list>
	 */
	@Test
	public void selectMaps()
	{
		QueryWrapper queryWrapper = new QueryWrapper<>();
		queryWrapper.eq("ordertype", "食品类");
		List> list = sysdao.selectMaps(queryWrapper);
		list.forEach(System.out::println);
	}
	/**
	 * 查询方法6,通过QueryWrapper查询list
	 */
	@Test
	public void selectObjs()
	{
		List list = sysdao.selectObjs(new QueryWrapper().eq("ordertype", "食品类"));
		list.forEach(System.out::println);
	}
	
	/**
	 * 查询方法7,分页查询
	 */
	@Test
	public void selectPage()
	{
		int count = sysdao.selectCount(new QueryWrapper().between("ordernumber", 90, 120).eq("ordertype", "食品类"));
		IPage page = new Page<>(1,2,count);
		IPage list = sysdao.selectPage(page, new QueryWrapper().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().between("ordernumber", 90, 120).eq("ordertype", "食品类"));
		IPage page = new Page<>(1,2,count);
		IPage> list = sysdao.selectMapsPage(page, new QueryWrapper().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().eq("ordertype", "不好吃"));
		if (del > 0) {
			System.out.println("删除成功!");
		}else {
			System.out.println("删除失败!");
		}
		
	}
	/**
	 * 删除3,批量删除
	 */
	@Test
	public void deleteBatchIds()
	{
		List 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 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().eq("orderstatus", "已下架").eq("ordertype", "食品类"));
	}

	
}
 
  

总结:结合Jpa和MyBatis Plus两者来说,我比较推荐MyBatis Plus,方法灵活、全面,其它可以多参考官方文档。

以上方法亲测有效,如果问题可下方回复,

不当之处,请多指教。

你可能感兴趣的:(SpringBoot)