Mybatis-Plus系统化学习之环境准备与简单使用
1.背景
平时在开发中会经常用到单表的CRUD操作
其实,这些单表的CRUD,完全不需要我们写sql,可以使用mybatis-plus自动生成,不但高效而且不容用出错!
2.mybatis-plus的强大
mybatis可以根据数据库的设计一键生成实体、mapper、service、controller,
如果自己定义了模板,还可以实现对单表的上传、下载、单表的接口访问等
3.环境准备springboot整合mybatis-plus
1.准备数据库,示例中数据库名称为mp-data
2.导入数据到mp-data中用于测试使用
案例中以系统用户为例讲解,导入数据脚本如下
/*
Navicat MySQL Data Transfer Source Server : 127.0.0.1
Source Server Version : 50525
Source Host : localhost:3306
Source Database : mp-data Target Server Type : MYSQL
Target Server Version : 50525
File Encoding : 65001 Date: 2020-11-06 21:40:57
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(64) DEFAULT NULL,
`version` int(64) DEFAULT NULL,
`gender` int(32) DEFAULT NULL,
`age` int(32) DEFAULT NULL,
`position` varchar(64) DEFAULT NULL,
`account` varchar(255) DEFAULT NULL,
`password` varchar(225) DEFAULT NULL,
`status` varchar(64) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`type` varchar(64) DEFAULT NULL COMMENT '类型',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4; -- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES ('1', '张九', '3', '0', '100', '运维部经理', 'sff', '123456', '启用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('2', '李四', '2', '0', '45', '项目经理', 'agfsg', '123456', '启用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('3', '王五', '4', '0', '76', '项目经理', 'asgag', '123456', '启用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('4', '赵六', '5', '0', '12', '运维工程师', '5sf', '123456', '启用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('5', '张无忌', null, '0', '15', '运维工程师', 'as5f', '123456', '启用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('6', '赵敏', null, '1', '14', '运维工程师', 'asefga45', '123456', '启用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('7', '金毛狮王', null, '1', '45', '运维工程师', '54a5', '123456', '启用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('8', '孙悟空', null, '1', '76', '运维工程师', '64asf', '123456', '启用', '2019-01-12 12:00:00', null, null);
INSERT INTO `sys_user` VALUES ('9', '猪八戒', null, '1', '14', '运维工程师', 'asg45', '123456', '启用', '2019-01-12 12:00:00', null, null);
3.构建springboot maven项目,名称为mp-demo,结构如下
4.引入pom.xm中引入jar包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.ldp</groupId>
<artifactId>mp-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mp-demo</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>11</java.version>
</properties> <dependencies> <!--链接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.2</version>
</dependency> <!-- mybatis-plus包-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency> <!--数据库驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<!-- xml放在java目录下-->
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<!--指定资源的位置(xml放在resources下,可以不用指定)-->
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
</project>
5.springboot主配置文件application.yml,其中有mybatis-plus的配置,有说明认真看一下,如下
# 配置端口
server:
port: 8099
servlet:
context-path: /api spring:
# 配置数据源
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mp-data?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&
username: root
password: admin # mybatis-plus相关配置
mybatis-plus:
# xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
mapper-locations: classpath:mapper/*.xml
# 以下配置均有默认值,可以不设置
global-config:
db-config:
#主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type: auto
#字段策略 IGNORED:"忽略判断" NOT_NULL:"非 NULL 判断") NOT_EMPTY:"非空判断"
field-strategy: NOT_EMPTY
#数据库类型
db-type: MYSQL
configuration:
# 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
map-underscore-to-camel-case: true
# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
call-setters-on-nulls: true
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl logging:
config: classpath:logback.xml
6.日志文件logback.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!-- 定义日志的根目录 -->
<property name="LOG_HOME" value="logs"/>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}-[%t]-[ %-5level ] [ %logger{50} ] - %msg%n</pattern>
<charset>utf8</charset>
</encoder>
</appender> <!-- aop日志输出-mms -->
<appender name="log-all" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{MM-dd HH:mm:ss.SSS}-[%t]-[%-5level]-[%logger{30}] - %msg%n</pattern>
<charset>utf8</charset>
</encoder>
<file>./${LOG_HOME}/log-all.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/log-all-%d{yyyy-MM-dd}-%i.log.zip</fileNamePattern>
<maxHistory>30</maxHistory>
<totalSizeCap>6GB</totalSizeCap>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender> <!--输出到error-all-->
<appender name="error-all" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/error-all.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error-all-%d{yyyy-MM-dd}-%i.log.zip</fileNamePattern>
<MaxHistory>30</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -[%t]- [ %-5level ] - %msg%n</pattern>
</layout>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender> <!-- 基础日志输出级别 -->
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="log-all"/>
<appender-ref ref="error-all"/>
</root> </configuration>
7.操作的数据库实体对象SysUser.java如下
注意为了后面编写代码方便,开启了链式编程,即增加了注解:@Accessors(chain = true),表示开启链式编程默认是关闭的;
package com.ldp.entity; import lombok.Data;
import lombok.experimental.Accessors; import java.util.Date; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 11/06 8:55
* @description
*/
@Data
@Accessors(chain = true)
public class SysUser { private Integer id; private Integer version; private Integer age; private Integer gender; private String name; private String position; private String account; private String password; private String status; private String type; private Date createTime; private Date updateTime; }
8.SysUserMapper.java接口,主要是继承了BaseMapper<SysUser>,全靠它自动帮我们完成了单表的CRUD
package com.ldp.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ldp.entity.SysUser; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 11/06 8:54
* @description
*/
public interface SysUserMapper extends BaseMapper<SysUser> {
}
9.启动类文件如下,主要是启动类上加了扫描mapper接口的配置
@MapperScan({"com.ldp.mapper"})
package com.ldp; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@MapperScan({"com.ldp.mapper"})
public class MpDemoApplication {
/**
* maven仓库地址
* https://mvnrepository.com/
*/
public static void main(String[] args) {
SpringApplication.run(MpDemoApplication.class, args);
} }
到此基本环境就准备完了,别看我什么代码都没写,只是弄了一个结构,
但是我告诉你SysUser表的所有增删改查都已经实现了,
下面大家可以看一下测试怎么使用SysUserMapper完成增删改查的,草鸡简单额
3.基本crud实现
什么代码都不用写,基本增删改查就已经有了
测试代码如下:
package com.ldp.demo01; import com.ldp.entity.SysUser;
import com.ldp.mapper.SysUserMapper;
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 java.util.List; /**
* @author 姿势帝-博客园
* @address https://www.cnblogs.com/newAndHui/
* @WeChat 851298348
* @create 11/06 9:43
* @description mybatis-plus 快速入门使用基本的CRUD
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class BaseCrudTest {
@Autowired
private SysUserMapper sysUserMapper; /**
* 增加
* <p>
* ==> Preparing: INSERT INTO sys_user ( age, name ) VALUES ( ?, ? )
* ==> Parameters: 18(Integer), 李东平(String)
*/
@Test
public void test() {
int row = sysUserMapper.insert(new SysUser().setName("李东平").setAge(18));
System.out.println("受影响行数:" + row);
} /**
* 根据id删除
* <p>
* ==> Preparing: DELETE FROM sys_user WHERE id=?
* ==> Parameters: 18(Integer)
*/
@Test
public void deleteById() {
int row = sysUserMapper.deleteById(18);
System.out.println("受影响行数:" + row);
} /**
* 根据id修改
* <p>
* ==> Preparing: UPDATE sys_user SET name=? WHERE id=?
* ==> Parameters: 李东平->ldp(String), 20(Integer)
* <== Updates: 1
*/
@Test
public void updateById() {
int row = sysUserMapper.updateById(new SysUser().setName("李东平->ldp").setId(20));
System.out.println("受影响行数:" + row);
} /**
* 根据id查询
*
* ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user WHERE id=?
* ==> Parameters: 20(Integer)
*/
@Test
public void selectById() {
SysUser sysUser = sysUserMapper.selectById(20);
System.out.println("sysUser:" + sysUser);
} /**
* 查询所有
* <p>
* ==> Preparing: SELECT id,version,age,gender,name,position,account,password,status,type,create_time,update_time FROM sys_user
* ==> Parameters:
*/
@Test
public void selectList() {
List<SysUser> users = sysUserMapper.selectList(null);
System.out.println(users);
} }
mybatis-plus系统化学习教程:https://www.cnblogs.com/newAndHui/p/14141950.html
完美!
Mybatis-Plus系统化学习之环境准备与简单使用的更多相关文章
- CUDA学习,环境配置和简单例子
根据摩尔定律,每18个月,硬件的速度翻一番.纵使CPU的主频会越来越高,但是其核数受到了极大的限制,目前来说,最多只有8个或者9个核.相比之下,GPU具有很大的优势,他有成千上万个核,能完成大规模的并 ...
- MyBatis学习总结(一)简单入门案例
MyBatis学习总结(一)简单入门案例 主要内容:本文主要通过对数据库中的use表进行增删改查总结mybatis的环境搭建和基本入门使用 一.需要的jar包: 1.核心包 2.依赖包 3.jdbc数 ...
- Java数据持久层框架 MyBatis之API学习三(XML 映射配置文件)
对于MyBatis的学习而言,最好去MyBatis的官方文档:http://www.mybatis.org/mybatis-3/zh/index.html 对于语言的学习而言,马上上手去编程,多多练习 ...
- 如何从零开始系统化学习视觉SLAM?
由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...
- 【转载】Maven+druid+MyBatis+Spring+Oracle+Dubbo开发环境搭建
原地址:http://blog.csdn.net/wp1603710463/article/details/48247817#t16 Maven+druid+MyBatis+spring+Oracle ...
- (转)MyBatis框架的学习(三)——Dao层开发方法
http://blog.csdn.net/yerenyuan_pku/article/details/71700957 使用MyBatis开发Dao层,通常有两个方法,即原始Dao开发方法和Mappe ...
- (转)MyBatis框架的学习(二)——MyBatis架构与入门
http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图: 下面作简要概述: S ...
- docker系统化学习图文教程
1.背景 在实际开发中我们经常遇到这样的情况: 1.开发的时候测试好的程序已发布到线上就出问题: 2.线上的集群环境需要扩容时非常麻烦,比如说要装jdk.mysql.redis等,如果扩容100台服务 ...
- cocos2d-x quick 学习 一 环境
最近几天都在学习quick 一直也在查找资料. 本来这篇文章在昨晚就能写好的.可是昨晚环境遇到点问题自己没想通. 正题:首先是环境配置: 由于我在mac下 所以在网上找了很多资料提前看了. 我之前也 ...
- 深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow
深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow 最近在公司做深度学习相关的学习和实验,原来一直 ...
随机推荐
- 蚁群算法及 TSP 问题上的应用
群智能(Swarm intelligence) 自然界动物群,称之为群. 群的特征: 相互作用的相邻个体的集合 个体的行为简单,既有竞争又有协作 智能化的集体行为(1+1>2): 个体间不仅能够 ...
- Freertos学习:07-队列
--- title: rtos-freertos-07-队列 EntryName : rtos-freertos-07 date: 2020-06-23 09:43:28 categories: ta ...
- Ubuntu 下 python 安装pip
背景 python的强大在于它的第三方库. 安装 python2 sudo apt-get install python-pip python3 curl https://bootstrap.pypa ...
- Android发布,全志T507四核A53@1.4GHz工业平台,含税仅168元起!
近年来,Android系统在工业自动化.仪器仪表.医疗.安防等工业领域的使用日趋广泛.为了满足广大工业用户的需求,创龙科技针对全志T507-H工业平台进行了Android系统适配. 创龙科技T507- ...
- 从PDF到OFD,国产化浪潮下多种文档格式导出的完美解决方案
前言 近年来,中国在信息技术领域持续追求自主创新和供应链安全,伴随信创上升为国家战略,一些行业也开始明确要求文件导出的格式必须为 OFD 格式.OFD 格式目前在政府.金融.税务.教育.医疗等需要文件 ...
- VulnHub-DC-8渗透流程
DC-8 kali:192.168.157.131 靶机:192.168.157.152 信息收集 SQL注入 Drupal 7是有sql注入漏洞的,这里也能看到?nid=1,那测试一下?nid=1' ...
- msgpack的使用
1.引入包 <!--msgpack依赖--> <dependency> <groupId>org.msgpack</groupId> <artif ...
- P1387
#include<iostream> #include<utility> using namespace std; typedef long long ll; #define ...
- SpringCloud 微服务简介
一.认识微服务随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构.这些架构之间有怎样的差别呢? 1.单体架构:将业务的所有功能集中在一个项目中开发,打成一 ...
- CPU的保护模式
保护模式是为了克服实模式低劣的内存管理方式,物理内存地址不能直接被程序访问,程序内部的地址需要被转化为物理地址后再去访问.实模式CPU运行环境16位,保护模式32位. 寄存器扩展: 由于CPU发展到3 ...