MP入门
一、springboot环境搭建
1.1 pom.xml
<?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.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springbootmp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springbootmp</name>
<description>springbootmp</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</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>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
主要依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
1.2 appliaction.yml
# 配置数据源
spring:
datasource:
name: test
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: 123456
# 配置日志
logging:
level:
root: warn
com.dyz.mybatisplus.dao: trace
pattern:
console: '%p%m%n'
# Mybatis-plus配置内容
mybatis-plus:
#扫描resource目录下的mapper文件夹中的xml文件(多模块项目用classpath*)
mapper-locations: classpath:/mapper/*.xml
configuration:
use-column-label: true
#全局类名
type-aliases-package: com.dyz.mybatisplus.entity
global-config:
db-config:
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: uuid
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
field-strategy: not_null
#驼峰下划线转换
table-underline: true
#逻辑删除配置
logic-delete-value: 0
logic-not-delete-value: 1
1.3 mysql.sql
#创建用户表
CREATE TABLE user (
id BIGINT(20) PRIMARY KEY NOT NULL COMMENT '主键',
name VARCHAR(30) DEFAULT NULL COMMENT '姓名',
age INT(11) DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
manager_id BIGINT(20) DEFAULT NULL COMMENT '直属上级id',
create_time DATETIME DEFAULT NULL COMMENT '创建时间',
CONSTRAINT manager_fk FOREIGN KEY (manager_id)
REFERENCES user (id)
) ENGINE=INNODB CHARSET=UTF8;
#初始化数据:
INSERT INTO user (id, name, age, email, manager_id
, create_time)
VALUES (1087982257332887553, '大boss', 40, 'boss@baomidou.com', NULL
, '2019-01-11 14:20:20'),
(1088248166370832385, '王天风', 25, 'wtf@baomidou.com', 1087982257332887553
, '2019-02-05 11:12:22'),
(1088250446457389058, '李艺伟', 28, 'lyw@baomidou.com', 1088248166370832385
, '2019-02-14 08:31:16'),
(1094590409767661570, '张雨琪', 31, 'zjq@baomidou.com', 1088248166370832385
, '2019-01-14 09:15:15'),
(1094592041087729666, '刘红雨', 32, 'lhm@baomidou.com', 1088248166370832385
, '2019-01-14 09:48:16');
二、测试入门
2.1 实体类
package com.oneboi.springbootmp.entity;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class User {
//主键
private long id;
//姓名
private String name;
//年龄
private Integer age;
//邮箱
private String email;
//直属上级
private Long managerId;
//创建时间
private LocalDateTime createTime;
}
2.2 接口UserMapper
package com.oneboi.springbootmp.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.oneboi.springbootmp.entity.User;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapper extends BaseMapper<User> {
}
2.3 测试查询
package com.oneboi.springbootmp;
import com.oneboi.springbootmp.dao.UserMapper;
import com.oneboi.springbootmp.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import java.util.function.Consumer;
@SpringBootTest
class SpringbootmpApplicationTests {
@Test
void contextLoads() {
}
@Autowired
private UserMapper userMapper;
@Test
public void selectUser(){
List<User> users = userMapper.selectList(null);
//https://blog.csdn.net/qfzhaohan/article/details/121542175
// users.forEach(new Consumer<Object>() {
// @Override
// public void accept(Object o) {
// System.out.println(o);
// }
// });
// users.forEach((o)->{
// System.out.println(o);
// });
users.forEach(System.out::println);
}
}
三 、新增
SSM 传统编程模式
- 接口中写抽象方法
- xml或注解写SQL
- Service中调用接口
- Controller中调用
3.1 insert(T)
传入 实体对象 ,返回影响的行数
3.2 常用注解
mybatis-plus:主键采用雪花算法生成值的前提是实体类的主键属性名称必须为id。
mybatis-plus:数据表字段带有_的可以自动映射到驼峰式命名的属性上(t_user——》tUser)。
注解:
@TableName(“数据库表名”):使用场景实体类名称和数据表名不一致时,通过它指定表名,此时就可以使用mp的单表操作。
@TableId(“主键名”):使用场景实体类属性名称和数据表主键不是id时,通过它声明该属性为主键,就可以采用雪花算法生成主键值操作。
@TableField(“字段名”):使用场景实体类属性名称和数据表字段名不一致时,通过它指定数据表字段名称,就可以和实体类属性对应。
常用注解
1、指定表名,用于与数据库表一一对应,非驼峰命名对应的情况。
@TableName(“tp_user”)
class User {…}
2、指定主键,用于数据库不是以id为主键的表。
@TableId
Long user_id;
3、指定列名,用于数据库修改了列名,而不想修改定义的变量的情况。
@TableField(“real_name”)
String name;
3.3 忽略字段
@TableName(“user”) // 指定表名(数据库表名与实体名称不一致时使用);
@TableField(“name”) // 指定列名(数据库列名与实体属性名称不一致时使用);
@TableField(exist = false) // 忽略该字段(实体属性存在,数据库列不存在时使用);
排除非表字段的三种方式
使用场景:实体类中的某个属性不对应表中的任何字段,只是用于保存临时数据,或者临时组装的数据。
使用方式
1、transient修饰实体类属性(修饰的属性不会被序列化)。
缺陷:有些需求需要序列化该字段。
2、static修饰属性(前提手动实现get、set方法,Lombok对静态属性不会提供get、set方法)。
缺陷:每个对象的属性值一致。
3、@TableField(exist=false),这个注解用来表示数据表中不存在该字段,默认是true。推荐 .
在该属性上面添加@TableFieId(exist=false):exist代表数据库是否有该字段,false代表没有
排除非表字段的三种方式
1. 使用 transient 修饰
private transient String remark;
2. 使用static修饰
private static String remark;
3. @TableField(exist=false)