狂神说---MyBatisPlus学习

MyBatisPlus学习

MyBatisPlus官网教程
哔哩哔哩《狂神说》学习网站

MyBatisPlus快速入门

1.新建mybatis_plus数据库

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)
);

2.新增数据进表

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');

在这里插入图片描述

3.新建springboot项目(mybatis_plus)

编写项目,初始化项目!使用springboot初始化!

4…导入依赖

<!--数据库驱动-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.0.5</version>
</dependency>

在这里插入图片描述

5.连接数据库 application.xml

是否使用安全连接:useSSL=false

#  mysql5 驱动不同 com.mysql.jdbc.Driver
#  mysql8 驱动不同 com.mysql.cj.jdbc.Driver  serverTimezone=GMT%2B8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=UTF-8&&useSSL=false&serverTimezone=GMT%2B8&useUnicode=true
spring.datasource.username=root
spring.datasource.password=123456

5.传统的Pojo-dao(连接mybatis,配置mapper.xml文件)-service-controller

6.用mybatis-plus后(pojo-mapper接口-使用)

Pojo:
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
   
    private Long id;
    private String name;
    private Integer age;
    private String email;

}

Mapper:
//在对应的mapper上继承基本的类 ---BaseMapper
@Repository//表示是持久层   dao层的 mapper
public interface UserMapper extends BaseMapper<User>{
   
    //在继承BaseMapper之后,所有的CRUD操作已经编写完成
}

注意点:主启动类MybatisPlusApplication 添加扫描包

@MapperScan("com.hh.mapper") //扫描包
@SpringBootApplication
public class MybatisPlusApplication {
   

    public static void main(String[] args) {
   
        SpringApplication.run(MybatisPlusApplication.class, args);
    }
}

使用(测试类)
@SpringBootTest
class MybatisPlusApplicationTests {
   
    @Autowired//远程注入  继承了BaseMapper,所有的方法都来自于父类
    private UserMapper userMapper;
    @Test
    void contextLoads() {
   
        //参数 wrapper ,条件构造器
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);
    }
}
演示结果:
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)

7.日志配置

#配置日志 方便在开发的时候看到查询语句是怎么运行的,在运营阶段可以关闭日志,提高效率 
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl



演示结果:
Preparing: SELECT id,name,age,email FROM user 

CRUD 扩展

插入

@Test
void testinsert() {
   
    User user = new User();
    user.setName("哈哈学mybatis_plus");
    user.setAge(10);
    user.setEmail("2843722413@qq.com");
    int result = userMapper.insert(user);//id 自动生成了
    System.out.println(result);//受影响行数
    System.out.println(user);//发现,id会自动回填
}

在这里插入图片描述
数据库插入的id的默认值为:全局的唯一id
主键生成策略

//默认ID_WORKER全局唯一ID
@TableId(type = IdType.ID_WORKER)

分布式系统唯一id生成方法汇总

雪花算法:snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。具体实现的代码可以参看 https://github.com/twitter/snowflake。雪花算法支持的TPS可以达到419万左右(2^22*1000)。
雪花算法在工程实现上有单机版本和分布式版本。单机版本如下,分布式版本可以参看美团leaf算法:https://github.com/Meituan-Dianping/Leaf

主键自增
1.实体类上:@TableId(type = IdType.AUTO)
2.数据库字段一定要设置为自增

在这里插入图片描述
测试:
查看自增量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述其余的源码解释:

public enum IdType {
   
    AUTO(0),//数据库ID自增
    
    NONE(1),//未设置主键INPUT(2),//手动输入
    ID_WORKER(3),//默认的全局唯一ID 
    UUID(4),//全局唯一ID UUID
    ID_WORKER_STR(5);// 字符串表示法
 }

一般手动就必须配置id,注意:此时的数据库字段不能设置为自增

@TableId(type = IdType.INPUT)

user.setId(7L);

修改

//测试修改
@Test
void testUpdate() {
   
    User user = new User();
//通过条件自动拼接动态SQL
    user.setId(6L);
    user.setName("哈哈学mybatis_plus2");
    user.setAge(20);
    user.setEmail("2843722413@qq.com");

    int i = userMapper.updateById(user);
    System.out.println(i);
}

在这里插入图片描述

自动填充

在这里插入图片描述
方式一:数据库级别(不建议使用)
1.在表新增字段 create_time ,update_time
在这里插入图片描述
2.在此测试更新,需要先把实体类同步

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
   

    //ID_WORKER 全局唯一ID ;AUTO:自增
    @TableId(type = IdType.INPUT)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
}

3.测试

@SpringBootTest
class MybatisPlusApplicationTests {
   

    @Autowired//远程注入  继承了BaseMapper&#
  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值