mysql mybatis原数据相加_MyBatisPlus-入门使用笔记

本文介绍了MyBatisPlus的快速入门,包括创建数据库表、初始化SpringBoot工程、配置依赖、编写实体类和Mapper接口,以及使用MyBatisPlus进行数据的CRUD操作。同时,文章还讨论了MyBatisPlus的主键策略、自动填充功能以及日志配置,展示了如何实现自动插入和更新时间。
摘要由CSDN通过智能技术生成

MyBatisPlus

MyBatisPlus

快速入门

官网文档地址:https://baomidou.gitee.io/mybatis-plus-doc/#/install

使用第三方组件步骤:

1、导入相应的依赖

2、研究依赖如何配置

3、代码如何编写

4、提高扩展技术能力

步骤

1、创建数据库 User 表

id

name

age

email

1

Jone

18

test1@baomidou.com

2

Jack

20

test2@baomidou.com

3

Tom

28

test3@baomidou.com

4

Sandy

21

test4@baomidou.com

5

Billie

24

test5@baomidou.com

其对应的数据库 Schema 脚本如下:

DROP TABLE IF EXISTS user;

CREATE TABLE user

(

id BIGINT(20) NOT NULL COMMENT '主键ID',

name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',

age INT(11) NULL DEFAULT NULL COMMENT '年龄',

email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',

PRIMARY KEY (id)

);

其对应的数据库 Data 脚本如下:

DELETE FROM user;

INSERT INTO user (id, name, age, email) VALUES

(1, 'Jone', 18, 'test1@baomidou.com'),

(2, 'Jack', 20, 'test2@baomidou.com'),

(3, 'Tom', 28, 'test3@baomidou.com'),

(4, 'Sandy', 21, 'test4@baomidou.com'),

(5, 'Billie', 24, 'test5@baomidou.com');

初始化工程

创建一个springboot的工程

可以使用 Spring Initializer 快速初始化一个 Spring Boot 工程

添加依赖

引入spring boot starter 父工程依赖:

org.springframework.bootgroupId>

spring-boot-starter-parentartifactId>

2.3.0.RELEASEversion>

parent>

引入 spring-boot-starter、spring-boot-starter-test、mybatis-plus-boot-starter、lombok、mysql 依赖:

org.springframework.bootgroupId>

spring-boot-starterartifactId>

dependency>

org.springframework.bootgroupId>

spring-boot-starter-testartifactId>

testscope>

dependency>

org.projectlombokgroupId>

lombokartifactId>

trueoptional>

dependency>

com.baomidougroupId>

mybatis-plus-boot-starterartifactId>

3.0.5version>

dependency>

mysqlgroupId>

mysql-connector-javaartifactId>

dependency>

dependencies>

配置

在application.yml配置文件中添加mysql的基本配置和项目启动的基本配置

spring:

#配置thymeleaf模板

thymeleaf:

cache: false#开启缓存

prefix: classpath:/templates/

suffix: .html

encoding: utf-8

#配置mysql数据源

datasource:

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://39.105.27.58/ssmarkert?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT

username: root

password: lovehxp521..

#项目启动端口

server:

port: 8080

#打印日志

mybatis-plus:

configuration:

log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在Springboot启动类中添加@MapperScan注解,扫描Mapper文件:

@SpringBootApplication

@MapperScan("com.hxp.ssmkert.mapper")

public class SsmkertApplication {

public static void main(String[] args) {

SpringApplication.run(SsmkertApplication.class, args);

}

}

编码

编写实体类User.java(此处使用了Lombok简化代码)

@Data

public class User{

private Long id;

private String name;

private Integer age;

private String email;

}

编写Mapper接口 UserMapper.java,所有的CRUD都已经帮我们写完了

public interface UserMapper extends BaseMapper {

}

开始使用

添加测试类,进行整合测试:

@RunWith(SpringRunner.class)

@SpringBootTest

public class UserMapperTest {

@Autowired

private UserMapper userMapper;

@Test

public void userMapperTest1(){

List users = userMapper.selectList(null);//条件为null

users.forEach(System.out::println);

}

}

userMapper 中的 selectList()方法的参数为MP内置的条件封装器Wrapper,所以不填写就是无条件

控制台输出:

User(id=1, name=Jone, age=18, email=test1@baomidou.com)

User(id=2, name=Jack, age=20, email=test2@baomidou.com)

User(id=3, name=Tom, age=28, email=test3@baomidou.com)

User(id=4, name=Sandy, age=21, email=test4@baomidou.com)

User(id=5, name=Billie, age=24, email=test5@baomidou.com)

思考问题?

1、SQL谁帮我们写的?Mybatis-Plus都写好了

2、方法哪里来的?Mybatis-Plus都写好了

配置日志

我们的mysql运行情况我们是不知道的,我们需要配置一下日志打印输出,帮助我们开发测试。

在appliaction.yml文件中

mybatis-plus:

configuration:

log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

主键的主键策略

1.使用注解添加主键策略

自增主键

//使用注解添加主键策略

@TableId(type = IdType.AUTO)//主键自增策略

private Long id;

注意:使用自增主键必须数据表设置自增

2.通过配置文件配置全局的主键生成策略

主键策略列表:

策略

说明

AUTO

数据库ID自增

NONE

该类型为未设置主键类型

INPUT

用户输入ID,该类型可以通过自己注册自动填充插件进行填充

ID_WORKER

全局唯一ID (idWorker)

UUID

全局唯一ID (UUID)

ID_WORKER_STR

字符串全局唯一ID (idWorker 的字符串表示)

