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

<!-- 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", "食品类"));
	}

	
}

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

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

不当之处,请多指教。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值