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)
雪花算法: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&#