AUTO(0),//数据库ID自增

NONE(1),//该类型为未设置主键类型,新版本更新 默认为NONE

INPUT(2),//用户输入ID * 该类型可以通过自己注册自动填充插件进行填充

/* 以下3种类型、只有当插入对象ID 为空,才自动填充。 */

ID_WORKER(3),//全局唯一ID (idWorker)

UUID(4),//全局唯一ID (UUID)

ID_WORKER_STR(5);//字符串全局唯一ID (idWorker 的字符串表示)

mybatis-plus 的CRUD

update

//修改测试

@Test

public void UpdateTest() {

User user = new User();

user.setId(6L);

user.setName("一颗小土豆");

user.setAge(24);

user.setEmail("2426712259@qq.com");

int update = userMapper.updateById(user);//根据主键id修改

System.out.println(update);

}

/*打印输出的日志

==> Preparing: UPDATE user SET name=?, age=?, email=? WHERE id=?

==> Parameters: 一颗小土豆(String), 24(Integer), 2426712259@qq.com(String), 6(Long)

<== Updates: 1

*/

//这里我们只修改name不修改其他的参数

@Test

public void UpdateTest2() {

User user = new User();

user.setId(6L);

user.setName("一颗小辣椒");

// user.setAge(24);

// user.setEmail("2426712259@qq.com");

int update = userMapper.updateById(user);

System.out.println(update);

}

/*

==> Preparing: UPDATE user SET name=? WHERE id=?

==> Parameters: 一颗小辣椒(String), 6(Long)

<== Updates: 1

*/

发现:

通过两个修改案例,我们发现mybatis-plus为我们实现的方法是动态SQL

自动填充

创建时间,修改时间,这些操作都是自动化完成的,我们不希望手动更新。

阿里巴巴开发手册:所有的数据库表都必须配置这两个字段:gmt_create、gmt_modified ,而且需要自动化。

方法一:数据库级别

1、修改数据库

gmt_create/create_time : datetime 添加默认值:CURRENT_TIMESTAMP

gmt_modified/update_time : datetime 添加默认值:CURRENT_TIMESTAMP 勾选根据当前时间戳跟新

a8a7907a9752c7b511761df799cdc820.png

2、再次测试,同步实体类代码

private Date updateTime;

private Date createTime;

我们插入一条新的数据,create_time和update_time 都已经帮我们生成了

b49ef06996eecc660fe0a1a483a2c683.png

我们执行修改操作并不手动更新时间,查看update_time是否发生变化

@Test

public void UpdateTest() {

//这里并没有修改时间

User user = new User();

user.setId(7L);

user.setName("一颗小辣椒");

int update = userMapper.updateById(user);

System.out.println(update);

}

执行结果,时间发生了变化。

917fa55f999beee7430f3b81a1b6716f.png

方法二:代码级别

代码的自动填充

1.删除数据库的默认值

2.使用mybatis-plus注解

@TableField( fill = FieldFill.INSERT)

private Date createTime;

@TableField( fill = FieldFill.INSERT_UPDATE)

private Date updateTime;

3.创建自定义监听

mybatis-plus 3.3.0版本之前:

@Slf4j

@Component

public class MyMetaObjectHandler implements MetaObjectHandler {

//插入时填充策略

@Override

public void insertFill(MetaObject metaObject) {

log.info("start insert fill");

this.setFieldValByName("createTime",new Date(),metaObject);

this.setFieldValByName("updateTime",new Date(),metaObject);

}

//更新时填充策略

@Override

public void updateFill(MetaObject metaObject) {

log.info("start update fill");

this.setFieldValByName("updateTime",new Date(),metaObject);

}

}

mybatis-plus 3.3.0版本之后:

@Slf4j

@Component

public class MyMetaObjectHandler implements MetaObjectHandler {

@Override

public void insertFill(MetaObject metaObject) {

log.info("start insert fill ....");

this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)

this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)

/* 上面选其一使用,下面的已过时(注意 strictInsertFill 有多个方法,详细查看源码) */

//this.setFieldValByName("operator", "Jerry", metaObject);

//this.setInsertFieldValByName("operator", "Jerry", metaObject);

}

@Override

public void updateFill(MetaObject metaObject) {

log.info("start update fill ....");

this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)

this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)

/* 上面选其一使用,下面的已过时(注意 strictUpdateFill 有多个方法,详细查看源码) */

//this.setFieldValByName("operator", "Tom", metaObject);

//this.setUpdateFieldValByName("operator", "Tom", metaObject);

}

}

4.插入测试

//测试插入<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的使用Mybatis Plus函数的示例: 假设我们有一个表名为user,包含以下字段:id、name、age、email。 1. 首先,在pom.xml文件中添加Mybatis Plus的依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>latest version</version> </dependency> ``` 2. 在Mapper接口中定义查询方法,例如根据年龄age查询: ``` import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.ibatis.annotations.Param; import java.util.List; public interface UserMapper extends BaseMapper<User> { List<User> selectByAge(@Param("age") Integer age); } ``` 3. 在Service实现类中调用函数查询方法,例如查询年龄大于20的用户: ``` import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import java.util.List; @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Override public List<User> getByAge(Integer age) { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", age); // 使用Mybatis Plus的gt函数,查询年龄大于age的用户 List<User> userList = baseMapper.selectList(queryWrapper); return userList; } } ``` 这样就可以使用Mybatis Plus的函数查询数据了。除了gt函数,Mybatis Plus还提供了很多其他的函数,例如eq、ne、like、between等,具体可以参考官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值